亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

scrapy(python)中的無效xpath

scrapy(python)中的無效xpath

慕工程0101907 2023-05-23 10:27:42
你好我正在嘗試使用 scrapy 構建一個爬蟲我的爬蟲代碼是:import scrapyfrom shop.items import ShopItemclass ShopspiderSpider(scrapy.Spider):    name = 'shopspider'    allowed_domains = ['www.organics.com']    start_urls = ['https://www.organics.com/product-tag/special-offers/']    def parse(self, response):      items = ShopItem()      title = response.xpath('//*[@id="content"]/div[2]/div[1]/ul/li[1]/a/h3').extract()      sale_price = response.xpath('//*[@id="content"]/div[2]/div[1]/ul/li[1]/a/span[2]/del/span').extract()      product_original_price = response.xpath('//*[@id="content"]/div[2]/div[1]/ul/li[1]/a/span[2]/ins/span').extract()      category = response.xpath('//*[@id="content"]/div[2]/div[1]/ul/li[1]/a/span[2]/ins/span').extract()      items['product_name'] = ''.join(title).strip()      items['product_sale_price'] = ''.join(sale_price).strip()      items['product_original_price'] = ''.join(product_original_price).strip()      items['product_category'] = ','.join(map(lambda x: x.strip(), category)).strip()      yield items但是當我運行命令: scrapy crawl shopspider -o info.csv以查看輸出時,我只能找到有關第一個產品的信息,而不是此頁面中的所有產品。所以我刪除了 xpath 中 [ ] 之間的數字,例如標題的 xpath ://*[@id="content"]/div/div/ul/li/a/h3 但仍然得到相同的結果。結果是:<span class="amount">?£40.00</span>,<h3>Halo Skincare Organic Gift Set</h3>,"<span class=""amount"">?£40.00</span>","<span class=""amount"">?£58.00</span>"請幫忙
查看完整描述

1 回答

?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

如果您刪除 XPath 上的索引,它們將找到頁面中的所有項目:


response.xpath('//*[@id="content"]/div/div/ul/li/a/h3').extract() # Returns 7 items

但是,您應該注意到這將返回所選 html 元素的字符串列表。如果您想要元素內的文本,您應該添加/text()XPath。(這看起來像你做的)


另外,你只得到一個回報的原因是因為你在將所有項目分配給時將它們連接成一個字符串item:


items['product_name'] = ''.join(title).strip()

這title是一個元素列表,您將它們全部連接在一個字符串中。相同的邏輯適用于其他變量


如果那真的是您想要的,您可以忽略以下內容,但我相信更好的方法是分別執行 for 循環和yield它們?


我的建議是:


def parse(self, response):

  products = response.xpath('//*[@id="content"]/div/div/ul/li')

  for product in products:

      items = ShopItem()

      items['product_name'] = product.xpath('a/h3/text()').get()

      items['product_sale_price'] = product.xpath('a/span/del/span/text()').get()

      items['product_original_price'] = product.xpath('a/span/ins/span/text()').get()

      items['product_category'] = product.xpath('a/span/ins/span/text()').get()


      yield items

請注意,在您的原始代碼中,您的categoryvar 與您的 具有相同的 XPath product_original_price,我將邏輯保留在代碼中,但這可能是一個錯誤。


查看完整回答
反對 回復 2023-05-23
  • 1 回答
  • 0 關注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號