爬虫系列二(数据清洗--->正则表达式)
一 正则常识
| 模式 | 描述 |
|---|---|
\w |
匹配字母数字及下划线 |
\W |
匹配非字母数字及下划线 |
|
|
匹配任意空白字符,等价于 [\t\n\r\f]. |
\S |
匹配任意非空字符 |
\d |
匹配任意数字,等价于 [0-9] |
\D |
匹配任意非数字 |
\A |
匹配字符串开始 |
\Z |
匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串 |
\z |
匹配字符串结束 |
\G |
匹配最后匹配完成的位置 |
\n |
匹配一个换行符 |
\t |
匹配一个制表符 |
^ |
匹配字符串的开头 |
$ |
匹配字符串的末尾 |
. |
匹配任意字符,除了换行符 |
[...] |
用来表示一组字符,单独列出:[amk] 匹配 'a','m' 或 'k' |
[^...] |
不在 [] 中的字符:[^abc]匹配除了 a,b,c 之外的字符。 |
* |
匹配 0 个或多个的表达式。 |
+ |
匹配 1 个或多个的表达式。 |
? |
匹配 0 个或 1 个由前面的正则表达式定义的片段,非贪婪方式 |
{n} |
精确匹配 n 个前面表达式。 |
{n, m} |
匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式 |
a \| b |
匹配 a 或 b |
( ) |
匹配括号内的表达式,也表示一个组 |
二 pythoon正则中的常见方法
| 函数 | 描述 |
|---|---|
re.match(pattern, string, flags=0) |
尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none |
re.search(pattern, string, flags=0) |
扫描整个字符串并返回第一个成功的匹配 |
re.sub(pattern, repl, string, count=0) |
用于替换字符串中的匹配项,repl : 替换的字符串,也可为一个函数 |
re.compile(pattern[, flags]) |
用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用 |
findall(string[, pos[, endpos]]) |
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表 |
re.split(pattern, string[, maxsplit=0, flags=0]) |
能够匹配的子串将字符串分割后返回列表 |
三 修饰符总结
| 修饰符 | 描述 |
|---|---|
re.I |
使匹配对大小写不敏感 |
re.L |
做本地化识别(locale-aware)匹配 |
re.M |
多行匹配,影响 ^ 和 $ |
re.S |
使 . 匹配包括换行在内的所有字符 |
re.U |
根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
re.X |
该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
四 爬虫正则解析数据实例(源码)
# re 解析,下载嗅事百科图片 import requests
import re
import os url='https://www.qiushibaike.com/pic/'
headers={
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.20 Safari/537.36'
} response=requests.get(url=url,headers=headers)
# print(response.text) '''
#网页中需要的数据格式为:
<div class="thumb"> <a href="/article/121553539" target="_blank">
<img src="//pic.qiushibaike.com/system/pictures/12155/121553539/medium/8FN1C2RZMV2J1FJY.jpg" alt="抖音上的骗子">
</a> </div>
''' #利用re获取图片url
ex='<div class="thumb">.*?<img src="(?P<img>.*?)" alt.*?</div>'
img_url_list=re.findall(ex,response.text,re.S) #持久化保存图片
if not os.path.exists('qiushibaike'):
os.makedirs('qiushibaike') for url in img_url_list:
url='https:'+url
img_data=requests.get(url=url).content
img_name=url.split('/')[-1]
path='qiushibaike/'+img_name
with open(path,mode='wb') as f:
f.write(img_data)
print(img_name+'下载完成')
爬虫系列二(数据清洗--->正则表达式)的更多相关文章
- 爬虫系列二(数据清洗--->xpath解析数据)
一 xpath介绍 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. XPath 使用路径表达式在 XML 文档中进行导航 XPath 包 ...
- 爬虫系列二(数据清洗--->bs4解析数据)
一 BeautifulSoup解析 1 环境安装 - 需要将pip源设置为国内源,阿里源.豆瓣源.网易源等 - windows (1)打开文件资源管理器(文件夹地址栏中) (2)地址栏上面输入 %ap ...
- 爬虫系列(二) Chrome抓包分析
在这篇文章中,我们将尝试使用直观的网页分析工具(Chrome 开发者工具)对网页进行抓包分析,更加深入的了解网络爬虫的本质与内涵 1.测试环境 浏览器:Chrome 浏览器 浏览器版本:67.0.33 ...
- Java爬虫系列二:使用HttpClient抓取页面HTML
爬虫要想爬取需要的信息,首先第一步就要抓取到页面html内容,然后对html进行分析,获取想要的内容.上一篇随笔<Java爬虫系列一:写在开始前>中提到了HttpClient可以抓取页面内 ...
- Python爬虫(二)正则表达式
一.介绍 1.概念 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来 ...
- 爬虫系列(十二) selenium的基本使用
一.selenium 简介 随着网络技术的发展,目前大部分网站都采用动态加载技术,常见的有 JavaScript 动态渲染和 Ajax 动态加载 对于爬取这些网站,一般有两种思路: 分析 Ajax 请 ...
- 爬虫系列(五) re的基本使用
1.简介 究竟什么是正则表达式 (Regular Expression) 呢?可以用下面的一句话简单概括: 正则表达式是一组特殊的 字符序列,由一些事先定义好的字符以及这些字符的组合形成,常常用于 匹 ...
- 爬虫系列(六) 用urllib和re爬取百度贴吧
这篇文章我们将使用 urllib 和 re 模块爬取百度贴吧,并使用三种文件格式存储数据,下面先贴上最终的效果图 1.网页分析 (1)准备工作 首先我们使用 Chrome 浏览器打开 百度贴吧,在输入 ...
- Java爬虫系列之实战:爬取酷狗音乐网 TOP500 的歌曲(附源码)
在前面分享的两篇随笔中分别介绍了HttpClient和Jsoup以及简单的代码案例: Java爬虫系列二:使用HttpClient抓取页面HTML Java爬虫系列三:使用Jsoup解析HTML 今天 ...
随机推荐
- 说一说MVC的Authentication过滤(四)
前沿: 一般情况下,在我们做访问权限管理的时候,会把用户的正确登录后的基本信息保存在Session中,以后用户每次请求页面或接口数据的时候,拿到 Session中存储的用户基本信息,查看比较他有没有登 ...
- Qt之QComboBox定制
说起下拉框,想必大家都比较熟悉,在我们注册一些网站的时候,会出现大量的地区数据供我们选择,这个时候出现的就是下拉框列表,再比如字体选择的时候也是使用的下拉框,如图1所示.下拉框到处可见,作为一个图形库 ...
- 深入并发包 ConcurrentHashMap 源码解析
以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容 ...
- RBAC用户特别授权的思考
场景: 标准的RBAC,授权只应该赋予角色,再把角色指派给用户,当需要对特定用户授予权限时,就只能新建一个角色指派给这个用户.这就意味着每对一个新用户做特别授权都要创建一个特别角色. 今天脑洞大开,想 ...
- RS232串口的Windows编程纪要
再次是一篇入门文,各路神仙退散. 直接进入主题,又不是历史课,关于RS232那些前世今生的故事就不摆了. 硬件链接 首先以9针小口为例(大口应当只能去博物馆看了吧)看一下管脚排布,其实RS232本身没 ...
- Linux系统的数据写入机制--延迟写入
我们都知道,在Linux关机的之前都会要运行一个命令那就是sync,这个命令是同步的意思,那为什么要运行这个?而且之前的数据改变我们已经看见了,为什么还要运行这个命令?要回答这个问题就要说一下Linu ...
- TCP/IP 三次握手
网络连接状态 网络连接状态(11种)非常重要这里既包含三次握手中的也包括四次断开中的,所以要熟悉. LISTEN 被动打开,首先服务器需要打开一个socket进行监听,监听来自远方TCP端口的连接请求 ...
- angr进阶(2)C++程序的处理
如何应对C++程序 angr只实现了C库,所以应对C++程序,需要使用full_init_state方法,并设置unicorn引擎.csaw_wyvern 并且这个过程相对于C通常会更长 st = p ...
- Shell从入门到精通进阶之三:表达式与运算符
3.1 条件表达式 表达式 示例 [ expression ] [ 1 -eq 1 ] ` expression ` ` 1 -eq 1 ` test expression test 1 -eq 1 ...
- Supervisor 为服务创建守护进程
今天需要再服务上部署一个.net 方面的项目:当时开启服务的命令只能在前台执行:使用nohub CMD &等放在后台开启服务都会宕机:所以搜寻了Supervisor 这个解决办法,为服务创建守 ...