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中解析JSON并同时进行自定义编码处理实例
Feb 08 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
Jan 31 Python
Python异常对代码运行性能的影响实例解析
Feb 08 Python
Python实现从log日志中提取ip的方法【正则提取】
Mar 31 Python
python3+PyQt5自定义视图详解
Apr 24 Python
python SMTP实现发送带附件电子邮件
May 22 Python
python+opencv+caffe+摄像头做目标检测的实例代码
Aug 03 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
python2.7 安装pip的方法步骤(管用)
May 05 Python
使用Python OpenCV为CNN增加图像样本的实现
Jun 10 Python
python生成器推导式用法简单示例
Oct 08 Python
Python用dilb提取照片上人脸的示例
Oct 26 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
超外差式晶体管收音机的组装与统调
2021/03/01 无线电
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
2019/08/12 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
懒就要懒到底——鼠标自动点击(含时间判断)
2007/02/20 Javascript
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
2010/06/19 Javascript
js中function()使用方法
2013/12/24 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
学习使用bootstrap的modal和carousel
2016/12/09 Javascript
jquery表单插件form使用方法详解
2017/01/20 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
简谈创建React Component的几种方式
2019/06/15 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
使用PYTHON接收多播数据的代码
2012/03/01 Python
使用Python操作MySQL的一些基本方法
2015/08/16 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
2019/06/28 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
html table呈现个人简历以及单元格宽度失效的问题解决
2021/01/22 HTML / CSS
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
JAVA招聘远程笔试题
2015/07/23 面试题
大学生职业生涯规划书范文
2014/01/04 职场文书
学年末自我鉴定
2014/01/21 职场文书
优秀班组长事迹
2014/05/31 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书
2015年敬老院工作总结
2015/05/18 职场文书
小学班主任研修日志
2015/11/13 职场文书
2016年小学教师师德承诺书
2016/03/25 职场文书