第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我在這里做錯了什么?parse_item_page 對我不起作用

我在這里做錯了什么?parse_item_page 對我不起作用

元芳怎么了 2023-03-08 10:10:25
import scrapyfrom ..items import dealItemclass FarmtoolsSpider(scrapy.Spider):    name = 'farmtools'    allowed_domains = ['www.deal.ie']    start_urls = ['https://www.deal.ie/all?source=private&sort=publishdate%20desc']    def parse(self, response):        items = dealItem()        rows = response.xpath('//ul[@class="card-collection"]/li')        for row in rows:            link = row.xpath('.//a/@href').get() #this is the full link.            link_split = link.split('/')[-1] #this splits the url link th first time.            linkid = link_split.split('?')[0] #this splits it the second time.            title = row.xpath('.//div[1]/p[@class="card__body-title"]/text()').get()            county = row.xpath('.//a/div/div[2]/div[1]/ul[@class="card__body-keyinfo"]/li[contains(text(),"min")]/following-sibling::node()/text()').get()            price = row.xpath('.//p[@class="card__price"]/span[1]/text()').get()            subcat = row.xpath('.//a/div/div[2]/div[1]/p[2]/text()[2]').get()            zero = row.xpath('.//a/div/div[2]/div[1]/ul[@class="card__body-keyinfo"]/li[contains(text(),"min")]/text()').get()            if zero == '0 min':                items['linkid'] = linkid                items['title'] = title                items['county'] =  county                items['price'] = price                items['subcat'] = subcat                items['zero'] = zero            }第一個解析方法運行良好,但我不確定我是否正確編寫了第二個解析方法。第一個解析方法的一部分會抓取我想要跟蹤的特定鏈接,這樣我就可以從中抓取額外的數(shù)據(jù)。我想要實現(xiàn)的是抓取我從第一個解析方法獲得的鏈接并從中獲取其他項目值,然后將它們?nèi)刻砑訛轫椖?。我也添加了items = DonedealItem()兩者,但我不確定這是正確的。當(dāng)我現(xiàn)在運行它時,我得到:文件“/home/william/.local/lib/python3.7/site-packages/twisted/internet/defer.py”,第 654 行,在 _runCallbacks current.result = callback(current. result, *args, **kw) TypeError: parse_item_page() got an unexpected keyword argument 'donedeal.ie/cars-for-sale/e39-520i-for-breaking-also-have-lsd/…' 。對于每個被抓取的鏈接,我都會得到其中一個。我想要做的是向我從第一個解析方法中抓取的信息添加更多信息,如“賣家 ID”、“視圖”等。希望這可以幫助
查看完整描述

1 回答

?
有只小跳蛙

TA貢獻(xiàn)1824條經(jīng)驗 獲得超8個贊

我可以發(fā)現(xiàn)您的代碼存在一些問題,包括您在評論中提到的錯誤原因,但問題仍然存在,因為我不完全理解您想要抓取的數(shù)據(jù)結(jié)構(gòu)。


在您的parse方法中,您實例化了varDonedealItem()中的一個對象items。然后您嘗試將其作為回調(diào)參數(shù) (cb_kwargs) 發(fā)送給回調(diào)函數(shù) ( parse_item_page)。


      ...

      yield response.follow(url=link,

          callback=self.parse_item_page,

          cb_kwargs={link: items})


 def parse_item_page(self, response, link):

     ...

這里的問題是,這link是一個具有不可預(yù)測值的變量(因為您將其設(shè)置為 url),它需要是一個與您在回調(diào)函數(shù)中定義的值相同的字符串。所以這應(yīng)該可以解決錯誤:


        yield response.follow(url=link,

            callback=self.parse_item_page,

            cb_kwargs={'link': items})

但是,您的parse_item_page方法沒有l(wèi)ink任何用途。相反,它實例化一個新的DonedealItem(),用解析到這個方法中的數(shù)據(jù)填充它,然后產(chǎn)生它。作為參數(shù)接收的數(shù)據(jù)link未被使用。如果你想增加你第一個方法發(fā)送給你的數(shù)據(jù)parse,你需要使用它:


  def parse_item_page(self, response, link):

      items = link # Your link param already receives an DonedealItem instance.

這是一個提示:不需要這些花括號:


 yield{

     items

     }

改用yield items_


仍然存在的問題:


你可以把你想象DonedealItem成一個字典,你的代碼正在做的是首先實例化項目,然后運行一個 for 循環(huán),并在這個循環(huán)的每次迭代中覆蓋你的項目中的數(shù)據(jù)。我相信你應(yīng)該在 for 循環(huán)中實例化你的項目,但我不能確定,因為我不知道預(yù)期的結(jié)果是什么,也不知道是如何DonedealItem定義的。即便如此,這仍然會導(dǎo)致第二種解析方法出現(xiàn)問題,因為它接收到一個項目并再次迭代。也許你需要使用列表。


查看完整回答
反對 回復(fù) 2023-03-08
  • 1 回答
  • 0 關(guān)注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號