提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
python爬虫数据页面解析方法记录。分布为:re、BeautifulSoup、xpath。
提示:以下是本篇文章正文内容,下面案例可供参考
一、re正则表达式
定义:是为了匹配字符串中符合正则表达式的内容。
1. findall: 匹配字符串中所有的符合正则的内容,返回为list列表
例子如下:
lst = re.findall(r"\d+", "我的电话号是:10086, 我女朋友的电话是:10010")
2. finditer: 匹配字符串中所有的内容[返回的是迭代器], 从迭代器中拿到内容需要.group()
例子如下:
it = re.finditer(r"\d+", "我的电话号是:10086, 我女朋友的电话是:10010")
for i in it:
print(i.group())
3. search:找到一个结果就返回, 返回的结果是match对象. 拿数据需要.group()
例子如下:
s = re.search(r"\d+", "我的电话号是:10086, 我女朋友的电话是:10010")
print(s.group())
4. match:是从头开始匹配,开头不符合即失败
例子如下:
s = re.match(r"\d+", "10086, 我女朋友的电话是:10010")
print(s.group())
5. compile:预加载正则表达式
例子如下:
obj = re.compile(r"\d+")
ret = obj.finditer("我的电话号是:10086, 我女朋友的电话是:10010")
for it in ret:
print(it.group())
二、BeautifulSoup
1.安装
代码如下(示例):
pip install bs4
2.解析
把页面源代码交给BeautifulSoup进行处理, 生成bs对象
代码如下(示例):
page = BeautifulSoup(resp.text, "html.parser") # 指定html解析器
从bs对象中查找数据。
2.1 find(标签, 属性=值)
示例:
table = page.find("table", class_="hq_table") # class是python的关键字,所有加'_'
2.2 find_all(标签, 属性=值)
示例:
trs = table.find_all("tr")[1:] # 这里刨除表头
for tr in trs: # 每一行
tds = tr.find_all("td") # 拿到每行中的所有td
name = tds[0].text # .text 表示拿到被标签标记的内容
low = tds[1].text # .text 表示拿到被标签标记的内容
avg = tds[2].text # .text 表示拿到被标签标记的内容
high = tds[3].text # .text 表示拿到被标签标记的内容
gui = tds[4].text # .text 表示拿到被标签标记的内容
kind = tds[5].text # .text 表示拿到被标签标记的内容
date = tds[6].text # .text 表示拿到被标签标记的内容
三、xpath
1. 安装
pip install lxml
2. 解析
这个是以页面层级查找的,首先创建etree对象
result = tree.xpath("/book/name/text()") # text() 拿文本
result = tree.xpath("/book/author//nick/text()") # // 后代
result = tree.xpath("/book/author/*/nick/text()") # * 任意的节点. 通配符(会儿)
result = tree.xpath("/html/body/ul/li[1]/a/text()") # xpath的顺序是从1开始数的, []表示索引
result = tree.xpath("/html/body/ol/li/a[@href='dapao']/text()") # [@xxx=xxx] 属性的筛选
result = li.xpath("./a/text()") # 在li中继续去寻找. 相对查找
result2 = li.xpath("./a/@href") # 拿到属性值: @属性
PS
这些只是本人学习过程中记得笔记。