【发布时间】:2017-09-14 05:12:40
【问题描述】:
我是 Scrapy 的新手,正在尝试探索它的一些功能。我希望能够成功创建一个抓取器,它可以抓取页面上的一组链接——比如一个索引页面——并将整个页面保存为每个相应链接的 HTML 页面。 (逻辑是我可以稍后离线阅读内容,或者在我毕业使用 Scrapy 更高级的功能后创建一个调度程序)
但是,我似乎被困在了这个练习上。我有一种感觉,这是我循环的错误方式——无论是 for 循环、回调还是返回函数。
我的 Spider.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 提取特定项目,我可以让 #My Link Extractor 工作。我想我可以 XPath 整个事情 >>>response.xpath('html').extract()...但似乎有更好的方法?
我可以使用#My Page Saver 将单个链接的页面保存为从Download a full page with scrapy 采用的 HTML。
但是,当我尝试将两者整合时遇到了问题。我尝试过修改 for 循环、回调和返回命令……但我遗漏了一些东西。
任何帮助将不胜感激。
问候,
【问题讨论】:
标签: python python-2.7 scrapy