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