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写爬虫,帮运营人员抓取过京东的商品品 ...
随机推荐
- sanic-jwt 的使用
Sanic 是基于 Python 的一个支持高并发的异步 web 框架,sanic-jwt 则是针对Sanic 开发的一个基于 PyJWT 封装的 JWT 授权认证模块. sanic-jwt 项目主页 ...
- 设计模式之抽象工厂模式(Abstract Factory Pattern)
一.抽象工厂模式的由来 抽象工厂模式,最开始是为了解决操作系统按钮和窗体风格,而产生的一种设计模式.例如:在windows系统中,我们要用windows设定的按钮和窗体,当我们切换Linux系统时,要 ...
- JVM 中的异常
StackOverflowError 在 JVM 的栈中,如果线程要创建的栈帧大小大于栈容量的大小时,就会抛出 java.lang.StackOverflowError.比如下面的代码 public ...
- docker搭建redis集群和Sentinel,实现故障转移
0.引言 公司开发需要用到redis,虽然有运维自动搭建,还是记录下如何搭建redis集群和Sentinel. 采用的是vagrant虚拟机+docker的方式进行搭建. 搭建思路: 首先是借鉴下其他 ...
- CVE-2019-10758-Mongo-express-远程代码执行
漏洞分析 https://xz.aliyun.com/t/7056 漏洞简介 mongo-express是一款mongodb的第三方Web界面,使用node和express开发. 如果攻击者可以成功登 ...
- CVE-2017-12149-JBoss 5.x/6.x 反序列化
漏洞分析 https://www.freebuf.com/vuls/165060.html 漏洞原理 该漏洞位于JBoss的HttpInvoker组件中的 ReadOnlyAccessFilter 过 ...
- Python爬虫学习一------HTTP的基本原理
昨天刚买的崔大大的<Python3网络爬虫开发实战>,今天就到了,开心的读完了爬虫基础这一章,现记录下自己的浅薄理解,如有见解不到位之处,望指出. 1.HTTP的基本原理 ①我们经常会在浏 ...
- Go语言学习 学习资料汇总
从进入实验室以来,一直听小溪师兄说Go语言,但是第一学期的课很多,一直没有时间学习,现在终于空出来时间学习,按照我的学习习惯,我一般分为三步走 学习一门语言首先要知道学会了能干什么, 然后再把网上的资 ...
- [系统重装日志1]快速迁移/恢复Mendeley的文献和笔记
一时手贱把原先系统的EFI分区给删了,按照网上的教程还没有恢复成功,无奈之下只能重装系统,想想这么多环境和配置真是酸爽. 身为一个伪科研工作者,首先想到的是自己的文献和阅读笔记.我所使用的文献管理工具 ...
- Python爬虫系列之爬取美团美食板块商家数据(二)
今天为大家重写一个美团美食板块小爬虫,说不定哪天做旅游攻略的时候也可以用下呢.废话不多说,让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: requests模块: argpar ...