数据提取方法

数据提取方法

json

  • 数据交换格式,看起来像python类型(列表,字典)的字符串
  • 使用json之前需要导入 import json

  • 哪里会返回json的数据

    • 流程器切换到手机版
    • 抓包app
  • json.loads

    • 把json字符串转化为python类型(列表,字典)
    • json.loads(json字符串) 即可
  • json.dumps
    • 把python类型转化为json字符串
    • json.dumps({})
    • json.dumps(ret1,ensure_ascii=False,indent=2)
      • ensure_ascii :让中文正确显示成中文
      • indent :能够让下一行在上一行的基础上正确缩行空格
  • 豆瓣电视爬虫案例

xpath和lxml

  • xpath

    • 一门从html中提取数据的语言
  • xpath语法

    • xpath helper插件:帮助我们从elements中定位数据(爬虫无法爬出elements的内容,因为他往往加上动态js,数据被更改)
      1. 选择节点(标签)
      • /html/head/meta :能够选中html下的head下的所有的meta标签
      1. // :能够从任意节点开始选择
      • //li :当前页面上的所有的li标签
      • /html/head//link :head下的所有的link标签(任何一级)
      1. @符号的用途
      • 选择具体某个元素://div[@class='feed']/ul/li
        • 选择class=’feed’的div下的ul下的li
      • a/@href :选择a的href的值
      1. 获取文本:
      • /a/text() :获取a下的文本
      • /a//text() :获取a下的所有的文本
      1. 点前
      • ./a 当前节点下的a标签
  • lxml

    • 安装:pip install lxml
    • 使用
      1
      2
      3
      from lxml import etree
      element = etree.HTML("html字符串")
      element.xpath("")

基础知识点的学习

  • format:字符串格式化的一种方式

    1
    2
    3
    4
    5
    "传智{}播客".format(1)
    "传智{}播客".format([1,2,3])
    "传智{}播客".format({1,2,3})
    "传智{}播客{}".format({1,2,3},[1,23,2])
    "传智{}播客{}".format({1,2,3},1)
  • 列表推导式

    • 帮助我们快速的生成包含一堆数据的列表
      [i+10 for i in range(10)]—>[10,11,12,…19]
      ["10月{}日".format(i) for i in range(1,10)] –>[“10月1日”,”10月2日”,…”10月9日”]
  • 字典推导式

    • 帮助我们快速的生成包含一堆数据的字典
      1
      2
      {i+10:i for i  in range(10)} #{10:0,11:1,12:2...19:9}
      {"a{}".format(i):10 for i in range(3)}#{"a0":10,"a1":10,"a2":10}
  • 三元运算符

    • if 后面的条件成立,就把if前面的结果赋值给a,否则把else后面的结果赋值给a
      1
      2
      a = 10 if 4>3 else 20 # a = 10
      a = 10 if 4<3 else 20 # a =20

写爬虫的讨论

    1. url
    • 知道url地址的规律和总得页码数:构造url地址的列表
    • start_url
  • 2.发送请求,获取响应

  • requests

  • 3.提取数据

    • 返回json字符串:json模块
    • 返回的是html字符串:lxml模块配合xpath提取数据
  • 4.保存

-------------本文结束 谢谢阅读-------------
-------------若有错误欢迎评论-------------
2块钱请我吃根热狗吧,啾咪.⁄( ⁄•⁄ω⁄•⁄ )⁄.