我对 Scrapy 教程有疑问。无论我从别人的问题中输入什么解决方案关于我在网络上找到的关于 Scrapy 只爬取一个页面(包括所有在 SO 上的页面),它都只爬取一个页面。我对 Python 有足够的经验,我几乎完全确定这不是缩进问题。这是我当前的代码,对教程进行了一些修改以反射(reflect)我发现的其他人的解决方案。请注意,我也尝试过 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)
请您参考如下方法:
这是 CrawlSpider 的一个常见陷阱:您不应该覆盖内置的 parse() 方法(所有 CrawlSpider 魔术都发生在该方法中) ,除非你知道自己在做什么。
The warning is in the docs但很多用户都错过了。
将您的 parse() 方法重命名为 parse_item()(如您在规则中声明的那样)。
根据您的需要,您可能希望将 follow=True 添加到您的规则中,以便在抓取的页面中找到的链接(在起始 URL 之后)也被抓取。
