gpt4 book ai didi

python - 如何从 2 个不同的部分抓取项目?

转载 作者:行者123 更新时间:2023-11-28 19:21:35 25 4
gpt4 key购买 nike

我是 Scrapy 和网络爬虫的新手,我一直在 www.mercadolibre.com.mx 页面上工作,我必须(从起始页)获得一些关于那里显示的产品的数据(描述和价格)。这是我的 items.py:

from scrapy.item import Item, Field

class PruebaMercadolibreItem(Item):
producto = Field()
precio = Field()

这是我的蜘蛛:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from prueba_mercadolibre.items import PruebaMercadolibreItem

class MLSpider(BaseSpider):
name = "mlspider"
allowed_domains = ["mercadolibre.com"]
start_urls = ["http://www.mercadolibre.com.mx"]

def parse (self, response):
hxs = HtmlXPathSelector(response)
titles = hxs.select("//div[@class='item-data']")
items = []
for titles in titles:
item = PruebaMercadolibreItem()
item["producto"] = titles.select("p[@class='tit le']/@title").extract()
item["precio"] = titles.select("span[@class='ch-price']/text()").extract()
items.append(item)
return items

问题是当我更改此行时得到相同的结果:

    titles = hxs.select("//div[@class='item-data']")

对此:

    titles = hxs.select("//div[@class='item-data'] | //div[@class='item-data item-data-mp']")

而且我没有得到与使用第一行时相同的数据。

谁能帮帮我?我的 xPath 选择有什么错误吗?

我也找不到将 MySQL 与 scrapy 一起使用的好教程,如果有任何帮助,我将不胜感激。谢谢

最佳答案

如果你想获得所有包含 item-data 类的 div 标签,最好使用 contains:

titles = hxs.select("//div[contains(@class, 'item-data')]")

此外,您在蜘蛛中还有其他问题:

  • 循环,你正在覆盖 titles
  • producto xpath 中的类名应该是title,而不是tit le
  • 您可能不希望在 Field 值中包含列表,从 extract 中获取第一个项目编辑列表
  • HtmlXPathSelector 已弃用,请使用 Selector相反
  • select() 已弃用,请使用 xpath()相反
  • BaseSpider 已重命名为 Spider

修改后的代码:

from scrapy.spider import Spider
from scrapy.selector import Selector
from scrapy.item import Item, Field
from prueba_mercadolibre.items import PruebaMercadolibreItem


class MLSpider(Spider):
name = "mlspider"
allowed_domains = ["mercadolibre.com"]
start_urls = ["http://www.mercadolibre.com.mx"]

def parse (self, response):
hxs = Selector(response)
titles = hxs.xpath("//div[contains(@class, 'item-data')]")
for title in titles:
item = PruebaMercadolibreItem()
item["producto"] = title.xpath("p[@class='title']/@title").extract()[0]
item["precio"] = title.xpath("span[@class='ch-price']/text()").extract()[0]
yield item

输出中的示例项目:

{'precio': u'$ 35,000', 'producto': u'Cuatrimoto, Utv De 500cc 4x4 ,moto , Motos, Atv ,'}
{'precio': u'$ 695', 'producto': u'Reloj Esp\xeda Camara Oculta Video Hd 16 Gb! Sony Compara.'}

关于python - 如何从 2 个不同的部分抓取项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23862187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com