鱼C论坛

 找回密码
 立即注册
查看: 2077|回复: 12

[已解决]请各位大佬帮我看一下为什么原网页的链接爬下来会有变化,在学正则表达式

[复制链接]
发表于 2020-7-20 22:35:24 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 马钰乔布轩 于 2020-7-20 22:36 编辑

import urllib.request
import re

def open_url(url):
    req = urllib.request.Request(url)
    req.add_header = ('User-Agent','Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36')
    response = urllib.request.urlopen(req)
    html = response.read().decode('utf-8')
    return html

def get_image(html):
    p = r'<img src="([^"]+\.jpg)"'
    imagelist = re.findall(p,html)

    for each in imagelist:
        print(each)

url = "http://www.jimohezi.com/photo/show?id=889933"

print(open_url(url))
最佳答案
2020-7-21 01:30:31
本帖最后由 Twilight6 于 2020-7-21 01:32 编辑
马钰乔布轩 发表于 2020-7-21 01:27
谢谢大佬,但是爬出来的结果跟需要的还是不太一样,出来了两个部分,分别是['d8d7a098f9a16f74ab030de88f ...


这样呢?
r'\w\w3/720/\w{2}/(\w+)\.jpg'
你也可以改成这样:
r'pp3/720/.+?(\w+)\.jpg'
妹子图链接.jpg
网页链接.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-21 00:15:16 | 显示全部楼层


这应该和 print 函数打印字符串时候打印转义字符差不多的,比如说你用 print 函数打印 '\n' ,是不会显示 \n 字符的

但是起到的是换行的作用,而且\n \r \t 等,这些字符都属于不可见字符,直接打印时候是不可见的,但是都会行使各自字符的功能

所以这里应该可以这样比喻:'\n' 直接在控制台输出,显示还是本身,所以比喻成 "网站源码",而 print 打印后的结果就像"审核元素"显示的效果


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

使用道具 举报

 楼主| 发表于 2020-7-21 01:05:38 | 显示全部楼层
Twilight6 发表于 2020-7-21 00:15
这应该和 print 函数打印字符串时候打印转义字符差不多的,比如说你用 print 函数打印 '\n' ,是不会显 ...

谢谢大佬,看出网址的规律了,但是我遇到了一个问题,我想用re.findall()的方式爬取pp3/720/d8/d8d7a098f9a16f74ab030de88f0cddc3ad1af510.jpg 这样的字符串,这是我自己写的正则表达式,请您帮我看看问题出在哪里了,无法爬取

我的正则表达:
      r'\w\w3\/720\/\w\d\/\w+(/w+)/.jpg'
pp3/720/d8/d8d7a098f9a16f74ab030de88f0cddc3ad1af510.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-21 01:10:55 | 显示全部楼层
马钰乔布轩 发表于 2020-7-21 01:05
谢谢大佬,看出网址的规律了,但是我遇到了一个问题,我想用re.findall()的方式爬取pp3/720/d8/d8d7a09 ...



你单双斜杠有点混淆了

改成这样:
r'\w\w3/720/\w\d/(\w+)\.jpg'



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

使用道具 举报

 楼主| 发表于 2020-7-21 01:27:36 | 显示全部楼层
Twilight6 发表于 2020-7-21 01:10
你单双斜杠有点混淆了

改成这样:

谢谢大佬,但是爬出来的结果跟需要的还是不太一样,出来了两个部分,分别是['d8d7a098f9a16f74ab030de88f0cddc3ad1af510', 'a573253c4e780feb93767ac3821663285597852b'],我觉得您写的是对的,但是为什么匹配不了前面的pp3/720/d8/呢?而且为什么同样规则的东西,五个里面只能爬出两个呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-21 01:30:31 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-7-21 01:32 编辑
马钰乔布轩 发表于 2020-7-21 01:27
谢谢大佬,但是爬出来的结果跟需要的还是不太一样,出来了两个部分,分别是['d8d7a098f9a16f74ab030de88f ...


这样呢?
r'\w\w3/720/\w{2}/(\w+)\.jpg'
你也可以改成这样:
r'pp3/720/.+?(\w+)\.jpg'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-21 01:32:20 | 显示全部楼层

可以了!!!,大佬求教原理!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-21 01:33:32 | 显示全部楼层
马钰乔布轩 发表于 2020-7-21 01:32
可以了!!!,大佬求教原理!!!

你前面那个是先 \w\d 导致匹配的第二个必须是数字

改成 \w{2} 匹配两次即可

或者像我直接 .+? 匹配任意次且非贪婪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-21 01:34:27 | 显示全部楼层
Twilight6 发表于 2020-7-21 01:30
这样呢?

你也可以改成这样:

为什么咱们第一次那个不行呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-21 01:37:03 | 显示全部楼层
Twilight6 发表于 2020-7-21 01:33
你前面那个是先 \w\d 导致匹配的第二个必须是数字

改成 \w{2} 匹配两次即可

明白了,是我粗心了,并不是每一个后面都是数字,谢谢大神,我再去吧贪婪和非贪婪复习一下,万分感谢!!!

点评

客气了,早点休息吧~  发表于 2020-7-21 01:37
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-21 01:41:24 | 显示全部楼层
马钰乔布轩 发表于 2020-7-21 01:37
明白了,是我粗心了,并不是每一个后面都是数字,谢谢大神,我再去吧贪婪和非贪婪复习一下,万分感谢!! ...

好的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-21 10:33:36 | 显示全部楼层
马钰乔布轩 发表于 2020-7-21 01:37
明白了,是我粗心了,并不是每一个后面都是数字,谢谢大神,我再去吧贪婪和非贪婪复习一下,万分感谢!! ...

大神,我还有一点没理解,就是为什么匹配出来的数据是咱们需要的一部分呢?而不是全部呢。咱们需要的是
pp3/720/d8/d8.........jpg,但是匹配的结果却只有中间部分呢?例如这些['d8d7a098f9a16f74ab030de88f0cddc3ad1af510', '5ff0a1c763cb58842b8b2307ece255e98d33598b', '9a6037c27d84394ad3c92c9703ef6b8121c9fafd', 'a573253c4e780feb93767ac3821663285597852b', '6eaafbd0e81749e3539841f449780bc8fef31920']
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 20:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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