Python爬虫之使用正则表达式抓取数据
目录
相关文章:Linux中的正则表达式
实例:
匹配标签
匹配title标签
匹配网页的 <title></title> 标签,也就是网页的标题。 .*? 就是匹配1个或多个字符,也就是这里不能是空的。当加入括号的话,就是代表取值了 (.*?)
import re
import requests
resp=requests.get("http://www.baidu.com")
resp.encoding="utf-8" #设置编码格式为utf-8
html=resp.text
title=re.findall(r'<title>.*?</title>',html) #匹配 <title></title>
for t in title:
print(t)
title_value=re.findall(r'<title>(.*?)</title>',html) #匹配 <title></title>里面的内容
for t in title_value:
print(t)
#####################################################################
<title>百度一下,你就知道</title>
百度一下,你就知道
a标签
匹配<a href="" ></a> ,并且获取a标签里面的内容
import re
import requests
resp=requests.get("http://www.baidu.com")
resp.encoding="utf-8" #设置编码格式为utf-8
html=resp.text
urls = re.findall(r"<a.*?>.*?<\/a>", html) #匹配所有的a标签
for u in urls:
print(u)
texts = re.findall(r"<a.*?>(.*?)</a>", html) #获取超链接<a>和</a>之间内容
for t in texts:
print(t)
#######################################################################################
<a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a>
<a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a>
<a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a>
<a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a>
<a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a>
<a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a>
<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>
<a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品</a>
<a href=http://home.baidu.com>关于百度</a>
<a href=http://ir.baidu.com>About Baidu</a>
<a href=http://www.baidu.com/duty/>使用百度前必读</a>
<a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a>
新闻
hao123
地图
视频
贴吧
登录
登录
更多产品
关于百度
About Baidu
使用百度前必读
意见反馈
table标签
抓取 <table></table> 表格中的内容。
假设现在有这么一个网页
<html>
<table class="table">
<tr>
<th>姓名</th>
<th>性别</th>
</tr>
<tr>
<td>小谢</td>
<td>男</td>
</tr>
<tr>
<td>小红</td>
<td>女</td>
</tr>
</table>
</html>
匹配代码
import re
import requests
resp=requests.get("http://127.0.0.1/1.html")
resp.encoding="utf-8" #设置编码格式为utf-8
html=resp.text
#匹配table标签
tables=re.findall(r"<table.*?>.*?<\/table>",html,re.M|re.S)
for table in tables:
print(table)
#匹配<tr></tr>之间的内容
trs=re.findall(r"<tr>(.*?)</tr>",html,re.S|re.M) #因为<tr>标签大多数不是在同一行,所以要加 re.S和re.M多行匹配
for tr in trs:
print(tr)
#匹配<th></th>之间的内容
for row in trs:
ths=re.findall(r"<th>(.*?)</th>",row,re.S|re.M)
for th in ths:
print(th)
#匹配<td></td>之间的内容
for row in trs:
tds=re.findall(r"<td>(.*?)</td>",row,re.S|re.M)
for td in tds:
print(td)
##################################################################################
<table class="table">
<tr>
<th>姓名</th>
<th>性别</th>
</tr>
<tr>
<td><B>小谢</B></td>
<td>男<br/></td>
</tr>
<tr>
<td><B>小红</B></td>
<td>女<br/></td>
</tr>
</table>
<th>姓名</th>
<th>性别</th>
<td>小谢</td>
<td>男</td>
<td>小红</td>
<td>女</td>
姓名
性别
小谢
男
小红
女
匹配标签里面的属性
匹配a标签里面的URL
假如现在有网页
<html>
<a href="http://www.baidu.com">百度一下,你就知道</a>
<a href="http://www.mi.com">小米官网</a>
</html>
import re
import requests
resp=requests.get("http://127.0.0.1/1.html")
resp.encoding="utf-8" #设置编码格式为utf-8
html=resp.text
urls=re.findall(r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')",html,re.I|re.S|re.M) #匹配 href=""
for url in urls:
print(url)
###################################################################################
http://www.baidu.com
http://www.mi.com
匹配img标签里的 src
加入现在有网页
<html>
<img src="http://t1.27270.com/uploads/tu/201811/310/f3e9db6b68.jpg" name="美女"/>
<img src="http://t1.27270.com/uploads/tu/201811/229/ea7fda100e.jpg" />
</html>
匹配代码:
import re
import requests
resp=requests.get("http://127.0.0.1/1.html")
resp.encoding="utf-8" #设置编码格式为utf-8
html=resp.text
srcs=re.findall(r'src="(.*?)"',html,re.I|re.S|re.M)
for src in srcs:
print(src)
##################################################################
http://t1.27270.com/uploads/tu/201811/310/f3e9db6b68.jpg
http://t1.27270.com/uploads/tu/201811/229/ea7fda100e.jpg
#假如要获取图片的名字,也就是上面的 f3e9db6b68.jpg 或者 ea7fda100e.jpg
import re
import requests
resp=requests.get("http://127.0.0.1/1.html")
resp.encoding="utf-8" #设置编码格式为utf-8
html=resp.text
srcs=re.findall(r'src="(.*?)"',html,re.I|re.S|re.M)
for src in srcs:
name=src.split("/")[-1]
print(name)
##################################################################
f3e9db6b68.jpg
ea7fda100e.jpg
Python爬虫之使用正则表达式抓取数据的更多相关文章
- Python爬虫之requests+正则表达式抓取猫眼电影top100以及瓜子二手网二手车信息(四)
requests+正则表达式抓取猫眼电影top100 一.首先我们先分析下网页结构 可以看到第一页的URL和第二页的URL的区别在于offset的值,第一页为0,第二页为10,以此类推. 二.< ...
- iOS开发——网络使用技术OC篇&网络爬虫-使用正则表达式抓取网络数据
网络爬虫-使用正则表达式抓取网络数据 关于网络数据抓取不仅仅在iOS开发中有,其他开发中也有,也叫网络爬虫,大致分为两种方式实现 1:正则表达 2:利用其他语言的工具包:java/Python 先来看 ...
- Python爬虫实战六之抓取爱问知识人问题并保存至数据库
大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表 ...
- 分布式爬虫:使用Scrapy抓取数据
分布式爬虫:使用Scrapy抓取数据 Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘. ...
- 一次Python爬虫的修改,抓取淘宝MM照片
这篇文章是2016-3-2写的,时隔一年了,淘宝的验证机制也有了改变.代码不一定有效,保留着作为一种代码学习. 崔大哥这有篇>>小白爬虫第一弹之抓取妹子图 不失为学python爬虫的绝佳教 ...
- Python爬虫实战四之抓取淘宝MM照片
原文:Python爬虫实战四之抓取淘宝MM照片其实还有好多,大家可以看 Python爬虫学习系列教程 福利啊福利,本次为大家带来的项目是抓取淘宝MM照片并保存起来,大家有没有很激动呢? 本篇目标 1. ...
- [Python爬虫] 之四:Selenium 抓取微博数据
抓取代码: # coding=utf-8import osimport refrom selenium import webdriverimport selenium.webdriver.suppor ...
- Python爬虫之三种网页抓取方法性能比较
下面我们将介绍三种抓取网页数据的方法,首先是正则表达式,然后是流行的 BeautifulSoup 模块,最后是强大的 lxml 模块. 1. 正则表达式 如果你对正则表达式还不熟悉,或是需要一些提 ...
- python爬虫beta版之抓取知乎单页面回答(low 逼版)
闲着无聊,逛知乎.发现想找点有意思的回答也不容易,就想说要不写个爬虫帮我把点赞数最多的给我搞下来方便阅读,也许还能做做数据分析(意淫中--) 鉴于之前用python写爬虫,帮运营人员抓取过京东的商品品 ...
随机推荐
- HTML5基础入门一天学完
HTML 什么是HTML HTML:Hyper Text Markup Language(超文本编辑语言) HTML的发展史 HTML5优势 世界知名浏览器厂商对HTML5的支持 市场的需求 跨平台 ...
- WPF 应用 - 拖拽窗体、控件
1. 拖拽窗体 使用 System.Windows.Window 自带的 DragMove() 方法即可识别窗体拖动. DragMove(); 2. 拖拽控件:复制.移动控件 <Grid> ...
- python学习8 文件的操作
本文拷贝了on testing 的<python之文件操作:文件的读写>,只做学习之用 python的文件读写通过 一.用open函数 二.对文件读写操作 三.读取文件位置定位 1. op ...
- 在B站刷视频多倍速操作
B站多倍数播放 1. 最初天真版 F12 或者笔记本(Fn+F12) console控制台 输入 document.querySelector('video').playbackRate = 4: - ...
- iNeuOS工业互联平台,生产过程业务联动控制
1.概述 工业物联网也好.工业互联网也好或是其他生产系统,反向控制始终无法回避.搞工业最直接.最体现效果的两个方面是采集各种数据和生产过程业务控制,所谓大数据预测和分析,那是仁者见仁.智者见智,下一篇 ...
- 从本质彻底精通Git——4个模型1个周期1个史观1个工作流
一.什么是Git? Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git是Linus Torvalds为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软 ...
- 谈谈对IOC及DI的理解与思考
一.前言 在实际的开发过程中,我们经常会遇到这样的情况,在进行调试分析问题的时候,经常需要记录日志信息,这时可以采用输出到控制台. 因此,我们通常会定义一个日志类,来实现输出日志. 定义一个生成验证的 ...
- Prometheus联邦
联邦使得一个 Prometheus 服务器可以从另一个 Prometheus 服务器提取选定的时序. 1. 使用场景 Prometheus 联邦有不同的使用场景.通常,联邦被用来实现可扩展的 Prom ...
- Golang+Protobuf+PixieJS 开发 Web 多人在线射击游戏(原创翻译)
简介 Superstellar 是一款开源的多人 Web 太空游戏,非常适合入门 Golang 游戏服务器开发. 规则很简单:摧毁移动的物体,不要被其他玩家和小行星杀死.你拥有两种资源 - 生命值(h ...
- 盘点 Django 展示可视化图表的多种方式(建议收藏)
1. 前言 大家好,我是安果! 使用 Django 进行 Web 开发时,经常有需要展示图表的需求,以此来丰富网页的数据展示 常见方案包含:Highcharts.Matplotlib.Echarts. ...