我是Scrapy的新手,正在尝试探索它的一些功能。我希望能够成功地创建一个scraper,它可以抓取页面上的一组链接(比如索引页面),并将整个页面保存为每个对应链接的HTML页面。(逻辑是我可以在以后离线阅读内容,或者在我开始使用Scrapy更高级的功能后创建一个调度程序)
然而,我似乎被困在这个练习上。我有一种感觉,我循环的方式是错误的——无论是for循环、回调还是返回函数。在
我的蜘蛛网.py代码如下:import urlparse
import scrapy
from scrapy.http import Request
class BasicSpider(scrapy.Spider):
name = "basic"
allowed_domains = ["web"]
start_urls = (
'http://books.toscrape.com/',
)
def parse(self, response):
# My Link Extractor
next_selector = response.xpath(
'//*[@class="nav nav-list"]/li/ul/li/a/@href'
)
for url in next_selector.extract():
yield Request(urlparse.urljoin(response.url, url),
callback=self.parse_item)
def parse_item(self, response):
# My Page Saver
filename = response.url.split("/")[-1] + '.html'
with open(filename, 'wb') as f:
f.write(response.body)
return
如果我按照期望的XPath提取特定的项,我可以让链接提取器工作。我想我可以把整件事用XPath>;>;响应.xpath('html').extract()…但似乎有更好的方法?在
我可以让我的页面保护程序将一个链接的页面保存为从Download a full page with scrapy采用的HTML格式。在
然而,当我试图整合两者时,我遇到了一些问题。我尝试过对for循环、回调和return命令进行修改……但是我遗漏了一些东西。在
如有任何帮助,将不胜感激。在
谨致问候