python 网络爬虫简介和表达式基础
一. 网络爬虫
网络爬虫是什么?
网络爬虫是一种互联网信息的自动化采集程序
主要作用是代替人工对互联网中的数据进行自动采集和整理
快速、批量地获取目标数据
网络爬虫可以做什么?
- 批量采集某个行业或领域的数据,进行分析从而辅助决策或后续营销
- 批量爬取视频、文章、漫画,实现脱网本地集中浏览
- 开发火车票抢票程序,实现自动抢票
二. 正则表达式
意义
网页爬下来之后,一般都存在很多干扰信息
需要对我们关注地信息进行提取
正则表达式是用于信息筛选提取的强大工具
正则表达式基础
1. 全局匹配函数使用格式
re.compile(正则表达式).findall(源字符串)
re.compile:
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象
语法格式为:
re.compile(pattern[, flags])
- pattern : 一个字符串形式的正则表达式
- flags : 可选,表示匹配模式,比如忽略大小写,多行模式等
常用匹配模式 | 描述 |
---|---|
re.I | 忽略大小写 |
re.M | 多行模式 |
re.S | 让.也能匹配多行 |
re.X | 为了增加可读性,忽略空格和 # 后面的注释 |
findall:
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
语法格式为:
findall(string[, pos[, endpos]])
- string : 待匹配的字符串。
- pos : 可选参数,指定字符串的起始位置,默认为 0。
- endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。
2. 正则表达式模式
模式 | 描述 | 模式 | 描述 |
---|---|---|---|
\n | 匹配换行符 | . | 匹配除换行符外的任意字符 |
\t | 匹配制表符 | ^ | 匹配开始位置 |
\w | 匹配字母、数字、下划线 | $ | 匹配结束位置 |
\W | 匹配非字母、数字、下划线 | * | 前一个匹配字符出现0\1\多次 |
\d | 匹配任意数字,[0-9] | ? | 前一个匹配字符出现0\1次 |
\D | 匹配非数字 | + | 前一个匹配字符出现1\多次 |
\s | 匹配空白字符 | {n} | 前一个匹配字符恰好出现n次 |
\S | 匹配非空白字符 | {n,} | 前一个匹配字符至少出现n次 |
[...] | 一组字符,匹配组内任意字符 | {n,m} | 前一个匹配字符出现至少n次,至多m次,贪婪模式 |
[^...] | 匹配非组内字符的其他字符 | () | 想要提取的内容 |
贪婪模式:尽可能多地匹配,默认贪婪
懒惰模式:尽可能少地匹配,精准模式
例如:
import re
string = '''one1two2three3four4
WOw1234owoo''' # 源字符串
pattern_11 = "wo" # 字符串形式的正则表达式
pattern_12 = "wo*"
print(re.compile(pattern_11).findall(string))
>>>['wo', 'wo']
print(re.compile(pattern_12).findall(string))
>>>['wo', 'w', 'woo']
print(re.compile(pattern_12, re.I).findall(string)) # 忽略大小写
>>>['wo', 'WO', 'w', 'woo']
pattern_2 = "w.*o" # 贪婪模式
pattern_3 = "w.*?o" # 懒惰模式
print(re.compile(pattern_2).findall(string))
>>>['wo2three3fo', 'w1234owoo']
print(re.compile(pattern_2, re.S).findall(string)) # 让. 匹配包括换行在内的所有字符
>>>['wo2three3four4\n\t\t\tWOw1234owoo']
print(re.compile(pattern_3).findall(string))
>>>['wo', 'w1234o', 'wo']
pattern_4 = "w.*(three3).*o" # 提取信息
print(re.compile(pattern_4).findall(string))
>>>['three3']
XPath表达式(补充):
常用匹配模式 | 描述 |
---|---|
/ | 逐层提取 |
text() | 提取标签下面的文本 |
//标签名** | 提取所有名为**的标签 |
@属性名 | 提取某个属性值 |
学习链接:
阿里云大学:python网络爬虫快速入门到精通
菜鸟教程:python正则表达式