批量拣取,批量采集一键导出数据

背景描述

最近需要收集百度搜索查询结果,可是使用的时候,发现之前的python脚本程序失效了。

这使我无法批量采集所需的关键词数据。

问题描述

启动python脚本程序后,获取的数据一直是空值。

Request请求结果返回的html页面是百度安全验证页面。

问题演示

搜索了一下,知道这是百度设置的反爬机制。

如果请求被检测判定为非人类,则会返回此页面。

百度安全验证 callback"> 网络不给力,请稍后重试 返回首页

问题反馈

我的思考

为了能够解决这个问题。

首先我猜想可能是请求头headers的数据过期了。

我通过浏览器F12,拿到最新的cookie,在代码中替换了cookie。

初次尝试

尝试执行代码,结果失败。依旧是百度安全验证页面。

再次思考

我二次猜想,把浏览器中成功获取搜索结果的url,替换成我在代码中发起的请求url。

当然,此时的cookie也是当前页面请求中发起的cookie。

再次尝试

这次,代码是可以正常请求到数据的。

一个猜想

我替换了url中的关键词word,然后执行代码,又会返回安全验证。

我心想难道百度现在这么坑,一次搜索结果就要对应一个cookie么。

得出结果

头好痛,我可能要长脑子了。

终于脑子长出来了,我找到了突破口。

我发现用urllib库的request模块就可以正常请求得到网页数据。

既然这个模块可以拿到数据,就现从这一块入手。

编写代码进行测试。

req = urllib.request.Request(url, headers=headers)response = urllib.request.urlopen(req)html = response.read().decode('utf-8')print(html)html = etree.HTML(html)

image.png

可以拿到数据得到数据。

那就可以完善代码,实现自动翻页爬取分页数据了。

既然urllib库可以请求成功,那我之前的两个猜想就都是胡言乱语。

虽然我没有搞清楚为什么request库会被反爬机制制裁。

但是既然可以完成需求,那就先用着。

能跑就行(不是)。

附加彩蛋

在一度思索反爬原理而得不到结果的时候,我想到了借助网页采集工具来实现我的需求。

我便选择了八爪鱼采集器。

这个工具很强大,不需要懂代码,就可以完成网页数据的采集。

花了十分钟做了简单的配置我就在八爪鱼获得了想要的数据。

屏幕截图 2023-03-03 142024.png

结语

此次实践目标是:收集百度搜索的词条数据。

使用了两种收集方式:

python脚本八爪鱼采集器对比优缺点各自优点

python性能更好,可以对数据进行更为复杂的处理。

八爪鱼采集器上手简单,无需代码即可采集数据。

各自缺点

python需要一定的编程基础,对小白不太友好。

八爪鱼采集器可以采集数据,但是只能做一些简单的逻辑处理判断。

疑点未解决

python脚本中request库模拟请求会被百度反爬机制干掉,但是urllib库的request模块模拟的请求可以正常使用,这背后的原因是什么。

上一篇: 女销售原来靠这样卖房(楼盘置业顾问提成大概多少)
下一篇: 旋挖机的钻头「旋挖机钻这钻头才开孔就破裂质量太差了」