一、引言
自从开始看《Web Scraping with Python》这本书之后,我就天天想着给自己创造需求练习爬虫实践。
我相信每一个学习爬虫的人,都曾经想过在搜索引擎上爬些有趣的东西。在自己实现了 GitHub Star 数、CSDN 博客信息的爬取之后,自然而然,就想要去爬取一下百度。
想要了解前两个实例的实现的同学,可以点击这里:
Web Scraping with Python: 使用 Python 爬 GitHub Star 数
Web Scraping with Python: 使用 Python 爬 CSDN 博客
先给自己定一个需求吧:
输入指定关键词,输入指定的条目数,最后爬虫程序将爬取到的结果信息写入到本地的一个 MarkDown 文件中,以表格形式显示出来
在经历了之前两个实例的实践之后,这个需求看起来也不会很难。
接下来,让我们开始吧!
二、分析:爬取规则
我们想要爬取指定关键词的搜索条目,就需要了解一些规则信息,通过这些规则信息,我们就可以编写指定的爬虫程序完成我们想要的需求。
在这里,我们需要的信息如下:
1. 入口网址是什么?
这是一个非常重要的问题。接下来让我们打开网址测试下,我们在百度一下中输入 python 测试词条,发现其生成了复杂的 url:
https://www.baidu.com/s?wd=python&rsv_spt=1&rsv_iqid=0xf2a1a84300027a1e&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=10&rsv_sug1=11&rsv_sug7=100&rsv_sug2=0&inputT=2354&rsv_sug4=2354
这么复杂?!通过查询资料,发现百度会通过环境信息对于你搜索的结果进行一些适配的变化,而我们不需要这些信息,因此,我们可以输入这么一个 url:
https://www.baidu.com/s?wd=python
那么,这个就是我们的入口网址了,https://www.baidu.com/s?wd=
后加上关键词即可。
2. 我们如何实现多页的跳转?
这个问题涉及到了我们大量信息的收集。这里,我查看了下百度的下一页
按钮的样式:
<a href="/s?wd=asdfafdsasdfasdfffffffffffffffffffff&pn=10&oq=asdfafdsasdfasdfffffffffffffffffffff&ie=utf-8&rsv_pq=b5e8070300006cbc&rsv_t=d4cbSiBUdx2J%2BXs6yKLuS3IvH8QA0fg9TcrRwpbwp0WASJ1szyVs5a20HdU&rsv_page=1" class="n">下一页>