Scrapy中使用xpath()如何多次xpath提取到想要的内容?

问题描述

在学习Scrapy过程中,使用xpath来提取想要的内容,首先提取出来ul标签中的li标签得到装有所有li标签的list,遍历list内容,再xpath提取每个li标签中的想要的信息,不过运行爬虫后,提示,li是个str类型,没有xpath方法

问题出现的环境背景及自己尝试过哪些方法

我在想是否应该将便利后的每个li标签都转成xml文本?不过没找到方法

相关代码

class LianJiaSpider(Spider):
    name = "second"
    allowed_domains = ["lianjia.com"]
    start_urls = ["https://zz.lianjia.com/ershoufang/"]

    def parse(self, response):
        one_page_infos = response.xpath('//ul[@class="sellListContent"]/li').extract()
        for li in one_page_infos:
            item = SecondhousespiderItem()

            item["title"] = li.xpath('.//div[@class="title"]/a/text()')
            item["total_price"] = li.xpath('.//div[@class="totalPrice"]/span/text()') + "万"
            item["unit_price"] = li.xpath('.//div[@class="unitPrice"]/span/text()')
            item["house_info"] = li.xpath('.//div[@class="houseInfo"]/text()')
            item["house_position"] = li.xpath('.//div[@class="positionInfo"]/a/text()') \
                                     + li.xpath('//div[@class="houseInfo"]/a/text()')
            item["house_url"] = li.xpath('.//div[@class="title"]/a/@href')
            yield item

        num = response.xpath('//div[@class="page-box house-lst-page-box"]/a[last()-1]/text()')
        for i in range(2, int(num) + 1):
            next_page = "https:zz.lianjia.com/ershoufang/pg%s" % str(i)
            yield Request(next_page, self.parse)

你期待的结果是什么?实际看到的错误信息又是什么?

这是错误结果:

 item["title"] = li.xpath('.//div[@class="title"]/a/text()')
AttributeError: 'str' object has no attribute 'xpath'
阅读 5.2k
1 个回答

.// 改为./

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进