鱼C论坛

 找回密码
 立即注册
查看: 1533|回复: 8

关于scrapy的问题,悬赏20

[复制链接]
发表于 2019-5-28 13:26:32 | 显示全部楼层 |阅读模式
20鱼币
本帖最后由 hjx123hjx 于 2019-5-28 13:36 编辑

在写scrapy爬虫时遇到一个问题,爬的是电脑端美团外卖商铺的用户评论。用requests写的会返回200,成功爬取到数据,scrapy写的就返回400,挂了。不知道什么原因,麻烦大佬们看看。
先贴上requests代码
  1. import requests

  2. url = 'https://waimai.meituan.com/ajax/comment'        # 这是美团外卖评论的Ajax的url

  3. headers = {
  4.     'Accept':'application/json, text/javascript, */*; q=0.01',
  5.     'Accept-Encoding':'gzip, deflate, br',
  6.     'Accept-Language':'zh-CN,zh;q=0.9',
  7.     'Connection':'keep-alive',
  8.     'Content-Length':'241',
  9.     'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
  10.     'Cookie':'uuid=8e9362664f0948d8a5d4.1557983309.1.0.0; _lxsdk_cuid=16abf0aad07c8-0431f185189d65-3c604504-1fa400-16abf0aad08c8; w_utmz="utm_campaign=(direct)&utm_source=(direct)&utm_medium=(none)&utm_content=(none)&utm_term=(none)"; w_uuid=DqQpKRQajmtt8yKTA5uNYZLKWcphwC9qZKiHKry1kb80O1WjoLKtm4nPDz4skpD0; _ga=GA1.3.41017888.1557983326; waddrname="%E5%8D%8E%E4%BE%A8%E5%A4%A7%E5%AD%A6%28%E6%B3%89%E5%B7%9E%E6%A0%A1%E5%8C%BA%29"; w_geoid=wskmguqgtp3w; w_cid=350503; w_cpy=fengzequ; w_cpy_cn="%E4%B8%B0%E6%B3%BD%E5%8C%BA"; w_ah="24.940978847444057,118.65084372460842,%E5%8D%8E%E4%BE%A8%E5%A4%A7%E5%AD%A6%28%E6%B3%89%E5%B7%9E%E6%A0%A1%E5%8C%BA%29"; __utma=211559370.698078701.1558067673.1558067673.1558067673.1; __utmz=211559370.1558067673.1.1.utmcsr=baidu|utmccn=baidu|utmcmd=organic|utmcct=zt_search; Hm_lvt_f66b37722f586a240d4621318a5a6ebe=1558067673; __mta=252484278.1557983327243.1558067738912.1558409690003.5; _gid=GA1.3.520237432.1558681235; _lx_utm=utm_source%3Dbaidu%26utm_campaign%3Dbaidu%26utm_medium%3Dorganic%26utm_content%3Dzt_search; w_visitid=fe58a7bf-408e-442b-adae-318f085100d9; _lxsdk_s=16aece83463-726-2ca-de5%7C%7C33; JSESSIONID=otcqlhtf82jigfigwn86mhvb; _gat=1',
  11.     'Host':'waimai.meituan.com',
  12.     'Origin':'https://waimai.meituan.com',
  13.     'Referer':'https://waimai.meituan.com/comment/144748066017325512',
  14.     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
  15.     'X-Requested-With':'XMLHttpRequest'
  16.     }

  17. # 要提交的表单
  18. data = {
  19.     'wmpoiIdStr': '144748066017325512',
  20.     'offset': '1',       
  21.     'has_content': '1',
  22.     'score_grade': '1',
  23.     'uuid': 'DqQpKRQajmtt8yKTA5uNYZLKWcphwC9qZKiHKry1kb80O1WjoLKtm4nPDz4skpD0',
  24.     'platform': '1',
  25.     'partner': '4',
  26.     'originUrl': 'https%3A%2F%2Fwaimai.meituan.com%2Fcomment%2F144748066017325512'
  27.     }
  28. cookie = 'uuid=8e9362664f0948d8a5d4.1557983309.1.0.0; _lxsdk_cuid=16abf0aad07c8-0431f185189d65-3c604504-1fa400-16abf0aad08c8; w_utmz="utm_campaign=(direct)&utm_source=(direct)&utm_medium=(none)&utm_content=(none)&utm_term=(none)"; w_uuid=DqQpKRQajmtt8yKTA5uNYZLKWcphwC9qZKiHKry1kb80O1WjoLKtm4nPDz4skpD0; _ga=GA1.3.41017888.1557983326; waddrname="%E5%8D%8E%E4%BE%A8%E5%A4%A7%E5%AD%A6%28%E6%B3%89%E5%B7%9E%E6%A0%A1%E5%8C%BA%29"; w_geoid=wskmguqgtp3w; w_cid=350503; w_cpy=fengzequ; w_cpy_cn="%E4%B8%B0%E6%B3%BD%E5%8C%BA"; w_ah="24.940978847444057,118.65084372460842,%E5%8D%8E%E4%BE%A8%E5%A4%A7%E5%AD%A6%28%E6%B3%89%E5%B7%9E%E6%A0%A1%E5%8C%BA%29"; __utma=211559370.698078701.1558067673.1558067673.1558067673.1; __utmz=211559370.1558067673.1.1.utmcsr=baidu|utmccn=baidu|utmcmd=organic|utmcct=zt_search; Hm_lvt_f66b37722f586a240d4621318a5a6ebe=1558067673; __mta=252484278.1557983327243.1558067738912.1558409690003.5; _gid=GA1.3.520237432.1558681235; _lx_utm=utm_source%3Dbaidu%26utm_campaign%3Dbaidu%26utm_medium%3Dorganic%26utm_content%3Dzt_search; w_visitid=fe58a7bf-408e-442b-adae-318f085100d9; _lxsdk_s=16aece83463-726-2ca-de5%7C%7C32; JSESSIONID=e7r83ogmqq8d1aaqcswrjaary; _gat=1'
  29. cookies = {each.split('=')[0]: each.split('=')[1] for each in cookie.split('; ')}

  30. response = requests.post(url=url, headers=headers, data=data, cookies=cookies)
  31. print(response.status_code)


复制代码


在scrapy写的部分如下
  1. class MtSpider(scrapy.Spider):
  2.     name = 'mt'
  3.     allowed_domains = ['waimai.meituan.com']
  4.     start_url = 'https://waimai.meituan.com/ajax/comment'


  5.     def start_requests(self):
  6.         # yield scrapy.Request(url=self.start_url, method='POST', body=json.dumps(data), headers=headers, cookies=cookies, callback=self.parse) 这个是在网上找的办法,但是也不行
  7.         yield scrapy.FormRequest(url=self.start_url, formdata=data, headers=headers, cookies=cookies, callback=self.parse)
复制代码

这里的cookies,headers,data是requests里复制过来的,都一样。但访问后就报400,无法获得数据。希望大佬帮忙看看这是怎么回事?谢谢!
提醒:美团外卖会封IP和浏览器,被封后换个浏览器或IP就可以了,一般封一两天吧。代码还是可以爬的,不是很清楚这个封的原理。

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-28 18:09:58 | 显示全部楼层
scrapy请求通过下载器中间件处理后在传给下载器的,你可以在上面用下载器中间件来处理cookies、headers等问题,
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-5-28 20:11:25 | 显示全部楼层
_谪仙 发表于 2019-5-28 18:09
scrapy请求通过下载器中间件处理后在传给下载器的,你可以在上面用下载器中间件来处理cookies、headers等问 ...

谢谢回答!我把cookies、headers改到下载器中间件还是不可以,应该不是这个问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-29 09:14:41 | 显示全部楼层
400那应该就是服务器启动了反爬机制了,会不会是问题出在你来源网址那里?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-5-29 10:23:29 | 显示全部楼层
wiselin 发表于 2019-5-29 09:14
400那应该就是服务器启动了反爬机制了,会不会是问题出在你来源网址那里?

网址是有一定的反爬机制的,一定几率触发重定向302,用requests多试几次就能成功获取数据了,但是scrapy就一直报400,不明白是哪里的问题。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-29 10:48:50 | 显示全部楼层
1 抓包,对比requests发出的请求和scrapy发出的请求,两者区别在哪里
2 scrapy settings --> COOKIES_ENABLED = True
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-5-29 12:50:48 | 显示全部楼层
weepingbaoebi 发表于 2019-5-29 10:48
1 抓包,对比requests发出的请求和scrapy发出的请求,两者区别在哪里
2 scrapy settings --> COOKIES_ENABLE ...

第二种方法试过了。对抓包不是很了解。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-29 15:01:44 | 显示全部楼层
settings   里面有设置关闭reboot协议,和开启请求头吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-5-29 16:12:31 | 显示全部楼层
Stubborn 发表于 2019-5-29 15:01
settings   里面有设置关闭reboot协议,和开启请求头吗?

ROBOT协议改成False了,请求头开启试过也不行,顺便请教一下,我把headers放在下载中间件或者爬虫文件里,应该会自动覆盖settings里的请求头吧。之前找的资料好像是这两个地方的优先级高。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-27 19:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表