我是新的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
答案 0 :(得分:0)
如果您想要获取包含contains
类的所有div
代码,请更好地使用item-data
:
titles = hxs.select("//div[contains(@class, 'item-data')]")
此外,你在蜘蛛中还有其他问题:
titles
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.'}