2个不同部分的废品如何?

时间:2014-05-26 03:12:42

标签: python mysql xpath web-scraping scrapy

我是新的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选择中有任何错误吗?

此外,我无法找到一个使用scrapy的MySQL的好教程,我将不胜感激任何帮助。 THX

1 个答案:

答案 0 :(得分:0)

如果您想要获取包含contains类的所有div代码,请更好地使用item-data

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

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

  • 循环,您将覆盖titles
  • {li> producto xpath中的类名称应为title,而不是tit le
  • 您可能不希望列出Field个值,从extract ed列表中获取第一个项目
  • HtmlXPathSelector已弃用,请改用<{3}}
  • select()已弃用,请改用<{3}}
  • BaseSpider已重命名为Selector

以下是修改后的代码:

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.'}