一、正则表达式是什么?
概念:
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
个人理解:
简单来说就是使用正则表达式来写一个过滤器来过滤了掉杂乱的无用的信息(eg:网页源代码…)从中来获取自己想要的内容
二、实战项目
1.爬取内容
获取上海所有三甲医院的名称并保存到.txt文件中
2.访问链接
上海三甲医院网站 link:https://yyk.99.com.cn/sanjia/shanghai/
3.正则表达式书写的灵感
进入网站查看本页面的源代码发现 :医院的名称都是放在一个
div class="province-box"> ...... /div>
盒子里我们只需要直接把这个盒子里面的数据过滤一下就行
正则表达式:
法一:
1.一级过滤 :
div class="province-box">(.*)div class="wrap-right">
开头是:div class="province-box"> (.*) 结尾是:div class="wrap-right">
2.二级过滤:
title="(.*[院心部])*)" 获取title=" " 里面的信息
法二:
优化后一次性过滤:
li>a href="/[^/].*/" rel="external nofollow" rel="external nofollow" target="_blank" title="(.*)">
贴图片
开头是:
结尾是:
4.项目源代码
import requests
import re
url = "https://yyk.99.com.cn/sanjia/shanghai/"
# 模拟浏览器的访问
headers ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) '
'Gecko/20100101 Firefox/87.0'}
res = requests.get(url,headers=headers)
if res.status_code == 200:
#1.获取网页源代码
raw_text = res.text
#2.正则表达式书写:
#2.2注意:正则表达式默认匹配的是一行 我们的源代码是多行匹配的要加另一个参数 re.DOTALL
#2.3正则法一:
#re.findall() 返回的是lsit集合 一次过滤
re_res = re.findall(r'div class="province-box">(.*)div class="wrap-right">', raw_text,re.DOTALL)
#re_res[0] 获取下标是的数据 二次过滤
res=re.findall(r'title="(.*[院心部])*)"',re_res[0])
#检查打印获取到的信息
print(res)
#2.4正则法二:
#(优化)不用二次过滤 一次过滤就解决了
# re_list = re.findall(r'li>a href="/[^/].*/" rel="external nofollow" rel="external nofollow" target="_blank" title="(.*)">', res.text)
#print(re_list)
# 写入文件中
read = open("上海医院名单", "w", encoding='utf-8')
for i in res:
read.write(i)
read.write("\n")
read.close()
else:
print("error")
项目目录:
部分结果:
python 正则表达式-提取图片地址
import os,sys,time,json,time
import socket,random,hashlib
import requests,configparser
import json,re
from datetime import datetime
from multiprocessing.dummy import Pool as ThreadPool
def getpicurl(url):
url = "http://www.mzitu.com/zipai/comment-page-352"
html = requests.get(url).text
pic_url = re.findall('img src="(.*?)"',html,re.S)
for key in pic_url:
print(key + "\r\n")
#print(pic_url)
getpicurl("http://www.mzitu.com/zipai/comment-pag.e-352")
输出结果:
python mmm.py
http://wx3.sinaimg.cn/mw1024/9d52c073gy1fsvu6578k1j20sg15nk4x.jpg
http://wx1.sinaimg.cn/mw1024/9d52c073gy1fsvu64q4lgj20j60nz0ua.jpg
http://wx1.sinaimg.cn/mw1024/9d52c073gy1fsvu67hhbaj20sg110toc.jpg
http://wx2.sinaimg.cn/mw1024/9d52c073gy1fsvu66bw56j20sg0zjtlr.jpg
http://wx1.sinaimg.cn/mw1024/9d52c073gy1fsvu65vvvtj20sg0mmtfc.jpg
http://wx2.sinaimg.cn/mw1024/9d52c073gy1fsvu66gtnzj20sg0zk48h.jpg
http://wx1.sinaimg.cn/mw1024/9d52c073gy1fsvu65q1qyj20sg11vtmo.jpg
http://wx3.sinaimg.cn/mw1024/9d52c073gy1fsvu64wgejj20e60iwtax.jpg
http://wx1.sinaimg.cn/mw1024/9d52c073gy1fsvu66a8xfj20lt0rptgw.jpg
http://wx4.sinaimg.cn/mw1024/9d52c073gy1fsnr6n7n66j20k00ozn52.jpg
http://wx1.sinaimg.cn/mw1024/9d52c073gy1fsnr6njhjyj20sg0zkn88.jpg
http://wx3.sinaimg.cn/mw1024/9d52c073gy1fsnr6n2zmyj20sg0ldten.jpg
总结
到此这篇关于Python如何利用正则表达式爬取网页信息及图片的文章就介绍到这了,更多相关Python正则表达式爬取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:- Python正则表达式中的量词符号与组问题小结
- Python正则表达式的应用详解
- 浅谈Python中的正则表达式
- python正则表达式re.search()的基本使用教程
- python通过re正则表达式切割中英文的操作
- Python验证的50个常见正则表达式
- python re模块和正则表达式
- Python中正则表达式对单个字符,多个字符和匹配边界等使用
- python正则表达式re.match()匹配多个字符方法的实现
- 如何利用python正则表达式匹配版本信息
- python使用正则表达式匹配txt特定字符串(有换行)
- Python爬虫教程之利用正则表达式匹配网页内容
- python中使用正则表达式将所有符合条件的字段全部提取出来
- Python使用正则表达式实现爬虫数据抽取
- Python 通过正则表达式快速获取电影的下载地址
- python正则表达式 匹配反斜杠的操作方法
- 带你精通Python正则表达式