【发布时间】:2016-08-05 17:14:32
【问题描述】:
LinkExtractor 似乎无法从函数内的 ajax 请求加载/生成的数据中提取链接 (see here)!
那么,有没有办法在函数中添加提取链接,然后手动添加到LinkExtractor,或者强制LinkExtractor抓取呢?
【问题讨论】:
LinkExtractor 似乎无法从函数内的 ajax 请求加载/生成的数据中提取链接 (see here)!
那么,有没有办法在函数中添加提取链接,然后手动添加到LinkExtractor,或者强制LinkExtractor抓取呢?
【问题讨论】:
我不确定我在这里是否理解正确,但您似乎将LinkExtractor 与CrawlSpider.rules 混淆了。 LinkExtractor 只是一个从响应中提取链接的对象,其中 rules 属性描述了CrawlSpider 的爬取规则。
如果您想在自己手动提取一些链接的同时使用 CrawlSpider,您可以这样做:
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider
class MySpider(CrawlSpider):
name = 'myspider'
le = LinkExtractor()
rules = [Rule(le, callback='parse_page')...]
def parse_page(self, response):
items = #parse items
for item in items:
yield item
ajax_url = #find ajax url for next page or something
if ajax_url:
yield Request(ajax_url, self.parse_ajax)
def parse_ajax(self, response):
links = self.le.extract_links(response)
for link in links:
yield Request(link.url, self.parse_page)
【讨论】:
parse函数不能和CrawlSpider一起使用吗?我指的是CrawlSpider.rules中使用的LinkExtractor。
parse 是 CrawlSpider 的保留名称。我最初使用 scrapy.Spider 编写示例,只是忘记更改它。现在看我的编辑。关于链接提取器,这里有什么问题?您创建一个链接提取器并将其添加到您的规则中,稍后使用它来提取 parse_ajax() 中的一些链接 - 它是相同的链接提取器。