经法数据提取--项目数据自动化提取

学习目标

数据提取的基础概念和数据分类
json模块的复习
正则表达式的复习
认识xml
xpath的学习
LXML类库的学习

2 数据提取的概念和数据的分类
2.1 什么是数据提取

简单的来说,数据提取就是从响应中获取我们想要的数据的过程

2.2 爬虫中数据的分类

结构化数据:json,xml等
    处理方式:直接转化为python类型
非结构化数据:HTML
    处理方式:正则表达式、xpath

下面以今日头条的首页为例,介绍结构化数据和非结构化数据

结构化数据例子:

非结构化数据:

XML数据:

<bookstore>
<book category="COOKING">
  <title lang="en">Everyday Italian</title> 
  <author>Giada De Laurentiis</author> 
  <year>2005</year> 
  <price>30.00</price> 
</book>
<book category="CHILDREN">
  <title lang="en">Harry Potter</title> 
  <author>J K. Rowling</author> 
  <year>2005</year> 
  <price>29.99</price> 
</book>
<book category="WEB">
  <title lang="en">Learning XML</title> 
  <author>Erik T. Ray</author> 
  <year>2003</year> 
  <price>39.95</price> 
</book>
</bookstore>

从上面可以看出,xml数据也是结构非常明显的
3 数据提取之json
3.1 什么是json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。
3.2 哪里能找到返回json的url

下面以豆瓣热映电影为例,来了解那里能够找到返回json的url地址:https://movie.douban.com/cinema/nowplaying/beijing/
3.3.1 我们如何确定数据在哪里

在url地址对应的响应中搜索关键字即可

注意:

    url地址对应的响应中,中文往往是被编码之后的内容,所以更推荐大家去搜索英文和数字
    另外一个方法就是在perview中搜索,其中的内容都是转码之后的

3.3.2 切换手机版寻找返回json的地址

在chrome中点击切换手机版的选项,需要重新刷新页面才能够切换成功,部分网站还需要重新进入主页面之后再继续点击才能够切换成功,比如:豆瓣热映

会发现响应中可能包含部分数据并不是我们想要的,如下:

;jsonp1({"count": 18, "start": 0, "subject_collection_items": "...."})

其中jsonp1似乎是很眼熟,在请求的地址中包含一个参数callback=jsonp1,正是由于这个参数的存在,才导致结果中也会有这部分数据,对应的解决方法是:直接删除url地址中的callback字段即可,在url地址中很多字段都是没用的,可以大胆尝试

3.3.3 json数据格式化方法

在preview中观察

在线解析工具进行解析
    比如:https://www.bejson.com/

pycharm进行reformat code
    在pycharm中新建一个json文件,把数据存入后,点击code下面的reformat code,但是中文往往显示的是unicode格式

3.3.4 json数据的其他来源

抓包app,但是很多时候app中的数据是被加密的,但是仍然值得尝试
3.4 json模块中方法的学习

其中类文件对象的理解:

具有read()或者write()方法的对象就是类文件对象,比如f = open(“a.txt”,”r”) f就是类文件对象

具体使用方法:

#json.dumps 实现python类型转化为json字符串
#indent实现换行和空格
#ensure_ascii=False实现让中文写入的时候保持为中文
json_str = json.dumps(mydict,indent=2,ensure_ascii=False)
 
 
#json.loads 实现json字符串转化为python类型
my_dict = json.loads(json_str)
 
 
#json.dump 实现把python类型写入类文件对象
with open("temp.txt","w") as f:
    json.dump(mydict,f,ensure_ascii=False,indent=2)
 
# json.load 实现类文件对象中的json字符串转化为python类型
with open("temp.txt","r") as f:
    my_dict = json.load(f)

3.5 json模块的作用

Json在数据交换中起到了一个载体的作用,承载相互传递的数据
3.6 练习

爬取豆瓣电视剧上英剧和美剧两个分类的电视数据,地址:https://m.douban.com/tv/
4 数据提取之正则

(参考资料:正则表达式概述、正则表达式(总结版))
4.1 什么是正则表达式

用事先定义好的一些特定字符、及这些特定字符的组合,组成一个规则字符串,这个规则字符串用来表达对字符串的一种过滤逻辑。
4.2 正则表达式的常见语法

知识点

正则中的字符
正则中的预定义字符集
正则中的数量词

正则的语法很多,不能够全部复习,对于其他的语法,可以临时查阅资料,比如:表示或还能使用|
练习: 下面的输出是什么?

string_a = '<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">\n\t\t<meta http-equiv="content-type" content="text/html;charset=utf-8">\n\t\t<meta content="always" name="referrer">\n        <me
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值