python 爬取百度搜索结果及百度安全验证问题的解决

由于需求,边查边写边改写出了这个还算能用的代码,拿出来分享下。

代码中都有注释,应该基本都能看懂,根据自己需求可以稍微改改就可以用。

针对百度安全验证的问题

爬取次数太多会出现人机验证,为了解决这个问题,查了很多资料,有的说,在headers部分加入 'Accept’参数,有的说多加几个参数,我都进行了尝试,但是基本都没啥用。

为了不让其运行过程中因为验证问题出现中断,我加入了while True 的无限循环,如果出现验证问题,则休眠40秒,直到百度安全验证时限过去。
(这里存在一个小小的机制,这也许是我的猜测,不一定准确。我之前在做微博爬虫的时候也会出现验证的问题,在尝试了很多次后,发现这个验证问题是有时限的,大概3-5分钟就会过去,就又可以爬取,所以我在这里设置了无线循环,如果出现验证,则休眠,直到时限过去,继续爬取,这样就不会因为验证问题而中断)
此外,为了避免爬取太频繁,我在每个查询词爬取完成后,让程序休眠3秒。

while True:
        resp = geturl(keyword, 0)					# 接受返回的页面
        soup = BeautifulSoup(resp, "html.parser")		#  使用bs4进行解析
        if soup.title.string == "百度安全验证":
            print(keyword)
            print("百度安全验证,等待中......")
            time.sleep(40)
        else:
            nums_text = soup.find_all(text=re.compile("百度为您找到相关结果(.*?)个"))[-1]   # 获取百度搜索结果的数量,不能根据标签获取内容,因为百度标签属性会不定时的改变。		# 百度为您找到相关结果约100,000,000个  百度为您找到相关结果0个
            print(nums_text)
            nums_text1 = re.sub(r'\D', "", str(nums_text))  # 删除非数字字符串

            return nums_text1
            break

虽然解决了最大的问题,但是程序还是会因为各种问题偶尔会中断,无需管出现的错误,只需重新运行即可,如果连续几次程序没有运行完就中断,那就要查查出现错误的原因了。

完整代码


版权声明:本文为qq_16397025原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。