Python 如何使用Scrapy下载json响应?

Python 如何使用Scrapy下载json响应?,python,scrapy,scrapy-spider,Python,Scrapy,Scrapy Spider,我正试图通过scrapy从newegg移动API下载一个页面。 我写了这个脚本,但它不起作用。我尝试使用普通链接,脚本将响应写入文件,但使用newegg mobile API的url无法将响应写入文件 #蜘蛛/newegg.py 我无法从自己的url保存响应 我想从中下载一个json 我正在scrapy.cfg中设置USER\u代理: [settings] default = neweggs.settings [deploy] url = http://localhost:6800/ proj

我正试图通过scrapy从newegg移动API下载一个页面。 我写了这个脚本,但它不起作用。我尝试使用普通链接,脚本将响应写入文件,但使用newegg mobile API的url无法将响应写入文件

#蜘蛛/newegg.py 我无法从自己的url保存响应

我想从中下载一个json

我正在
scrapy.cfg
中设置
USER\u代理

[settings]
default = neweggs.settings

[deploy]
url = http://localhost:6800/
project = neweggs

USER_AGENT = 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3'

刮痧统计:

2015-10-28 14:46:38 [scrapy] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 777,
 'downloader/request_count': 3,
 'downloader/request_method_count/GET': 3,
 'downloader/response_bytes': 1430,
 'downloader/response_count': 3,
 'downloader/response_status_count/400': 3,
 'finish_reason': 'finished',
 'finish_time': datetime.datetime(2015, 10, 28, 12, 46, 38, 776000),
 'log_count/DEBUG': 6,
 'log_count/INFO': 7,
 'response_received_count': 1,
 'scheduler/dequeued': 3,
 'scheduler/dequeued/memory': 3,
 'scheduler/enqueued': 3,
 'scheduler/enqueued/memory': 3,
 'start_time': datetime.datetime(2015, 10, 28, 12, 46, 36, 208000)}
2015-10-28 14:46:38 [scrapy] INFO: Spider closed (finished)

由于您是在
start\u requests
中手动发出请求,因此需要显式地传递用户代理标头。为我工作:

def start_requests(self):
    for url in self.start_urls:
        yield scrapy.Request(url, callback=self.parse_details, headers={"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3"})
指向“”的链接正在返回HTTP状态为400的页面,这是“错误请求”


这就是为什么会有3个连接,而Scrapy重试中间件在放弃抓取页面之前会重试页面抓取三次。默认情况下,Scrapy不会将HTTP状态为400的响应传回spider。如果您愿意,可以将
handle\u httpstatus\u list=[400]
添加到spider中。

您不需要使用
scrapy.cfg
来指定设置,您需要在
settings.py
文件中执行此操作

设置。py:

...
USER_AGENT = 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3'
...
...
USER_AGENT = 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3'
...