鱼C论坛

 找回密码
 立即注册
查看: 2511|回复: 7

正则日常问题

[复制链接]
发表于 2017-5-9 15:31:21 | 显示全部楼层 |阅读模式

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

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

x
  1. <input src="https://www1.si.to/2017/05/04/3e4d6d88e3cc9129e2d8a71bab9de13c.md.jpg" type="image" onclick="window.open('http://www.viidii.info/?action=image&amp;url=https%3A%2F%2Fwi.to%2Fi%2F6tITmS&amp;src='+encodeURIComponent(this.src));return false;">
复制代码


        这一段该怎么用正则找出来https://www1.si.to/2017/05/04/3e4d6d88e3cc9129e2d8a71bab9de13c.md.jpg
这是我自己写的
  1.         p = r'<input src="(.*?)" type='
  2.         img_addrs = re.findall(p, html)
复制代码

为什么找不出来呢
        希望大佬们指教

      谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-5-9 16:17:56 | 显示全部楼层
看图
2017-05-09_161628.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-5-9 17:14:22 | 显示全部楼层
本帖最后由 gopythoner 于 2017-5-9 17:16 编辑

我用你的正则匹配你上面的段落是能够匹配到这个链接的
这说明你正则是没有问题的,可能是你发的这个段落跟网页中的不一样,所以你匹配不到
至于有什么不一样,我大概能猜到,是因为原网页中有换行符和空格,跟你发的这个有点差别
为了避免换行符和空格的干扰,可以直接替换掉
看我给你改的,改动地方看备注
  1. p = r'<inputsrc="(.*?)"type='  #避免空格干扰,直接忽略空格
  2. img_addrs = re.findall(p, html.replace("\n","").replace(" ",""))  #避免换行符和空格干扰,直接替换掉
复制代码


当然,这样替换肯定对效率有点影响,影响多大我不清楚
如果你不替换的话,就要仔细看看原网页中的格式,到底哪里有换行符哪里有空格,你写对就能匹配上
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-9 23:28:00 | 显示全部楼层
gopythoner 发表于 2017-5-9 17:14
我用你的正则匹配你上面的段落是能够匹配到这个链接的
这说明你正则是没有问题的,可能是你发的这个段落跟 ...
  1. Traceback (most recent call last):
  2.   File "C:\Users\zz\Desktop\新建文件夹\cl.py", line 69, in <module>
  3.     downloading(pages)
  4.   File "C:\Users\zz\Desktop\新建文件夹\cl.py", line 57, in downloading
  5.     save_img(img_addrs)
  6.   File "C:\Users\zz\Desktop\新建文件夹\cl.py", line 35, in save_img
  7.     for each in img_addrs:
  8. TypeError: 'NoneType' object is not iterable
复制代码


出现了这个错误  您看下是什么情况
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-9 23:28:49 | 显示全部楼层
  1. Traceback (most recent call last):
  2.   File "C:\Users\zz\Desktop\新建文件夹\cl.py", line 69, in <module>
  3.     downloading(pages)
  4.   File "C:\Users\zz\Desktop\新建文件夹\cl.py", line 57, in downloading
  5.     save_img(img_addrs)
  6.   File "C:\Users\zz\Desktop\新建文件夹\cl.py", line 35, in save_img
  7.     for each in img_addrs:
  8. TypeError: 'NoneType' object is not iterable
复制代码



出现了这个错误  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-10 01:49:30 | 显示全部楼层
gopythoner 发表于 2017-5-9 17:14
我用你的正则匹配你上面的段落是能够匹配到这个链接的
这说明你正则是没有问题的,可能是你发的这个段落跟 ...
  1. import urllib.request
  2. import re
  3. import os
  4. path = os.getcwd()
  5. new_path = os.path.join(path, 'tupian')
  6. if not os.path.exists(new_path):
  7.     os.mkdir(new_path)#创建文件夹

  8.        
  9. def open_url(url):
  10.     headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36'}
  11.     req = urllib.request.Request(url, headers=headers)
  12.     response = urllib.request.urlopen(req)
  13.     html = response.read()

  14.     return html
  15. def get_p_addrs(url):
  16.     html = open_url(url).decode('utf-8', 'ignore')
  17.     p = r'<a href=".*?"> ([^"]+\.jpg)</a>'
  18.     page_addrs = re.findall(p, html)

  19.     return page_addrs       

  20.        
  21. def find_img(url):
  22.     html = open_url(url).decode('utf-8', 'ignore')
  23.     p = r'src="(.*?)" width='
  24.     img_addrs = re.findall(p, html.replace("\n","").replace(" ",""))  #避免换行符和空格干扰,直接替换掉
  25.     if img_addrs != []:
  26.         print('此次链接爬取中,共获得%d张图片' % len(img_addrs))
  27.     else:
  28.         print('# -*-没有找到任何图片')
  29.     print( img_addrs)

  30. def save_img(img_addrs):
  31.         os.chdir(new_path)
  32.         for each in img_addrs:
  33.                 filename = each.split('/')[-1]
  34.                 with open(filename, 'wb')as f:
  35.                         img = open_url(each)
  36.                         f,write(img)
  37. x = 1
  38.                        

  39. def downdloading():
  40.     url = 'http://i.niupic.com/images/2016/01/01/'
  41.        
  42.     page_addrs = get_p_addrs(url)
  43.     print('共获得%d个链接' %len(page_addrs))
  44.     for each in page_addrs:
  45.         new_page_url = url + each
  46.         global x
  47.         print('正在爬取第%d个链接' %x)
  48.         print(new_page_url)
  49.         x += 1
  50.         img_addrs = find_img(new_page_url)
  51.         save_img(img_addrs)
  52.                
  53. if __name__ =='__main__':
  54.         downdloading()
  55.        
复制代码




就这样子 老是匹配不出图片
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-10 01:51:10 | 显示全部楼层
  1. import urllib.request
  2. import re
  3. import os
  4. path = os.getcwd()
  5. new_path = os.path.join(path, 'tupian')
  6. if not os.path.exists(new_path):
  7.     os.mkdir(new_path)#创建文件夹

  8.        
  9. def open_url(url):
  10.     headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36'}
  11.     req = urllib.request.Request(url, headers=headers)
  12.     response = urllib.request.urlopen(req)
  13.     html = response.read()

  14.     return html
  15. def get_p_addrs(url):
  16.     html = open_url(url).decode('utf-8', 'ignore')
  17.     p = r'<a href=".*?"> ([^"]+\.jpg)</a>'
  18.     page_addrs = re.findall(p, html)

  19.     return page_addrs       

  20.        
  21. def find_img(url):
  22.     html = open_url(url).decode('utf-8', 'ignore')
  23.     p = r'src="(.*?)" width='
  24.     img_addrs = re.findall(p, html.replace("\n","").replace(" ",""))  #避免换行符和空格干扰,直接替换掉
  25.     if img_addrs != []:
  26.         print('此次链接爬取中,共获得%d张图片' % len(img_addrs))
  27.     else:
  28.         print('# -*-没有找到任何图片')
  29.     print( img_addrs)

  30. def save_img(img_addrs):
  31.         os.chdir(new_path)
  32.         for each in img_addrs:
  33.                 filename = each.split('/')[-1]
  34.                 with open(filename, 'wb')as f:
  35.                         img = open_url(each)
  36.                         f,write(img)
  37. x = 1
  38.                        

  39. def downdloading():
  40.     url = 'http://i.niupic.com/images/2016/01/01/'
  41.        
  42.     page_addrs = get_p_addrs(url)
  43.     print('共获得%d个链接' %len(page_addrs))
  44.     for each in page_addrs:
  45.         new_page_url = url + each
  46.         global x
  47.         print('正在爬取第%d个链接' %x)
  48.         print(new_page_url)
  49.         x += 1
  50.         img_addrs = find_img(new_page_url)
  51.         save_img(img_addrs)
  52.                
  53. if __name__ =='__main__':
  54.         downdloading()
  55.        
复制代码




就这样子 老是匹配不出图片
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-10 09:25:19 | 显示全部楼层
你这里的 p = r'src="(.*?)" width='正则怎么跟你之前发的不一样?
我打不开你这个网站的网页所以看不到图片提取方式
如果你确定是用这个正则的话,那你要把这个正则里面的空格也去掉,因为你按照我说的已经把网页的空格去掉了,所以正则也要去掉
改成 p = r'src="(.*?)"width='
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-4 17:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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