前情提要
此代码使用scrapy框架爬取特定“关键词”下的搜狗常规搜索结果,保存到同级目录下csv文件。并非爬取微信公众号文章,但是绕过验证码的原理相同。如有错误,希望大家指正。
URL结构
https://www.sogou.com/web?query={关键词}&page={n}
开始爬取
scrapy常规操作就不唠叨了,上代码
class SougouSearchSpider(scrapy.Spider):
name = 'sogou_search'
allowed_domains = ['www.sogou.com']
start_urls = ['https://www.sogou.com/web?query=python&page=1']
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url=url,
callback=self.parse)
一顿操作后,发现刚爬了3页,就停止了。报错如下
2020-06-11 16:05:15 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) to <GET http://www.sogou.com/ant
应该访问的第四页被302重定向到了antispider反爬虫的验证码界面

看到这里,我们采取一下常规措施:1.更换动态IP2.伪装header3.硬刚破解验证码
一步一步来,我们先更换IP。这里我使用的是使用Redis的免费代理IP池:ProxyPool,Github地址。非常nice,代码十分简练。
import requests
proxypool_url = 'http://127.0.0.1:5555/random'
def get_random_proxy():
response = requests.get(proxypool_url)
try:
if response.status_code == 200:
return response.text.strip()
except ConnectionError:
return None
遗憾的是,只换IP不太行,还是会被302到antispider页面。接下来,我们伪装一下header,先看一下request.header。手动搜索,然后F12查看。


本文介绍了如何使用Scrapy爬取搜狗搜索结果并绕过反爬虫机制,包括更换IP、设置伪装header、动态获取cookies等策略。通过访问搜狗家族其他页面获取新的cookies,成功避免触发验证码,实现长时间稳定爬取。

3956

被折叠的 条评论
为什么被折叠?



