作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 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/
我是一名优秀的程序员,十分优秀!