概述
爬虫系列总目录
本章节介绍爬虫中使用的基础库用于选择,过滤页面信息。包括requests,bs4,xpath,正则表达式re,json 等内容,能够实现对简单页面的获取。
第二章 爬虫基础库-requests/bs4
第二章 正则表达式
第二章 简单网页的爬取与Xpath、Json使用
常见数据类型及数据解析应用
- 爬虫系列总目录
- 一、数据的分类
- 二、解析某段子网
- 2.1 确定目标
- 2.2 获取响应
- 2.3 筛选数据
- 2.4 运行并保存数据
- 三.使用Xpath解析数据
- 3.1 什么是XML
- 3.1.1 XML 和 HTML 的区别:
- 3.2 解析网页
- 3.3 选取节点
- 3.4 使用通配符选取未知节点
- 3.5 遍历HTML 页面中的家族树
- 四、 JSON
- 4.1 Python处理json
- 4.2 JsonPath(了解)
一、数据的分类
爬虫的步骤简单来说可以分为:
- 定目标(明确爬取的内容–>网址等等)
- 爬数据(获取所有的内容)
- 取数据(解析数据,去掉我们不需要的数据)
- 存数据(根据自己需求存储)
其中第三步获取数据,获取到的内容一般来说分为两部分:结构化数据和非结构化数据
结构化数据
- 结构化数据: 先定义结构,再存入数据, 如JSON文件及XML文件
- 非结构化数据:先有数据,在定义结构,如:文本、电话号码、邮箱地址、HTML文件
二、解析某段子网
2.1 确定目标
目标网站:https://duanzixxxx.com/
第二页: https://duanzixxxx.com/page/2/
2.2 获取响应
编码的查看方法,
- head meta
- 页面中查找 charset 属性
def get_response(url, headers=None):
"""获取响应"""
_headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36'
}
if headers:
_headers = headers
res = requests.get(url, headers=_headers)
# 如果当前网站不是utf8的编码 需要在括号内指定对应的编码
return res.content.decode()
2.3 筛选数据
拓展: re.S
如果需要匹配的目标数据中有换行,在Python的正则表达式中,有一个参数为re.S。它表示“.”的作用扩展到整个字符串,包括“n”。
a = '''asdfsafhellopass:
worldafdsf
'''
b = re.findall('hello(.*?)world',a)
c = re.findall('hello(.*?)world',a,re.S)
2.4 运行并保存数据
三.使用Xpath解析数据
XPath 是一门在 XML 文档中查找信息的语言。XPath使用路径表达式来选取 XML 文档中的节点或节点集。
3.1 什么是XML
- XML 指可扩展标记语言(EXtensible MarkupLanguage)
- XML 是一种标记语言,很类似 HTML
- XML 的设计宗旨是传输数据,而非显示数据
- XML 的标签需要我们自行定义。
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准
3.1.1 XML 和 HTML 的区别:
- XML :(Extensible Markup Language)(可扩展标记语言)被设计为传输和存储数据,其
焦点是数据的内容。 - HTML: HyperText Markup Language(超文本标记语言)显示数据以及如何更好显示数据。
- HTMLDOM: Document Object Model for HTML (文档对象模型)通过 HTML DOM,可以访问所有的 HTML 元素,连同它们所包含的文本和属性。可以对其中的内容进行修改和删,同时也可以创建新的元素。
3.2 解析网页
# etree.parse() # 从文件中读取html代码
# etree.HTML() # 从字符串中解析html代码
from lxml.html import fromstring
# 从字符串中解析html代码
# fromstring() 与 etree.HTML() 功能相等
from lxml import etree
html = etree.parse('baidutieba.html', etree.HTMLParser())
# 选取节点
all_li = html.xpath('//li')
3.3 选取节点
XPath 使用路径表达式来选取 XML 文档中的节点或者节nodename 选取此节点的所有子节点集。
- nodename 选取此节点的所有子节点。
- / 从根节点选取。
- // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.
选取当前节点。..
选取当前节点的父节点。- @ 选取属性。
- /text()---->获取的是标签中直系的文本内容 结果为list
- //text()----->标签中非直系的文本内容(所有的文本内容) 结果为list
例如:
- div 选取 div元素的所有子节点。
- /div 选取根元素 div。注意:假如路径起始于正斜杠( / ),则此路径始终代表到div元素
的绝对路径! - div/p 选取属于 div 的子元素的所有 p 元素。
- //div 选取所有 div 子元素,而且不管它们在文档中的位置。
- div//p 选择属于 div 元素的后代的所有 p 元素,而且不管它们位于 div 之下的什么位置。
- //@box1 选取名为box1 的所有属性。
3.4 使用通配符选取未知节点
通配符及描述
*
匹配任何元素节点。- @* 匹配任何属性节点。
- node() 匹配任何类型的节点。
3.5 遍历HTML 页面中的家族树
网页的每个元素都包括父元素,兄弟元素和子元素。使用这些关系方便我们更好的遍历页面。
table = tree.xpath('//table')[0]
# 获取所有子元素
table.getchildren()
# 获取父元素
table.getprevious()
# 获取兄弟元素
table.getnext()
四、 JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。
4.1 Python处理json
在Python中内置了一个模块json,用来处理json数据。该模块提供了四个功能:dumps、dump、loads、load,用于字符串 和 python数据类型间进行转换。
- json.loads() :把Json格式字符串解码转换成Python对象
- json.dumps(): 实现python类型转化为json字符串,返回一个str对象 把一个Python对象编码转换成Json字符串。
- json.dump():将Python内置类型序列化为json对象后入文件
- json.load():读取文件中json形式的字符串元素 转化成python类型
4.2 JsonPath(了解)
JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具。JsonPath 对于 JSON 来说,相当于XPATH 对于 XML。
JsonPath与XPath语法对比:Json结构清晰,可读性高,复杂度低,非常容易匹配,下表中对应了XPath的用法。
五、练习
段子网数据获取
36kr 首页文章获取
JS 练习 腾讯招聘数据获取
最后
以上就是伶俐斑马为你收集整理的第二章 简单网页的爬取与Xpath、Json使用 2021-09-09爬虫系列总目录一、数据的分类二、解析某段子网三.使用Xpath解析数据四、 JSON的全部内容,希望文章能够帮你解决第二章 简单网页的爬取与Xpath、Json使用 2021-09-09爬虫系列总目录一、数据的分类二、解析某段子网三.使用Xpath解析数据四、 JSON所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复