我正在尝试使用scrapy爬行整个网站。根据scarpy的文档
start_urls-当未指定特定URL时,爬虫将开始从其爬网的URL列表。因此,下载的第一页将是此处列出的页面。随后的URL将根据起始URL中包含的数据连续生成。
因此,根据此定义,scrapy应该在下面提到的页面上的所有子URL上进行start_urls
爬网,但它仅对我指定的URL进行爬网。我确实指定了Scrapy-抓取整个网站下提到的规则,但没有帮助。它只会抓取并输出我在start_urls中指定的页面。
这是我的代码片段:
class AcdivocaFirstSpider(scrapy.Spider):
name = "example_sample"
allowed_domains = ["example.org"]
start_urls = ["http://www.example.org/site/id/home"]
rules = rules = [Rule(SgmlLinkExtractor(), callback='parse_item', follow=True)]
def parse(self, response):
filename = response.url.split("/")[-1] #so eg it would name 'home'
open(filename, 'wb').write(response.body)
这将产生一个带有提取的“首页”页面HTML数据的文件。我如何从首页开始递归检索整个网站?
任何帮助表示赞赏。谢谢你。
2件事要改变:
AcdivocaFirstSpider
的子类scrapy.contrib.spiders.CrawlSpider
,而不是scrapy.Spider
随后的URL将根据起始URL中包含的数据连续生成。
这个短语是令人误解的。scrapy.Spider
本身对这些起始URL并没有做任何特别的事情:它将下载它们并将响应的正文传递给parse()
。如果parse()
实现了回调以产生进一步的请求,则可以,随后的URL将从这些URL的数据生成,但这不是自动的/自动的。
scrapy.contrib.spiders.CrawlSpider
,你需要不重写内置的parse()
方法,即其中的规则进行检查的,并请求页面生成。因此,您需要重命名parse
为parse_item
(按规则引用)本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句