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写爬虫,帮运营人员抓取过京东的商品品 ...
随机推荐
- ArrayList源码分析笔记
ArrayList源码分析笔记 先贴出ArrayList一些属性 public class ArrayList<E> extends AbstractList<E> imple ...
- 阿里的Easyexcel读取Excel文件(最新版本)
本篇文章主要介绍一下使用阿里开源的Easyexcel工具处理读取excel文件,因为之前自己想在网上找一下这个简单的立即上手的博客,发现很多文章的教程都针对比较旧的版本的Easyexcel,没有使 ...
- JavaScript快速上手
引入JavaScript项目 在html中 <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- java重写toString()方法
toString()方法是Object类的方法,调用toString()会返回对象的描述信息. 1)为什么重写toString()方法呢? 如果不重写,直接调用Object类的toString()方法 ...
- Linux 三剑客之 awk 实战详解教程
我们知道 Linux 三剑客,它们分别是:grep.sed.awk.在前边已经讲过 grep 和 sed,没看过的同学可以直接点击阅读,今天要分享的是更为强大的 awk. sed 可以实现非交互式的字 ...
- GCD and LCM HDU - 4497
题目链接:https://vjudge.net/problem/HDU-4497 题意:求有多少组(x,y,z)满足gcd(x,y,z)=a,lcm(x,y,z)=b. 思路:对于x,y,z都可以写成 ...
- C语言结构体及其内存布局
code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...
- ARFoundation - touch point坐标点测试
ARFoundation - touch point坐标点测试 本文目的是为了看一下Android手机上touch之后,对应的点相关信息,主要包括: 点的屏幕坐标,以左下角为原点: 点的viewpor ...
- 什么是事务?事务的四个特性(ACID)?并发事务带来哪些问题?事务隔离级别都有哪些?事务的传播特性
什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事物的四个 ...
- Redis实战篇(四)基于GEO实现查找附近的人功能
如果现在要开发一个功能: 要为一款交友App实现查找附近的人,并按距离进行排序. 让你来开发这个功能,你会如何实现? MySQL 不合适 你可能想到,把用户用户的经纬度坐标使用MySQL等关系数据库( ...