Python如何利用正则表达式爬取网页信息及图片


Posted in Python onApril 17, 2021

一、正则表达式是什么?

概念:

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

个人理解:

简单来说就是使用正则表达式来写一个过滤器来过滤了掉杂乱的无用的信息(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="(.*)">

贴图片

开头是:

Python如何利用正则表达式爬取网页信息及图片

结尾是:

Python如何利用正则表达式爬取网页信息及图片

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如何利用正则表达式爬取网页信息及图片

部分结果:

Python如何利用正则表达式爬取网页信息及图片

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之一个免费的实验室
Sep 14 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
May 25 Python
Python实现注册登录系统
Aug 08 Python
python email smtplib模块发送邮件代码实例
Apr 26 Python
python opencv实现旋转矩形框裁减功能
Jul 25 Python
selenium+python实现自动化登录的方法
Sep 04 Python
用xpath获取指定标签下的所有text的实例
Jan 02 Python
Python小程序 控制鼠标循环点击代码实例
Oct 08 Python
Win下PyInstaller 安装和使用教程
Dec 25 Python
Python遍历字典方式就实例详解
Dec 28 Python
Django nginx配置实现过程详解
Sep 10 Python
python破解同事的压缩包密码
Oct 14 Python
python中sys模块的介绍与实例
Apr 17 #Python
Python中os模块的简单使用及重命名操作
Apr 17 #Python
Python利器openpyxl之操作excel表格
Pytest实现setup和teardown的详细使用详解
pytest配置文件pytest.ini的详细使用
Apr 17 #Python
用Python简陋模拟n阶魔方
Python OpenCV快速入门教程
You might like
MySQL授权问题总结
2007/05/06 PHP
PHP实现MySQL更新记录的代码
2008/06/07 PHP
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
PHP实现文件上传下载实例
2016/10/18 PHP
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
node+vue实现用户注册和头像上传的实例代码
2017/07/20 Javascript
ES6正则表达式扩展笔记
2017/07/25 Javascript
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
layer弹出层取消遮罩的方法
2019/09/25 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
[01:21]DOTA2周边文化主题展 神秘商店火热开售
2017/07/30 DOTA
初步认识Python中的列表与位运算符
2015/10/12 Python
python文件名和文件路径操作实例
2017/09/29 Python
Python对HTML转义字符进行反转义的实现方法
2019/04/28 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
python异常处理和日志处理方式
2019/12/24 Python
使用Django清空数据库并重新生成
2020/04/03 Python
python实现四人制扑克牌游戏
2020/04/22 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
Python常用断言函数实例汇总
2020/11/30 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
介绍一下write命令
2014/08/10 面试题
先进集体获奖感言
2014/02/13 职场文书
商业房地产广告语
2014/03/13 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书