你好,我是 @马哥python说 的小迷弟。
但是,很多不懂python编程的小伙伴无法使用它,非常痛苦!
于是,我把这个程序封装成了一个桌面软件(exe文件),无需python运行环境也可以使用。
通过python爬虫技术,爬取百度搜索结果数据,包含字段:
页码、标题、百度链接、真实链接、简介、网站名称。
并把源码封装成exe文件,方便没有python环境,或者不懂技术的人使用它。
首先,导入需要用到的库:
定义一个请求头:
cookie是个关键,如果不加cookie,响应码可能不是200,获取不到数据,而且cookie值是有有效期的,需要定期更换,如果发现返回无数据或响应码非200,尝试替换最新的cookie。
按照图示顺序,依次:
- 点击Network,进入网络页
- 点击All,查看所有网络请求
- 选择目标链接,和地址栏里的地址一致
- 查看Request Headers请求头
- 查看请求头里的cookie,直接右键,Copy value,粘贴到代码里
wd=后面是搜索关键字"马哥python说",pn=后面是10(规律:第一页是0,第二页是10,第三页是20,以此类推),其他URL参数可以忽略。
每一条搜索结果,都是class=“result c-container new-pmd”,下层结构里有简介、链接等内容,解析内部子元素不再赘述。
所以根据这个逻辑,开发爬虫代码。
其中,获取到的标题链接,一般是这种结构:
http://www.baidu.com/link?url=7sxpKz_qoESU5b1BHZThKRAnXxPngB5kx1nZdUBCaXh7a4BgUgx9Zz-IqpeqDZTOIjvfY0u6ebnJdVWIfm5Tz_
这显然是百度的一个跳转前的地址,不是目标地址,怎么获取它背后的真实地址呢?
向这个跳转前地址,发送一个请求,然后逻辑处理下:
如果响应码是302,就从响应头中的Location参数获取真实地址。
如果是其他响应码,就从响应内容中用正则表达式提取出URL真实地址。
把爬取到的数据,保存到csv文件:
to_csv的时候需加上选项(encoding=‘utf_8_sig’),否则存入数据会产生乱码,尤其是windows用户!
界面部分代码:
软件运行过程中,会在同级目录下生成logs文件夹,文件夹内会出现log文件,记录下软件在整个运行过程中的日志,方便长时间运行、无人值守,出现问题后的debug。
部分核心代码:
演示视频:
【爬虫GUI演示】用python爬百度搜索,并开发成exe桌面软件!