Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 尝试使用scrapy从深层节点提取,结果不好_Python 2.7_Xpath_Scrapy - Fatal编程技术网

Python 2.7 尝试使用scrapy从深层节点提取,结果不好

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"]

作为一个初学者,我的日子不好过,所以我来这里寻求帮助。 我试图从html页面中提取价格,该页面嵌套得很深:

第二价格位置:

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;”]