【发布时间】:2019-08-08 23:21:06
【问题描述】:
我在我的 Spider 类中添加了以下代码,以便能够将 URL 作为参数传递:
def __init__(self, *args, **kwargs):
super(MySpider, self).__init__(*args, **kwargs)
self.start_urls = [kwargs.get('target_url').replace('\\', '')]
(替换功能是去除终端转义引入的反斜杠)。
蜘蛛识别 url,开始解析并在我运行时在本地完美关闭:
scrapy crawl my_spider -a target_url="https://www.example.com/list.htm\?tri\=initial\&enterprise\=0\&idtypebien\=2,1\&pxMax\=1000000\&idtt\=2,5\&naturebien\=1,2,4\&ci\=910377"
但是,当我通过 scrapyd 做同样的事情时,我运行:
curl https://my_spider.herokuapp.com/schedule.json -d project=default -d spider=my_spider -d target_url="https://www.example.com/list.htm\?tri\=initial\&enterprise\=0\&idtypebien\=2,1\&pxMax\=1000000\&idtt\=2,5\&naturebien\=1,2,4\&ci\=910377"
我收到一个错误,因为解析 url 的方式与使用 scrapy crawl 时的方式不同。
日志:
2019-08-08 22:52:34 [scrapy.core.engine] INFO: Spider opened
2019-08-08 22:52:34 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2019-08-08 22:52:34 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2019-08-08 22:52:34 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.example.com/list.htm?tri=initial> (referer: http://www.example.com)
2019-08-08 22:52:34 [scrapy.core.engine] INFO: Closing spider (finished)
2019-08-08 22:52:34 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 267,
'downloader/request_count': 1,
'downloader/request_method_count/GET': 1,
'downloader/response_bytes': 35684,
'downloader/response_count': 1,
'downloader/response_status_count/200': 1,
'elapsed_time_seconds': 0.680357,
经过一些实验,我发现由于某种原因,当通过scrapyd将URL作为蜘蛛参数传递时,它会在遇到&字符时停止解析。
关于如何纠正这种行为的任何见解?
【问题讨论】:
-
你试过没有终端转义吗?
-
我做到了。我得到了相同的结果:只传递了第一个 & 之前的 URL 部分。
标签: python web-scraping scrapy scrapyd