鱼C论坛

 找回密码
 立即注册
查看: 3014|回复: 17

正则表达式匹配网页中图片地址问题

[复制链接]
发表于 2016-8-9 22:05:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 ddtufoer 于 2016-8-10 12:02 编辑

想抓取网页中jpg或png格式的图片,突击学习了一晚上正则表达式,还是搞不出来。求高手指点
python3,win7系统
代码是这样的:
  1. import re
  2. c='<table align="center"><tbody><tr><td><img class="imgResizeDesc" src="http://gi.esmplus.com/ardium1220/detail/1293_ArdiumColourLetter_Set_detail.jpg" /><br /></td></tr></tbody></table>'
  3. re1=r'https?://.*\.[jpg|png]'
  4. b=re.findall(re1,c)


  5. print(b)
复制代码

结果是这样的:
  1. ['http://gi.esmplus.com/ardium1220/detail/1293_ArdiumColourLetter_Set_detail.j']
复制代码

为什么后面少了pg两个字母?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-9 22:52:39 | 显示全部楼层

回帖奖励 +5 鱼币

re1=r'https?://.*\.(?:jpg|png)'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-9 23:28:04 | 显示全部楼层
SixPy 发表于 2016-8-9 22:52
re1=r'https?://.*\.(?:jpg|png)'

感谢大侠,又来救俺了!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-10 00:16:18 | 显示全部楼层

正则表达式怎样写不出现两次http

SixPy大侠帮解决了图片地址的正则表达式的问题。但是以下的代码会抓取到两个以上图片代码很近连在一起的链接。所以想请教一下以下的代码怎样改可以让http://只出现一次。盼望大侠出没~
python3 win7

  1. re1=r'https?://.*\.(?:jpg|png)'
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-10 06:52:07 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-10 07:52:59 | 显示全部楼层
ddtufoer 发表于 2016-8-10 00:16
SixPy大侠帮解决了图片地址的正则表达式的问题。但是以下的代码会抓取到两个以上图片代码很近连在一起的链 ...
  1. re1='<img[^>]*src="([^"]*)"'
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-10 10:39:24 | 显示全部楼层


再问下大侠把匹配的字符串长度控制在90以内怎么写?
  1. re1=r'src="(https?://.*\.(?:jpg|png)){0,90}"'
复制代码

这样没效果呀,该怎么写呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-10 10:44:46 | 显示全部楼层
ddtufoer 发表于 2016-8-10 10:39
再问下大侠把匹配的字符串长度控制在90以内怎么写?

这样没效果呀,该怎么写呢

你应该认真学习正则的基础知识
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-10 10:48:33 | 显示全部楼层
SixPy 发表于 2016-8-10 10:44
你应该认真学习正则的基础知识

你说的特别对,我特别惭愧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-10 10:54:51 | 显示全部楼层
SixPy 发表于 2016-8-10 10:44
你应该认真学习正则的基础知识

我现在给我媳妇做一个自动下截图片,自动切图的程序。自动切图部分已经弄出来了,下载图片功能也实现了,就卡在了正则搜索图片上。我昨天研究了一晚上,今天又弄了一上午搞不定。时间又很少,心情很痛苦。大侠你能再送我一趟到西天吗?我有时间的时候肯定会好好学习的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-10 10:59:22 | 显示全部楼层
ddtufoer 发表于 2016-8-10 10:54
我现在给我媳妇做一个自动下截图片,自动切图的程序。自动切图部分已经弄出来了,下载图片功能也实现了, ...

你把程序贴出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-10 11:01:52 | 显示全部楼层
SixPy 发表于 2016-8-10 10:59
你把程序贴出来
  1. import urllib.request
  2. import os
  3. import re
  4. import time
  5. from selenium import webdriver

  6. def url_open(url1):
  7.          req=urllib.request.Request(url1,headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36'})
  8.          response=urllib.request.urlopen(req)
  9.          a=response.read()
  10.          return a
  11.          


  12. #url='http://www.10x10.co.kr/shopping/category_prd.asp?itemid=1517740&disp=103103103&pRtr=fulldesign'
  13. url='http://www.1300k.com/shop/goodsDetail.html?f_sp=&f_goodsno=215023298934'
  14. #url='http://www.fishc.com'
  15. a=webdriver.Chrome()
  16. a.get(url)
  17. #time.sleep(30)
  18. c=a.page_source



  19. #re1=r'src="([https?://.*\.jpg|https?://.*\.png]{0,85})"'
  20. re1=r'src="(https?://.*\.(?:jpg|png)){0,85}"'
  21. imglist=re.findall(re1,c)
  22. print(imglist)

  23. os.mkdir('E:/test\\pic')
  24. os.chdir('E:/test\\pic')

  25. for n in imglist:
  26.          filename=n.split('/')[-1]
  27.          try:
  28.                   with open(filename,'wb') as f:
  29.                            img=url_open(n)
  30.                            f.write(img)
  31.          except Exception:
  32.                   pass
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-10 11:03:15 | 显示全部楼层
SixPy 发表于 2016-8-10 10:59
你把程序贴出来

我现在的问题是会匹配到
  1. 'http://img.1300k.com/common/2015/bullet_fmenu.png" width="1" height="8" alt="" /> <a href="http://www.1300k.com/company/main/main.html" target="_blank">&#49324;&#50629;&#51109;&#50504;&#45236;</a> <img src="http://img.1300k.com/common/2015/bullet_fmenu.png'
复制代码
这种东西,我想做一个长度限制在90个字符之内
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-10 11:32:31 | 显示全部楼层
ddtufoer 发表于 2016-8-10 11:03
我现在的问题是会匹配到这种东西,我想做一个长度限制在90个字符之内

没明白你想干嘛~
解释一下你的目的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-10 11:48:41 | 显示全部楼层
SixPy 发表于 2016-8-10 11:32
没明白你想干嘛~
解释一下你的目的


特别简单,我就想把一个网页里面全部的图片抓出来保存在电脑里。
但是
  1. re1=r'src="(https?://.*\.(?:jpg|png)){0,85}"'
复制代码
这个正则不仅会匹配到真正的图片,还会匹配到
  1. 'http://img.1300k.com/common/2015/bullet_fmenu.png" width="1" height="8" alt="" /> <a href="http://www.1300k.com/company/main/main.html" target="_blank">&#49324;&#50629;&#51109;&#50504;&#45236;</a> <img src="http://img.1300k.com/common/2015/bullet_fmenu.png'
复制代码
,我就想把这个正则表达式完善一下,让它能把图片抓出来。像上边抓出的字符串保存成图片大小就是0,而里面真正的两个图片却保存不下来了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-10 11:52:04 | 显示全部楼层
ddtufoer 发表于 2016-8-10 11:48
特别简单,我就想把一个网页里面全部的图片抓出来保存在电脑里。
但是这个正则不仅会匹配到真正的图片 ...

6楼
http://bbs.fishc.com/forum.php?mod=redirect&goto=findpost&ptid=74739&pid=2631299
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-10 12:02:37 | 显示全部楼层
SixPy 发表于 2016-8-10 11:52
6楼
http://bbs.fishc.com/forum.php?mod=redirect&goto=findpost&ptid=74739&pid=2631299

这个真是太神奇了,我看不懂,一试真好用。~~~~~~~大侠你真强!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-10 12:04:02 | 显示全部楼层
ddtufoer 发表于 2016-8-10 12:02
这个真是太神奇了,我看不懂,一试真好用。~~~~~~~大侠你真强!

看 8 楼~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-17 02:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表