• 爬虫,用scrapy的xpath来解析链家


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 m0_62943458 2024-04-15 03:14 采纳率: 0% 浏览 3 首页/ 编程语言 / 爬虫,用scrapy的xpath来解析链家 python 解析不出来链家响应的好像是json数据,xpath解析不了吗?各位帅比们解答一哈!好人十八胎 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    4条回答 默认 最新

    • 码农阿豪 Java领域优质创作者 2024-04-15 08:37
      关注
      让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
      问题描述: 如何解析链家响应的json数据? 解答: 可以使用Python内置的json库来解析json数据。 例如,对于下面的json数据进行解析:
      {
        "code": 0,
        "errorMessage": null,
        "data": {
          "total": 1000,
          "houses": [
            {
              "id": "123456",
              "name": "链家精装公寓",
              "price": "2500",
              "location": {
                "city": "北京",
                "district": "海淀区",
                "detail": "学院路"
              }
            }
          ]
        }
      }
      

      可以使用以下代码解析:

      import json
      data = '{"code": 0, "errorMessage": null, "data": {"total": 1000, "houses": [{"id": "123456", "name": "链家精装公寓", "price": "2500", "location": {"city": "北京", "district": "海淀区", "detail": "学院路"}}]}}'
      # 解析json数据
      result = json.loads(data)
      # 获取房屋信息列表
      houses = result['data']['houses']
      # 遍历房屋信息
      for house in houses:
          print(house['name'], house['price'], house['location']['city'], house['location']['detail'])
      

      输出结果为:

      链家精装公寓 2500 北京 学院路
      

      除了Python内置的json库外,还可以使用第三方库比如demjson来解析json数据。 对于无法使用xpath解析的数据,我们可以尝试使用其他的解析方法,比如正则表达式、Beautiful Soup等。

      展开全部

      评论
    • GISer Liu 2024-04-15 08:39
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      首先,针对你提到的链家响应数据的问题,链家网站的数据通常是通过 API 返回的 JSON 格式数据,而不是通过 HTML 页面返回的。这就导致无法通过
      XPath 直接解析。
      解决这个问题的思路是使用 Scrapy 的能力发送 HTTP 请求获取 JSON 格式的数据,并且使用 Python 的 JSON
      解析库对返回的数据进行解析。
      以下是具体的解决方案:

      解决思路:

      1. 使用 Scrapy 发送 HTTP 请求获取链家网站的 JSON 数据。
      2. 使用 Python 的 JSON 解析库解析返回的 JSON 数据。
      3. 根据解析后的数据提取所需信息。

        解决方案:

        首先,你需要创建一个 Scrapy 项目,如果还没有的话。接着,在你的 Scrapy 项目中,你需要定义一个 Spider 来发送请求并解析返回的 JSON
        数据。
      4. 创建 Scrapy 项目:
        bashCopy code
        scrapy startproject lianjia_spider
        
      5. 在 Spider 中发送请求并解析 JSON 数据:
        pythonCopy code
        # -*- coding: utf-8 -*-
        import scrapy
        import json
        class LianjiaSpider(scrapy.Spider):
        name = 'lianjia'
        allowed_domains = ['lianjia.com']
        def start_requests(self):
        url = 'https://example.com/api/xxx'  # 替换成链家网站的实际 API 地址
        yield scrapy.Request(url, callback=self.parse)
        def parse(self, response):
        data = json.loads(response.body)
        # 这里根据实际返回的 JSON 数据结构,编写解析代码
        # 例如:
        # house_list = data['data']['house_list']
        # for house in house_list:
        #     title = house['title']
        #     price = house['price']
        #     yield {'title': title, 'price': price}
        
        在上面的代码中,你需要将 start_requests 方法中的 URL 替换成链家网站的实际 API 地址,然后在 parse 方法中编写解析 JSON 数据的代码。
      6. 运行 Spider:
        bashCopy code
        scrapy crawl lianjia -o output.json
        
        这将会运行名为 lianjia 的 Spider,并将解析后的数据输出到 output.json 文件中。
        通过这样的方式,你就可以获取到链家网站返回的 JSON 数据并进行解析了。

      如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

      展开全部

      评论
    • CSDN-Ada助手 CSDN-AI 官方账号 2024-04-15 10:03
      关注

      【相关推荐】



      • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/682326
      • 这篇博客也不错, 你可以看下爬取段子网并用xpath方法进行解析/json格式进行数据存储
      • 除此之外, 这篇博客: scrapy爬虫框架实现简单案例:爬取阳光平台内容中的 其次,观察所需爬取平台的特征(即观察是否适合用xpath方式/json方式) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

        个人一开始比较倾向于xpath方式爬取,毕竟这个方式对我来说比较亲和,于是便开始对比element和network的内容是否能够一一对应。
        Alt
        在这里插入图片描述
        对比以上两个图,发现两栏的内容相似度较高,都有table,并且对应的tr/td内容比较规则,故初步判定可使用xpath方式
        在这里插入图片描述
        但是,在用xpath方式时要格外注意这个tbody字符串,它在element处存在,但在network中却不存在(如下图)在这里插入图片描述
        这一点在编写程序时要格外注意


      如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
      评论
    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-16 14:16
      关注

      下午好🌅🌅🌅
      本答案参考ChatGPT-3.5

      链家响应的数据格式是json,不能直接使用xpath来解析。需要对返回的json数据进行解析。

      解决方案如下:

      1. 在parse方法中获取响应的json数据,可以使用response.json()方法将响应转化为字典类型。

      2. 从字典中解析出需要的数据,比如名称、地区、价格等。可以使用字典的get方法来获取数据,该方法可以避免因为获取空值导致程序出错的问题。

      3. 将解析出的数据保存到items中,方便后续进行数据存储。

      修改后的代码如下:

      import scrapy
      from lianjia.items import LianjiaItem
      
      class LianjiaSpider(scrapy.Spider):
          name = "lianjia"
          allowed_domains = ["lianjia.com"]
          start_urls = ["https://cq.fang.lianjia.com/loupan/pg2/?_t=1"]
      
          def parse(self, response):
              # 获取json数据
              json_data = response.json()
      
              # 获取楼盘列表
              house_list = json_data.get("data", {}).get("list", [])
      
              # 解析楼盘数据
              for house in house_list:
                  name = house.get("resblock_name")
                  district = house.get("district_name")
                  county = house.get("bizcircle_name")
                  price = house.get("price_desc")
      
                  # 构造item并保存
                  item = LianjiaItem(name=name, district=district, county=county, price=price)
                  yield item
      

      需要注意的是,在使用该代码时,需要先建立对应的items.py文件和item类。

      展开全部

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    Python实现向量、矩阵运算(dot点积运算)
    sublime merge 自定义命令
    如何对element弹窗进行二次封装
    智慧工地安全管理大屏UX/UI设计的触控感——从交互体验角度的产品思考
    JAVA单位职工房产管理计算机毕业设计Mybatis+系统+数据库+调试部署
    一文教你从Linux内核角度探秘JDK NIO文件读写本质(上)
    对This 的指向的理解?
    LLAMA 3的测试之旅:在GPT-4的阴影下前行
    Flask-flask中的后台分页查询实现
    Linux中top 实时监控系统进程状态
  • 原文地址:https://ask.csdn.net/questions/8088609