文章目录

  • python 正则表达式
  • re库
    • re库主要功能函数
    • 函数的使用方法
    • re库的使用
      • 函数式用法
      • 面向对象用法
    • re的match对象
      • match对象的属性
      • match对象的方法
    • 贪婪匹配
    • 最小匹配
  • Re在线网站
  • 实例- -爬取百度文库内容

python 正则表达式

正则表达式是用来简洁表达一组字符串地表达式,是通用的字符串表达框架

正则表达式由字符和操作符组成:

操作符 说明
. 表示任何单个字符(除了换行)
[ ] 字符集,对单个字符给出取值范围,[abc]表示a、b、c中任一个,[a-z]表示a到z的单个字符
[^] 非字符集,对单个字符给出排除范围,[^abc]表示除了a、b、c之外的的单个字符
* 前一个字符0次或多次扩展 abc* 表示:ab、abc 、abc 、abcccc等
+ 前一个字符1次或多次扩展
前一个字符0次或者1次扩展
| 左右表达式任意一个 abc|def 表示abc 或者def
{m} 扩展前一个字符m次
{m,n} 扩展前面的一个字符m至n次(含n)
^ 匹配字符串开头 ^abc表示一个字符串的开头为abc
$ 匹配字符串结尾 abc$ 表示一个字符串的结尾为abc
( ) 分组标记,内部只能使用|操作符 (abc)表示abc ,(abc|def) 表示abc或者def
\d 十进制数字 ,介于[0-9]
\D 匹配任何非数据字符,等价于[^0-9]
\s 匹配任何空白字符;等价于[\f\n\r\t\v]
\S 匹配任何非空白字符
\w 单词字符,等价于[A-Za-z0-9 _ ]增加 A-Z,a-z,0-9和下划线_
\W 匹配任何非单词字符
\b 匹配单词的开始或结束
\B 匹配不是单词的开头或者结束的位置
\1…\9 匹配第n个分组的内容。 分组是()
{:n} 拓展一个字符0-n次,包含n
^[A-Za-z]+$  由26个字母组成的字符串
^[A-Za-z0-9]+$  由26个字母和数字组成的字符串

re库

标准库,用于字符串匹配

re库采用raw string 类型表示正则表达式,格式: r’text’

raw string 类型是原生字符串类型,不包含转义符的字符串

re库主要功能函数

  1. re.search()

在一个字符串中搜索匹配的正则表达式的第一个位置,返回match对象

  1. re.match()

从一个字符串的开始位置起匹配正则表达式,返回match对象

  1. re.findall()

搜索字符串,以列表类型返回全部能匹配的子串

  1. re.split()

将一个字符串按照正则表达式匹配的结果进行分隔,返回列表

  1. re.finditer()

搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象

  1. re.sub()

    在一个字符串中替换所有匹配的正则表达式的子串,返回替换后的字符串

函数的使用方法

  1. re.search(pattern,string,flags=0)

    pattern: 正则表达式的匹配字符串

    string: 待匹配的字符串

    flags: 正则表达式使用时的控制标记

    常用标记:

    缩写 全写 说明
    re.I re.IGNORECASE 忽略正则表达式的大小写 [A-Z]可以匹配小写
    re.M re.MULTILINE 正则表达式中^操作符能够将给定字符串的每行当作匹配开始
    re.S re.DOTALL 正则表达式中的.操作符能够匹配所有字符。默认.操作符匹配除换行符外的所有字符
  2. re.match(pattern,string,flags=0)

  3. re.findall(pattern,string,flags=0)

    返回列表类型

  4. re.split(pattern,string,maxsplit=0,flags=0)

    maxsplit:最大分割数,剩余部分作为最后一个元素输出

    将匹配的部分会去掉,其他的部分作为分隔的部分

  5. re.finditer(pattern,string,flags=0)

  6. re.sub(pattern,replace,string,count=0;flags=0)

    replace:替换匹配字符串的字符串

    count: 匹配的最大替换次数

re库的使用

函数式用法

一次性操作

rst.re.search(r’[1-9]\d{5}’,“BIT 100081”)

面向对象用法

编译后的多次操作

pat=re.compile(r’[1-9]\d{5}’) 编译

rst=pat.search(“BIT 100081”)

regex=re.compile(pattern,flags=0)
将正则表达式的字符串形式编译成正则表达式对象

re的match对象

match对象的属性

属性 说明
.string 待匹配的文本
.re 匹配时使用的pattern对象(正则表达式)
.pos 正则表达式搜索文本的开始位置
.endpos 正则表达式搜索文本的结束位置

match对象的方法

方法 说明
.group(n) 获得匹配后的第n个元素
.start() 匹配字符串在原始字符串的开始位置
.end() 匹配字符串在原始字符串中的结束位置
.span() 返回(.start(),.end()) 元组类型

贪婪匹配

re库默认采用贪婪匹配,即输出匹配的最长的子串

r'py.*N'

最小匹配

输出匹配的最小的子串

r'py.*?N' (加一个问号?)

*? 前一个字符0次或多次,最小匹配

+? 前一个字符1次或多次,最小匹配

?? 前一个字符0次或1次,最小匹配

{m,n}? 扩展前一个字符m至n次(含n),最小匹配

Re在线网站

https://tool.oschina.net/regex?optionGlobl=global
https://c.runoob.com/front-end/854

实例- -爬取百度文库内容

爬取百度文库的内容:
https://wenku.baidu.com/view/51d0d382e418964bcf84b9d528ea81c759f52e50.html

F12查看网页源代码

该网页是动态加载的:

可以手动点击,使之加载完成

每一个<div id=pageNo-n … 块都包含了一张需要的内容

可以复制出包含所有的这些块的html代码,用正则表达式提取出其中的图片的url

找到几个目标URL分析共同点:

https://wkbjcloudbos.bdimg.com/v1/docconvert5999/wk/84d37f07f0d6bb5035745541741807d7/0.png?r
esponseContentType=image%2Fpng&responseCacheControl=max-age%3D3888000&responseExpires=Sun%2C
%2011%20Jul%202021%2012%3A46%3A31%20%2B0800&authorization=bce-auth-v1%2Ffa1126e91489401fa7cc
85045ce7179e%2F2021-05-27T04%3A46%3A31Z%2F3600%2Fhost%2Fd314acbd7e3945d671b38fd3291b12fa6230
93b0a416c6644e2ab3d796978a5c&x-bce-range=1433702-1465976&token=eyJ0eXAiOiJKSVQiLCJ2ZXIiOiIxL
jAiLCJhbGciOiJIUzI1NiIsImV4cCI6MTYyMjA5NDM5MSwidXJpIjp0cnVlLCJwYXJhbXMiOlsicmVzcG9uc2VDb250Z
W50VHlwZSIsInJlc3BvbnNlQ2FjaGVDb250cm9sIiwicmVzcG9uc2VFeHBpcmVzIiwieC1iY2UtcmFuZ2UiXX0%3D.KEB
4MWf6qyaZe1bU4D0eWwe0w683s73aBrl8LGJVyO4%3D.1622094391https://wkbjcloudbos.bdimg.com/v1/docconvert5999/wk/84d37f07f0d6bb5035745541741807d7/0.png?r
esponseContentType=image%2Fpng&responseCacheControl=max-age%3D3888000&responseExpires=Sun%2C
%2011%20Jul%202021%2012%3A46%3A31%20%2B0800&authorization=bce-auth-v1%2Ffa1126e91489401fa7cc
85045ce7179e%2F2021-05-27T04%3A46%3A31Z%2F3600%2Fhost%2Fd314acbd7e3945d671b38fd3291b12fa6230
93b0a416c6644e2ab3d796978a5c&x-bce-range=1465977-1510087&token=eyJ0eXAiOiJKSVQiLCJ2ZXIiOiIxL
jAiLCJhbGciOiJIUzI1NiIsImV4cCI6MTYyMjA5NDM5MSwidXJpIjp0cnVlLCJwYXJhbXMiOlsicmVzcG9uc2VDb250Z
W50VHlwZSIsInJlc3BvbnNlQ2FjaGVDb250cm9sIiwicmVzcG9uc2VFeHBpcmVzIiwieC1iY2UtcmFuZ2UiXX0%3D.Et
YsvSe0rcUPqcR607Zag87P6A47wiWkPZwvICTz%2FAw%3D.1622094391
匹配字符串可以为:
pattern=r'https://wkbjcloudbos.bdimg.com/.*?%3D\.\d{10}'

python提取目的URL地址:

import re
html='''复制出来的html代码片段
.....
'''
#用于初步提取出URL
pattern=r'https://wkbjcloudbos.bdimg.com/.*?%3D\.\d{10}'
#在html中& 是用'&amp;' 来表示的,所以要将'&amp;’替换为'&'
pattern_amp=r'&amp;'
regex=re.compile(pattern)
regex_amp=re.compile(pattern_amp)links=regex.finditer(html)
# 判断获取的URL的数量
#print(sum(1 for _ in links))
for i in links:#获得URLlink=regex_amp.sub("&",i.group()) print(link)

python根据提取的URL下载保存图片:

import re
import requestshtml='''复制出来的html代码片段
.....
'''#用于初步提取出URL
pattern=r'https://wkbjcloudbos.bdimg.com/.*?%3D\.\d{10}'
#在html中& 是用'&amp;' 来表示的,所以要将'&amp;’替换为'&'
pattern_amp=r'&amp;'
regex=re.compile(pattern)
regex_amp=re.compile(pattern_amp)links=regex.finditer(html)
# 判断获取的URL的数量
#print(sum(1 for _ in links))
number=0
for i in links:#获得URLlink=regex_amp.sub("&",i.group()) #print(link)response=requests.get(link)#这里的状态码不是200,是206if(200<=response.status_code<300):#在当前路径下必须要有photo文件夹f=open("photo/%d.png"%number,'wb')f.write(response.content)f.close()else:print(response.status_code)print("第%d张图片出错了"%number)number+=1

结果:

python正则表达式--爬取百度文库内容相关推荐

  1. 写一个爬虫,可以爬取百度文库内容

    爬取百度文库内容需要使用爬虫技术.以下是一个简单的 Python 爬虫示例: import requestsurl ="https://wenku.baidu.com/view/your_d ...

  2. python爬虫代码实例-Python爬虫爬取百度搜索内容代码实例

    这篇文章主要介绍了Python爬虫爬取百度搜索内容代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 搜索引擎用的很频繁,现在利用Python爬 ...

  3. python 爬虫——爬取百度文库VIP内容

    转载自:爬取百度文库 代码实现 import requests import re import json import ossession = requests.session()def fetch ...

  4. python爬虫爬取百度文库txt以及ppt资料

    使用bs4,requests,re库完成对百度文库部分格式文件的爬取 案例中的目标文档地址: https://wenku.baidu.com/view/cbb4af8b783e0912a3162a89 ...

  5. 使用python中的Selenium爬取百度文库word文章

    参考文章:Python3网络爬虫(九):使用Selenium爬取百度文库word文章,链接为: https://blog.csdn.net/c406495762/article/details/723 ...

  6. python生成QQ机器人爬取百度文库链接推送好友并生成词云

    QQ机器人爬取百度文库链接推送好友并生成词云 一.环境准备 二.实现QQ机器人 1.QQ机器人介绍 2.安装方法 3.实现自己的QQ机器人 三.百度文库内容链接爬取推送好友 代码实现: 思路分析 1. ...

  7. python爬取qq好友_Python3实现QQ机器人自动爬取百度文库的搜索结果并发送给好友(主要是爬虫)...

    一.效果如下: 二.运行环境: win10系统:python3:PyCharm 三.QQ机器人用的是qqbot模块 用pip安装命令是: pip install qqbot (前提需要有request ...

  8. python爬虫爬取百度文档

    使用python爬虫爬取百度文档文字 话不多说,直接上代码! import requests import reheaders = {"User-Agent": "Moz ...

  9. python爬虫爬取百度贴吧图片,requests方法

    每天一点点,记录学习 近期爬虫项目,看完请点赞哦---: 1:python 爬取菜鸟教程python100题,百度贴吧图片反爬虫下载,批量下载 2:python爬虫爬取百度贴吧图片,requests方 ...

  10. python如何爬取百度云_python如何爬取百度云连接方法指导

    本篇文章主要介绍了python urllib爬取百度云连接的实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 翻看自己以前写的程序,发现写过一个爬取盘多多百度云资源的东西,完全是当时想看变形 ...

最新文章

  1. NPOI读写Excel
  2. 你还在这样学习Python吗?真的不可以
  3. linux lvs公网ip,Linux集群架构(2)LVS介绍、LVS的调度算法、NAT模式搭建、 DR模式、keepalive...
  4. 使用密钥登录CentOS系统(基于密钥的认证)
  5. 科研院所推进6S管理的难点及推进手段分析
  6. scratch编程一款节奏小游戏
  7. ArcGIS投影坐标系xy转地理坐标系经纬度
  8. Ubuntu系统下搭建C/C++ gcc开发环境
  9. 计算机导论课程知识总结,计算机导论课程论文
  10. SQLZOO附加题练习 - Window functions
  11. 解读 2018:13 家开源框架谁能统一流计算?
  12. 保护计算机组件免受esd,USB3.0接口的ESD防护设计
  13. 衡水二中2021清华北大高考成绩查询,衡水二中成为“清华大学2020年优质生源中学”...
  14. Performance overview: Unixbench results on Container and VM, and seccomp
  15. I + I2C = I3C:这个附加的“I”是什么?
  16. c++陈维兴第三版3.35_C++面向对象程序设计教程第3版—陈维兴,林小茶课后习题答案...
  17. 知乎上关于电子商务话题的精彩问答
  18. Juery事件方法 — 37个
  19. 【转】Ansible 模块之 lineinfile 详细介绍
  20. HNU-电子测试平台与工具-三人表决器实验报告

热门文章

  1. bp神经网络数字识别matlab_pytorch神经网络实践(1): 安装与初次使用pytorch搭建神经网络实践手写数字识别教程
  2. Excel模板免费分享(办公常用、甘特图、员工绩效考核等模板)
  3. 文章学习_基于HowNet 的词汇语义倾向计算
  4. 基于PHP+MySQL的物流配送管理系统平台
  5. Matlab从入门到精通(六)--矩阵基本运算
  6. Unity2018官方汉化包
  7. 计算机无法卸载软件,电脑安装的软件无法卸载怎么办?
  8. jsp java 购物车,JSP购物车实例[一]
  9. 2019美赛B题PSO算法
  10. U盘一键直接安装原版win7