鱼C论坛

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

正则日常问题

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

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

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

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

        这一段该怎么用正则找出来https://www1.si.to/2017/05/04/3e4d6d88e3cc9129e2d8a71bab9de13c.md.jpg
这是我自己写的
        p = r'<input src="(.*?)" type='
        img_addrs = re.findall(p, html)
为什么找不出来呢
        希望大佬们指教

      谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-9 16:17:56 | 显示全部楼层
看图
2017-05-09_161628.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

当然,这样替换肯定对效率有点影响,影响多大我不清楚
如果你不替换的话,就要仔细看看原网页中的格式,到底哪里有换行符哪里有空格,你写对就能匹配上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

出现了这个错误  您看下是什么情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


出现了这个错误  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

        
def open_url(url):
    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'}
    req = urllib.request.Request(url, headers=headers)
    response = urllib.request.urlopen(req)
    html = response.read()

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

    return page_addrs        

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

def save_img(img_addrs):
        os.chdir(new_path)
        for each in img_addrs:
                filename = each.split('/')[-1]
                with open(filename, 'wb')as f:
                        img = open_url(each)
                        f,write(img)
x = 1
                        

def downdloading():
    url = 'http://i.niupic.com/images/2016/01/01/'
        
    page_addrs = get_p_addrs(url)
    print('共获得%d个链接' %len(page_addrs))
    for each in page_addrs:
        new_page_url = url + each
        global x
        print('正在爬取第%d个链接' %x)
        print(new_page_url)
        x += 1
        img_addrs = find_img(new_page_url)
        save_img(img_addrs)
                
if __name__ =='__main__':
        downdloading()
        



就这样子 老是匹配不出图片
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

        
def open_url(url):
    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'}
    req = urllib.request.Request(url, headers=headers)
    response = urllib.request.urlopen(req)
    html = response.read()

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

    return page_addrs        

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

def save_img(img_addrs):
        os.chdir(new_path)
        for each in img_addrs:
                filename = each.split('/')[-1]
                with open(filename, 'wb')as f:
                        img = open_url(each)
                        f,write(img)
x = 1
                        

def downdloading():
    url = 'http://i.niupic.com/images/2016/01/01/'
        
    page_addrs = get_p_addrs(url)
    print('共获得%d个链接' %len(page_addrs))
    for each in page_addrs:
        new_page_url = url + each
        global x
        print('正在爬取第%d个链接' %x)
        print(new_page_url)
        x += 1
        img_addrs = find_img(new_page_url)
        save_img(img_addrs)
                
if __name__ =='__main__':
        downdloading()
        



就这样子 老是匹配不出图片
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-8 00:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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