簡體   English   中英

Scrapy - 發送新請求/使用回調

[英]Scrapy - Sending a new Request/using callback

深入研究比使用基本刮削功能更深入。

我理解基本的BaseSpider類:name,allowed_domains,以及如何為每個start_url發送Request對象,其中parse函數用作回調函數,parse接收Response。

我知道我的parse函數為每個名為“service-name”的類的數據保存了一個XPath響應,我相信它會通過循環遍歷存儲每個XPath響應匹配的數據到對象“item”然后發送到“TgmItem”來繼續。我的items.py容器中的類。

'newUrl'包含下一個需要刪除的連接URL,我需要弄清楚如何讓LinkParse函數來抓取每個找到的newUrl,或者接收所有鏈接以便單獨搜索。

我知道meta用於解析我的對象項數據,而回調為Request提供了一個發送響應的函數。

LinkParse將用於從所有鏈接中抓取更多數據,例如:“item ['test'] = link.xpath('test()')。extract())”

def parse(self, response):
    links = response.selector.xpath('//*[contains(@class, "service-name")]')
    for link in links:
        item = TgmItem()
        item['name'] = link.xpath('text()').extract()
        item['link'] = link.xpath('@href').extract()
        item['newUrl'] = response.url.join(item['link'])
        yield Request(newUrl, meta={'item':item}, callback=self.LinkParse)

def LinkParse(self, response):
    links = response.selector.xpath('*')
    for link in links:
        item = response.request.meta['item']
        item['test'] = link.xpath('text()').extract()
        yield item

我知道在回調函數中你解析一個響應(網頁)我需要全部或每個鏈接(但我想解決這個問題,我必須發送當前的response.url並處理每個/所有鏈接在ParseLink函數中。

我收到一個錯誤,說newUrl沒有定義,猜測請求不能接受。

我不期待任何幫助,如果有人能指出我正確的方向,或進一步研究的東西?

newUrl變量未定義。 而是使用item['newUrl']

yield Request(item['newUrl'], meta={'item': item}, callback=self.LinkParse)

另外, response.url.join()調用對我沒有意義。 如果要將response.urlhref屬性值組合使用,請使用urljoin()

item['newUrl'] = urlparse.urljoin(response.url, item['link'])

此外,我不確定你在LinkParse回調中想要做什么。 據我所知,您希望關注“服務名稱”鏈接並獲取每個鏈接的其他數據。 然后,我不明白為什么你需要LinkParse()方法for link in links循環中的for link in links

據我所知,你的LinkParse()方法應如下所示:

def LinkParse(self, response):
    newfield = response.selector.xpath('//myfield/text()').extract()
    item = response.meta['item']
    item['newfield'] = newfield  
    return item

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM