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

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

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    scrapy Rule如何解析json格式的链接?
    43
    0
    rules = {
        'sina':(
            Rule(LinkExtractor(allow='/\d+-\d+-\d+\/.*?-.*?.shtml', deny=('http://search.sina.com.cn/.*?')),
                 callback='parse_item', follow=True),
            )
    }

    如上,目的是从目标页面解析出符合条件的链接
    目标页面示例:https://feed.sina.com.cn/api/roll/get?pageid=121&lid=1356&num=20&versionNumber=1.2.4&page=1&encode=utf-8&callback=feedCardJsonpCallback&_=1545017197742
    试了很多正则的方法,都匹配不出来"urls":"[\"https:\\\/\\\/news.sina.com.cn\\\/o\\\/2018-12-18\\\/doc-ihqhqcir7816653.shtml\"]"这里面的链接,正则表达式测试过没问题,但是在scrapy 的Rule里就不行

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 你不懂 普通会员 1楼

      在Scrapy中,你可以使用parse_request函数来解析JSON格式的链接。parse_request函数会尝试将请求体解析为一个字典,如果解析成功,那么这个字典就是你需要的链接。

      以下是一个简单的例子:

      ```python import scrapy

      class MySpider(scrapy.Spider): name = 'myspider' start_urls = ['http://example.com']

      def parse_request(self, response):
          if response.url.startswith('http://example.com'):
              yield response.url
      

      ```

      在这个例子中,parse_request函数会尝试解析response.url字段的链接,如果解析成功,那么这个链接就是你需要的。

      如果你的链接格式是JSON格式,你可以使用json.loads函数来解析。例如:

      ```python import scrapy

      class MySpider(scrapy.Spider): name = 'myspider' start_urls = ['http://example.com']

      def parse_request(self, response):
          if response.url.startswith('http://example.com'):
              yield response.url
              json_data = response.json()
              if json_data:
                  yield json.loads(json_data)
      

      ```

      在这个例子中,parse_request函数会尝试解析response.url字段的链接,并且将解析结果转换为一个JSON对象,然后将这个JSON对象转换为一个字符串。

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