Python 2.7 尝试使用scrapy从深层节点提取,结果不好
作为一个初学者,我的日子不好过,所以我来这里寻求帮助。 我试图从html页面中提取价格,该页面嵌套得很深: 第二价格位置:Python 2.7 尝试使用scrapy从深层节点提取,结果不好,python-2.7,xpath,scrapy,Python 2.7,Xpath,Scrapy,作为一个初学者,我的日子不好过,所以我来这里寻求帮助。 我试图从html页面中提取价格,该页面嵌套得很深: 第二价格位置: from scrapy.spider import Spider from scrapy.selector import Selector from mymarket.items import MymarketItem class MySpider(Spider): name = "mymarket" allowed_domains = ["url"]
from scrapy.spider import Spider
from scrapy.selector import Selector
from mymarket.items import MymarketItem
class MySpider(Spider):
name = "mymarket"
allowed_domains = ["url"]
start_urls = [
"http://url"
]
def parse(self, response):
sel = Selector(response)
titles = sel.xpath('//table[@class="tab_product_list"]//tr')
items = []
for t in titles:
item = MymarketItem()
item["price"] = t.xpath('//tr//span[2]/text()').extract()
items.append(item)
return items
我正试图将削价输出到csv。它们确实可以导出,但填充方式如下:
我希望它们在.csv中按如下方式排序:
等等
有人能指出xpath的错误部分在哪里,或者我如何“正确”地对价格进行排序吗?
.extract()
返回一个列表,即使只找到一个参数,取列表的第一个元素.extract()[0]
很难说路径有什么问题。为Firefox安装firepath
扩展,以测试您的xpath
查询。现在需要注意的是:
titles = sel.xpath('//table[@class="tab_product_list"]//tr')
在屏幕截图中,您有嵌套的表,因此//tr
也将从嵌套的表中给出tr
s
def parse(self, response):
sel = Selector(response)
titles = sel.xpath('//table[@class="tab_product_list"]/tr') # or with tbody
items = []
for t in titles:
item = MymarketItem()
item["price"] = t.xpath('.//span[@style="color:red;"]/text()').extract()[0]
items.append(item)
return items
谢谢你的提示。问题是,
.extract()[0]
只返回填充了宠物行的第一个价格项目的结果,并且不添加其他价格。感谢您的提示。现在我在将价格输出到csv时遇到问题。所有价格都放在一个单元格中,在.extract()
之后添加[0]
后,它只打印以单元格分隔的第一个价格。如果您可以编辑问题以包括完整的蜘蛛代码、CSV的当前输出和所需的输出,那么这将有助于人们提供更集中的答案。:)@Talvalin,请查看更新的问题,谢谢。您是否知道item[“price”]=t.xpath('//tr//span[2]/text()')。extract()
将搜索整个页面,而不仅仅是在标题内?您应该使用。//tr//span[2]/text()”
嗯,我在脚本中使用的当前xpath只搜索价格。奇怪的是,它在一个单元格中输出价格。请参阅更新的问题。正如我在问题中指出的那样,我就是不知道如何将它们按行排序。仅仅看这张图片就很难弄清楚。有一个网页进行测试将是非常困难的better@warwaruk就是这样:我会挂在style=“color:red;”“
://table[@class=“tab\u product\u list”]///span[@style=“color:red;”]