Scrapy教程只爬取一页 - 已尝试当前SO回答中的所有方法
我在学习Scrapy教程的时候遇到了问题。无论我在网上找到的关于Scrapy只爬取一页的解决方案(包括StackOverflow上的所有相关内容)是什么,我的程序就是只爬取一页。我对Python有一定的经验,几乎可以肯定这不是缩进的问题。以下是我当前的代码,稍微修改过,以反映我找到的其他解决方案。值得注意的是,我也试过parse_item,但也没有成功。
基本上,对于我的爬虫来说,我需要从一个.html页面开始,所以我这样做了,目的是为了自己的学习。请问这是问题所在吗?是不是只需要一个目录就可以了?
import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
class DmozSpider(CrawlSpider):
name = "dmoz"
allowed_domains = ["mollydesjardin.com"]
start_urls = [
"http://www.mollydesjardin.com/"
]
rules = [Rule(SgmlLinkExtractor(allow=()), callback='parse_item')]
def parse(self, response):
filename = response.url.split("/")[-2]
with open(filename, 'wb') as f:
f.write(response.body)
1 个回答
8
对于 CrawlSpider
来说,有一个常见的误区就是:你不应该覆盖内置的 parse()
方法(这个方法是 CrawlSpider
的核心功能所在),除非你非常清楚自己在做什么。
这个警告在文档里有提到,但很多用户都没注意到。
你可以把自己的 parse()
方法改名为 parse_item()
(就像你在规则里声明的那样)。
根据你的需求,你可能还想在规则里加上 follow=True
,这样在抓取到的页面中找到的链接(在起始网址之后)也会被继续抓取。