我想使用scrapy来抓取网页 . 有没有办法从终端本身传递起始URL?
在documentation中给出了蜘蛛的名称或URL可以给出,但是当我给出url它会抛出一个错误:
//我的蜘蛛的名字就是例子,但是我给的是url而不是我的蜘蛛名字(如果我给蜘蛛名字,它可以正常工作) .
scrapy crawl example.com
错误:
文件“/usr/local/lib/python2.7/dist-packages/Scrapy-0.14.1-py2.7.egg/scrapy/spidermanager.py”,第43行,在create raise KeyError(“未找到蜘蛛: %s“%spider_name”KeyError:'未找到蜘蛛:example.com'
如何让scrapy在终端上给出的url上使用我的蜘蛛?
6 回答
我不太确定命令行选项 . 但是,你可以像这样写你的蜘蛛 .
并启动它:
scrapy crawl my_spider -a start_url="http://some_url"
允许多个url参数比让Peter建议的更简单的方法是将它们作为一个字符串,用逗号分隔的URL,如下所示:
在蜘蛛中你会简单地将字符串拆分为','并得到一个网址数组:
使用scrapy parse命令 . 你可以用你的蜘蛛解析一个网址 . url从命令传递 .
http://doc.scrapy.org/en/latest/topics/commands.html#parse
这是此线程中the approach given by Sjaak Trekhaak的扩展 . 到目前为止,这种方法只有在您提供一个网址时才有效 . 例如,如果您想提供多个这样的网址,例如:
然后Scrapy(我使用当前稳定版本0.14.4)将终止,但有以下异常:
但是,您可以通过为每个起始URL选择不同的变量以及包含传递的URL数量的参数来规避此问题 . 像这样的东西:
然后,您可以在蜘蛛中执行以下操作:
这是一个有点丑陋的黑客,但它的工作原理 . 当然,明确记下每个url的所有命令行参数是很繁琐的 . 因此,将
scrapy crawl
命令包装在Python subprocess中并在循环或其他内容中生成命令行参数是有意义的 .希望能帮助到你 . :)
Sjaak Trekhaak有正确的想法,这里是如何允许倍数:
你也可以试试这个:
它将在请求的URL的浏览器中打开一个窗口 .