python re正则匹配网页中图片url地址的方法


Posted in Python onDecember 20, 2018

最近写了个python抓取必应搜索首页http://cn.bing.com/的背景图片并将此图片更换为我的电脑桌面的程序,在正则匹配图片url时遇到了匹配失败问题。

要抓取的图片地址如图所示:

python re正则匹配网页中图片url地址的方法

首先,使用这个pattern

reg = re.compile('.*g_img={url: "(http.*?jpg)"')

无论怎么匹配都匹配不到,后来把网页源码抓下来放在notepad++中查看,并用notepad++的正则匹配查找,很轻易就匹配到了,如图:

python re正则匹配网页中图片url地址的方法

后来我写了个测试代码,把图片地址在的那一行保存在一个字符串中,很快就匹配到了,如下面代码所示,data是匹配不到的,然而line是可以匹配到的。

# -*-coding:utf-8-*-
import os
import re
 
f = open('bing.html','r')
 
line = r'''Bnp.Internal.Close(0,0,60056); } });;g_img={url: "https://az12410.vo.msecnd.net/homepage/app/2016hw/BingHalloween_BkgImg.jpg",id:'bgDiv',d:'200',cN'''
data = f.read().decode('utf-8','ignore').encode('gbk','ignore')
 
print " "
 
reg = re.compile('.*g_img={url: "(http.*?jpg)"')
 
if re.match(reg, data):
  m1 = reg.findall(data)
  print m1[0]
else:
  print("data Not match .")
  
print 20*'-'
#print line
if re.match(reg, line):
  m2 = reg.findall(line)
  print m2[0]
else:
  print("line Not match .")

由此可见line和data是有区别的,什么区别呢?那就是data是多行的,包含换行符,而line是单行的,没有换行符。我有在字符串line中加了换行符,结果line没有匹配到。

到这了原因就清楚了。原因就在这句话

re.compile('.*g_img={url: "(http.*?jpg)"')。

后来翻阅python文档,发现re.compile()这个函数的第二个可选参数flags。这个参数是re中定义的常量,有如下常量

re.DEBUG Display debug information about compiled expression.
re.I 
re.IGNORECASE Perform case-insensitive matching; expressions like [A-Z] will match lowercase letters, too. This is not affected by the current locale.
re.L 


re.LOCALE Make \w, \W, \b, \B, \s and \S dependent on the current locale.
re.M 


re.MULTILINE When specified, the pattern character '^' matches at the beginning of the string and at the beginning of each line (immediately following each newline); and the pattern character '$' matches at the end of the string and at the end of each line (immediately preceding each newline). By default, '^' matches only at the beginning of the string, and '$' only at the end of the string and immediately before the newline (if any) at the end of the string.
re.S 


re.DOTALL Make the '.' special character match any character at all, including a newline; without this flag, '.' will match anything except a newline.re.U re.UNICODE Make \w, \W, \b, \B, \d, \D, \s and \S dependent on the Unicode character properties database.New in version 2.0.
re.X 


re.VERBOSE This flag allows you to write regular expressions that look nicer and are more readable by allowing you to visually separate logical sections of the pattern and add comments. Whitespace within the pattern is ignored, except when in a character class or when preceded by an unescaped backslash. When a line contains a # that is not in a character class and is not preceded by an unescaped backslash, all characters from the leftmost such # through the end of the line are ignored.

这里我们需要的就是re.S 让'.'匹配所有字符,包括换行符。修改正则表达式为

reg = re.compile('.*g_img={url: "(http.*?jpg)"', re.S)

即可完美解决问题。

以上这篇python re正则匹配网页中图片url地址的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
linux下python抓屏实现方法
May 22 Python
Python判断字符串与大小写转换
Jun 08 Python
Django框架中render_to_response()函数的使用方法
Jul 16 Python
学习python类方法与对象方法
Mar 15 Python
Django的分页器实例(paginator)
Dec 01 Python
Python 反转字符串(reverse)的方法小结
Feb 20 Python
浅谈Python中的zip()与*zip()函数详解
Feb 24 Python
python之文件读取一行一行的方法
Jul 12 Python
python中open函数的基本用法示例
Sep 07 Python
详解Python中string模块除去Str还剩下什么
Nov 30 Python
python 列表推导和生成器表达式的使用
Feb 01 Python
python中threading和queue库实现多线程编程
Feb 06 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 #Python
python爬取指定微信公众号文章
Dec 20 #Python
在Django中URL正则表达式匹配的方法
Dec 20 #Python
python采集微信公众号文章
Dec 20 #Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
Dec 19 #Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
Dec 19 #Python
python3实现网络爬虫之BeautifulSoup使用详解
Dec 19 #Python
You might like
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
php结合正则获取字符串中数字
2015/06/19 PHP
Yii2中datetime类的使用
2016/12/17 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
JavaScript中的isXX系列是否继续使用的分析
2011/04/16 Javascript
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
jQuery表格列宽可拖拽改变且兼容firfox
2014/09/03 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
jQuery日程管理插件fullcalendar使用详解
2017/01/07 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
基于vue-simplemde实现图片拖拽、粘贴功能
2018/04/12 Javascript
解决vue中修改了数据但视图无法更新的情况
2018/08/27 Javascript
Element-ui中元素滚动时el-option超出元素区域的问题
2019/05/30 Javascript
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
遗传算法python版
2018/03/19 Python
python中的decorator的作用详解
2018/07/26 Python
pycharm运行程序时在Python console窗口中运行的方法
2018/12/03 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
加拿大当代时尚服饰、配饰和鞋类专业零售商和制造商:LE CHÂTEAU
2017/10/06 全球购物
英国比较机场停车场网站:Airport Parking Essentials
2019/12/01 全球购物
高级编程求职信模板
2014/02/16 职场文书
社区服务活动小结
2014/07/08 职场文书
答辩状格式范本
2015/05/22 职场文书
MySQL Server 层四个日志
2022/03/31 MySQL
Python使用DFA算法过滤内容敏感词
2022/04/22 Python