scrapy爬取过程中,大量http状态码为250,无法正常爬取,求问各位如何解决?

python新手,从http://www.8spo.com/zonghe/14...借鉴,我在scrapy中尝试修改头文件信息,单个网页可以正常抓取,但是网页增加之后,大量http状态码为250.
middlewares.py
class RotateUserAgentMiddleware(UserAgentMiddleware):

def __init__(self, user_agent=''):

self.user_agent = user_agent

def process_request(self, request, spider):

ua = random.choice(self.user_agent_list)

if ua:

request.headers.setdefault('User-Agent', ua)

user_agent_list = [\

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"\

"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",\

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",\

"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",\

"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",\

"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",\

"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",\

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",\

"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",\

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",\

"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",\

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",\

"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",\

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",\

"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",\

"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",\

"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",\

"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"]

settings.py
DOWNLOADER_MIDDLEWARES = {

        'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware':None,  

'haodf.middlewares.RotateUserAgentMiddleware':400,

}

clipboard.png
导致大量信息抓取不到,请问应该如何解决?能否通过返回http状态码,重新选择请求头?如何实现。

回答:

同新手。

题主说到爬取多个网页,为了避免一些反爬机制,一般方法就:

  • 更换user-agent ,题主使用了

  • 单个IP访问就控制访问速度,设置爬取延迟,我在写单线程爬虫时候用过time.sleep方法。

  • 可以使用代理IP,使用网上免费或者收费的代理IP资源,通过代理IP访问,做轮转ip代理,例如100个请求分别走80个代理ip访问。

  • 尝试禁用Cookies

题主出现这种情况应该是单个ip短时间高频访问站点,建议用代理ip方法来访问。
如果要按照你的思路手动处理请求,Scrapy默认的设置是过滤掉有问题的HTTP response(即response状态码不在200-300之间),可以在处理respnse,把250状态的response处理一下,返回request让scrapy再次发起请求,那么建议可以设置延迟爬取,不然短时间内重新请求估计还是继续250。

以上是 scrapy爬取过程中,大量http状态码为250,无法正常爬取,求问各位如何解决? 的全部内容, 来源链接: utcz.com/a/160974.html

回到顶部