小编给大家分享一下Python怎么利用正则表达式爬取网页信息及图片,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
概念:
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
个人理解:
简单来说就是使用正则表达式来写一个过滤器来过滤了掉杂乱的无用的信息(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")
项目目录:
部分结果:
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.jpghttp://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怎么利用正则表达式爬取网页信息及图片”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。