账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Scrapy中使用xpath()如何多次xpath提取到想要的内容?
    23
    0

    问题描述

    在学习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'
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 情墨 普通会员 1楼
      502 Bad Gateway

      502 Bad Gateway


      nginx
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部