鱼C论坛

 找回密码
 立即注册
查看: 2094|回复: 8

[已解决]帮帮孩子吧

[复制链接]
发表于 2021-5-11 16:03:46 | 显示全部楼层 |阅读模式
5鱼币
这是代码
#调用库
import urllib.request as u_request
import os,re,base64
import time
import requests

#伪装成浏览器访问
header = {}
header['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'

#打开网址
def url_open(url):

    html = requests.get(url,headers = header ).text #根据猜测来响应网页编码
    return html


#正则表达式寻找图片地址
def find_images(url):
    html = url_open(url)

    m = r'<img src="([^"]+\.jpg)"'
    match = re.findall(m,html)

    #打印图片地址
    for each in range(len(match)):
        match[each] = 'http:' + match[each]
        print(match[each])

    return match

#下载相关图片
def save_images(floder,img_addrs):
    for each in img_addrs:
        try:
            req = u_request.Request(each,headers = header)
            response = u_request.urlopen(req)
            cat_image = response.read()
            filename = each.split('/')[-1]
            with open(filename,'wb') as f:
                f.write(cat_image)
                #测试
            #print(each)

        except OSError as error:
                print(error)
                continue
        except ValueError as error:
                print(error)
                continue
#下载图片的数量
def web_link_encode(url,folder):
    for i in range(1,105):
        string_date = '20210425_'
        string_date = str(i)
        string_date = string_date.encode('utf-8')
        str_base64 = base64.b64encode(string_date)
        page_url = url + str_base64.decode() + '=#comments'
        print(page_url)
        img_addrs = find_images(page_url)
        save_images(folder,img_addrs)
        time.sleep(2)

#主函数
def download_the_graph(url):
    folder = 'graph'
    os.mkdir(folder)
    os.chdir(folder)
    web_link_encode(url,folder)

if __name__ == '__main__':
    url = 'http://jandan.net/girl/'
    download_the_graph(url)


我想问m = r'<img src="([^"]+\.jpg)"'这一句,为什么正则表达式这样写
就能匹配http://wx2.sinaimg.cn/mw600/0076BSS5ly8gqeiqg7b0fj318y0u0b29.jpg这种网址
最好解释的详细一点
最佳答案
2021-5-11 16:03:47
君苏依寂 发表于 2021-5-11 21:25
匹配的图片地址是http://wx2.sinaimg.cn/mw600/0076BSS5ly8gqeiqg7b0fj318y0u0b29.jpg
这种
m = r'

<img src= 是网页源代码就是这样写的啊  图片地址前边是啥这里就是啥啊,就是做个定位啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-11 16:03:47 | 显示全部楼层    本楼为最佳答案   
君苏依寂 发表于 2021-5-11 21:25
匹配的图片地址是http://wx2.sinaimg.cn/mw600/0076BSS5ly8gqeiqg7b0fj318y0u0b29.jpg
这种
m = r'

<img src= 是网页源代码就是这样写的啊  图片地址前边是啥这里就是啥啊,就是做个定位啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-11 18:46:54 | 显示全部楼层
([^"]+\.jpg)   先看 (),因为只有一个括号,表示取出符合括号内的链接,再往后看   ^" 表示非双引号    ,用[]框起来,再与+配合,表示 非双引号的元素出现一次或多次,
\. 表示点,    可以看https://tool.oschina.net/uploads/apidocs/jquery/regexp.html第一行, 最后以jpg结尾

总的来讲是:从src=" 开始取,如果满足 非双引号字符(至少出现一次),以.jpg结尾,则取出这个链接


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

使用道具 举报

 楼主| 发表于 2021-5-11 18:54:03 From FishC Mobile | 显示全部楼层
南归 发表于 2021-5-11 18:46
([^"]+\.jpg)   先看 (),因为只有一个括号,表示取出符合括号内的链接,再往后看   ^" 表示非双引号    ,用[] ...

src=什么意思
为什么是从src=开始呢,而不是前面的img
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-11 20:19:59 | 显示全部楼层
君苏依寂 发表于 2021-5-11 18:54
src=什么意思
为什么是从src=开始呢,而不是前面的img

这个应该要看网页源码了吧,你的图片地址肯定是src= “图片地址” 这样吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-11 21:25:37 From FishC Mobile | 显示全部楼层
代码小白liu 发表于 2021-5-11 20:19
这个应该要看网页源码了吧,你的图片地址肯定是src= “图片地址” 这样吧

匹配的图片地址是http://wx2.sinaimg.cn/mw600/0076BSS5ly8gqeiqg7b0fj318y0u0b29.jpg
这种
m = r'<img src="([^"]+\.jpg)"'
我对于
<img src=不理解,不明白这里为什么要这样写,你能帮帮我吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-12 12:41:03 | 显示全部楼层
君苏依寂 发表于 2021-5-11 21:25
匹配的图片地址是http://wx2.sinaimg.cn/mw600/0076BSS5ly8gqeiqg7b0fj318y0u0b29.jpg
这种
m = r'

换个马甲就不认识了?

字符串s="src=abc123.jpg" ,用正则,你怎么找出 abc123.jpg ?

—— re.findall(r'src=(abc[0-9]+.jpg)', s) 可否?
—— re.findall(r'src=([a-zA-Z0-9]+.jpg)', s) 可否?懂?

正则表达式,说白了就是:根据这个特殊的式子,一个字符一个字符地去匹配,看是否合适

具体匹配的语法和作用,自己去菜鸟教程看看吧。有很多例子。

评分

参与人数 1鱼币 +5 收起 理由
君苏依寂 + 5

查看全部评分

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

使用道具 举报

 楼主| 发表于 2021-5-12 14:35:44 From FishC Mobile | 显示全部楼层
阿奇_o 发表于 2021-5-12 12:41
换个马甲就不认识了?

字符串s="src=abc123.jpg" ,用正则,你怎么找出 abc123.jpg ?

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

使用道具 举报

 楼主| 发表于 2021-5-12 14:36:30 From FishC Mobile | 显示全部楼层
代码小白liu 发表于 2021-5-11 20:19
这个应该要看网页源码了吧,你的图片地址肯定是src= “图片地址” 这样吧

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 21:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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