我是一个新的垃圾和网络爬行,我一直在网页www.mercadolibre.com.mx上工作,我必须(从startpage)得到一些数据(描述和价格)关于产品显示在那里。这是我的物品.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与刮,我会感谢任何帮助。谢谢

最佳答案

如果要获取包含类的所有标记,最好使用contains

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

另外,蜘蛛还有其他问题:
循环,您将覆盖div
xpath中的类名应该是item-data,而不是titles
您可能不想在producto值中包含列表,从titleed列表中获取第一个项
tit le已弃用,请改用Field
extract已弃用,请改用HtmlXPathSelector
Selector已重命名为select()
下面是修改后的代码:
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/

10-10 05:22