数据提取方法
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,数据被更改) - 选择节点(标签)
/html/head/meta
:能够选中html下的head下的所有的meta标签
//
:能够从任意节点开始选择
//li
:当前页面上的所有的li标签/html/head//link
:head下的所有的link标签(任何一级)
@符号的用途
- 选择具体某个元素:
//div[@class='feed']/ul/li
- 选择class=’feed’的div下的ul下的li
a/@href
:选择a的href的值
- 获取文本:
/a/text()
:获取a下的文本/a//text()
:获取a下的所有的文本
- 点前
./a
当前节点下的a标签
- xpath helper插件:帮助我们从
lxml
- 安装:pip install lxml
- 使用
1
2
3from 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
2a = 10 if 4>3 else 20 # a = 10
a = 10 if 4<3 else 20 # a =20
- if 后面的条件成立,就把if前面的结果赋值给a,否则把else后面的结果赋值给a
写爬虫的讨论
- url
- 知道url地址的规律和总得页码数:构造url地址的列表
- start_url
2.发送请求,获取响应
requests
3.提取数据
- 返回json字符串:json模块
- 返回的是html字符串:lxml模块配合xpath提取数据
4.保存