python爬取网页表格数据匹配,python爬虫——数据爬取和具体解析

标签:pattern   div   mat   txt   保存   关于   json   result   with open

关于正则表达式的更多用法,可参考链接:https://blog.csdn.net/weixin_40040404/article/details/81027081

一、正则表达式:

1.常用正则匹配:

URL:^https?://[a-zA-Z0-9.?=&]*$ (re.S模式,匹配 https://www.baidu.com 类似URL )

常用Email地址:[0-9a-zA-Z_-] @[0-9a-zA-Z_-] .[0-9a-zA-Z_-] 或者 [w-] @[w-] .[w-]

中文字符匹配:[u4e00-u9fa5] 或者 [^x00-xff]

QQ号:[1-9][0-9]{4,} ({4,}表示[0-9]的数字个数不低于4个)

ID:^[1-9]d{5}(18|19|([23]d))d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)d{3}[0-9Xx]$

2.特殊组合:

([sS]*?) == ([.n]*?) == re.findall(‘.*?‘, re.S)

万能正则表达式 (加‘?’表示懒惰模式,尽可能最小长度匹配; 不加‘?’表示贪婪模式,尽可能最大长度匹配)

sS : 空白字符 非空白字符,即表示所有字符 all, == ’ .n ‘(.表示除换行符之外的任意字符,n表示换行符)

re.S: 即DOTAALL 点匹配任意模式,改变.的行为,可以匹配换行符

二、例子

获取博客园的其中一篇文章的内容,保存至文档中。(具体解析在代码注释中可见)

1.源代码

1 importrequests2 importre3 importjson4

5 defrequest_blog(url):6 #异常处理代码块

7 try:8 #同步请求

9 response =requests.get(url)10 if response.status_code == 200:11 returnresponse.text12 exceptrequests.RequestException:13 returnNone14

15 defparse_result(html):16 #re正则表达式,re.compile是对匹配符的封装,直接用re.match(匹配符,要匹配的原文本)可以达到相同的效果,

17 #当然,这里没有用re.match来执行匹配,而是用了re.findall,这是因为后者可以适用于多行文本的匹配。

18 #另外,re.compile后面的第2个参数,re.S是用来应对换行的,.匹配的单个字符不包括n和r,当遇到换行时,我们需要用到re.S

19

20 #获取网页中的

标签中的内容,遇到换行符时,自动跳出循环

21 #格式:标签加.*?,.*?表示取标签中的所有数据

22 pattern = re.compile(‘

.*?

‘,re.S)23 items =re.findall(pattern, html)24 returnitems25

26 defwrite_item_to_file(item):27 print(‘写入数据:‘ str(item))28 #保存的文件名blog.txt,写入文件的格式a追加,写入文件的中文格式化UTF-8

29 with open(‘blog.txt‘, ‘a‘, encoding=‘UTF-8‘) as f:30 #遇到换行符时,自动换行

31 f.write(json.dumps(item, ensure_ascii=False) ‘n‘)32

33 defmain(page):34 #网址

35 url = ‘https://www.cnblogs.com/chenting123456789/p/11840740.html‘ str(page)36 #调用获取网页数据的函数

37 html =request_blog(url)38 #调用解析已获取的网页数据的函数

39 items =parse_result(html)40 #循环写入文件

41 for item initems:42 write_item_to_file(item)43

44 if __name__ == "__main__":45 for i in range(1,5):46 main(i)

2.运行结果

018902b9f1398f0ad49a396fc9a7f293.png

3.原文文章截图

daecc5491218bfea42c83bf4e265642d.png

4.写入文件内容

3125a140b1e0d091b9e4a498c27ee53d.png

三、小结

强化爬虫爬取网页信息的技术,以及解析数据时的逻辑顺序。

python爬虫——数据爬取和具体解析

标签:pattern   div   mat   txt   保存   关于   json   result   with open

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419648.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(1598):ref转发

第一种方式 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script src&…

PHP opencv Dlib,Face_Recognition

Face_Recognition使用Opencv和Dlib实现基于视频的人脸识别文件夹介绍1、Resources\pictures此文件夹下存放人脸保存结果2、Resources\video此文件夹下存放带标注视频保存结果3、Resources\faceS此文件夹下存放各个人物的图片&#xff0c;用于人脸库的建立4、Resources\featureD…

Examining Open vSwitch Traffic Patterns

In this post, I want to provide some additional insight on how the use of Open vSwitch (OVS) affects—or doesn’t affect, in some cases—how a Linux host directs traffic through physical interfaces, OVS internal interfaces, and OVS bridges. This is somethi…

Docker 面临的安全隐患,我们该如何应对

【编者按】对比虚拟机&#xff0c;Docker 在体量等方面拥有显著的优势。然而&#xff0c;当 DevOps 享受 Docker 带来扩展性、资源利用率和弹性提升的同时&#xff0c;其所面临的安全隐患同样值得重视&#xff0c;近日 Chris Taschner 在 SEI 上撰文进行了总结。本文系 OneAPM …

Oracle从小白到大牛的刷题之路(建议收藏学习)

目录 前言 数据表结构 数据库文件&#xff08;按照顺序导入&#xff09; 1基本SQL-SELECT 1.1基本SQL-SELECT语句笔记 1.2 基本SQL-SELECT语句练习 2过滤和排序数据 2.1过滤和排序数据笔记 2.2过滤和排序数据练习 3单行函数 3.1单行函数笔记 3.2单行函数练习 4多表…

3.2 双向链表

1.简介 前面3.1的单链表在操作过程中有一个缺点&#xff0c;就是后面的节点无法直接找到前面的节点&#xff0c;这使很多操作都得从头到尾去搜寻节点&#xff0c;算法效率变得非常低&#xff0c;解决这个问题的方法就是重新定义链表的节点使每个节点有两个指针&#xff0c;一个…

uc通讯不成功php版本过高,Ucenter通信失败排查方法

定位错误来源&#xff1a;1. 使用firebug或类似于firebug的工具审查”通信失败“这几个字2. 会发现包含这几个字的div的同级下方有个script标签&#xff0c;复制该script标签的src值到浏览器的新标签页并打开3. 这个url指向的是ucenter中app模块的onping操作(ucenter/control/a…

敏捷软件开发:原则、模式与实践——第12章 ISP:接口隔离原则

第12章 ISP&#xff1a;接口隔离原则 不应该强迫客户程序依赖并未使用的方法。   这个原则用来处理“胖”接口所存在的缺点。如果类的接口不是内敛的&#xff0c;就表示该类具有“胖”接口。换句话说&#xff0c;类的“胖”接口可以分解成多组方法。每一组方法都服务于一组不…

Java中常用的集合

有序列允许元素重复否Collection否是List是是SetAbstractSet否      否HashSetTreeSet是&#xff08;用二叉树排序&#xff09;MapAbstractMap否 使用key-value来映射和存储数据&#xff0c; Key必须惟一&#xff0c;value可以重复 HashMapTreeMap是&#xff08;用二叉树…

ASP.NET MVC必知必会知识点总结(二)

一、实现Controller的依赖注入&#xff1a; 1.自定义继承DefaultControllerFactory 类的控制器工厂类并重写GetControllerInstance方法&#xff1b;&#xff08;如&#xff1a;InjectControllerFactory&#xff09; 2.在Global.asax文件中的Application_Start方法中注册该控制器…

linux客户端无法绑定端口号,为什么Linux客户端的情况下不支持端口共用?

也不是不可以, 如果是socket的话只要设置端口复用就可以实现&#xff0c;随便写一段代码演示一下#/bin/pythonimport sysimport timeimport socketdef start_tcp_client(ip, port):#server port and ipserver_ip ipservr_port porttcp_client socket.socket(socket.AF_INET,…