0
看起来,LinkExtractor无法从函数内的ajax请求(see here)加载/生成的数据中提取链接!我可以手动添加链接到LinkExtractor吗?
那么,有没有办法在函数中添加提取链接,然后将它们手动添加到LinkExtractor,或强制LinkExtractor抓取它们?
看起来,LinkExtractor无法从函数内的ajax请求(see here)加载/生成的数据中提取链接!我可以手动添加链接到LinkExtractor吗?
那么,有没有办法在函数中添加提取链接,然后将它们手动添加到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'。 – XO39
对,''parse'是CrawlSpider的保留名。我最初使用scrapy.Spider写了这个例子,只是忘了改变它。现在查看我的编辑。关于linkextractor,这里有什么问题?你创建一个链接提取器并将其添加到你的规则中,稍后使用它来提取parse_ajax()中的一些链接 - 它是相同的链接提取器。 – Granitosaurus
不,不,请[see here](http://stackoverflow.com/q/38777236/587990)了解我的问题是什么。我会给你的代码一枪。 – XO39