请各位大佬帮我看一下为什么原网页的链接爬下来会有变化,在学正则表达式
本帖最后由 马钰乔布轩 于 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))
这应该和 print 函数打印字符串时候打印转义字符差不多的,比如说你用 print 函数打印 '\n' ,是不会显示 \n 字符的
但是起到的是换行的作用,而且\n \r \t 等,这些字符都属于不可见字符,直接打印时候是不可见的,但是都会行使各自字符的功能
所以这里应该可以这样比喻:'\n' 直接在控制台输出,显示还是本身,所以比喻成 "网站源码",而 print 打印后的结果就像"审核元素"显示的效果
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 马钰乔布轩 发表于 2020-7-21 01:05
谢谢大佬,看出网址的规律了,但是我遇到了一个问题,我想用re.findall()的方式爬取pp3/720/d8/d8d7a09 ...
你单双斜杠有点混淆了
改成这样:r'\w\w3/720/\w\d/(\w+)\.jpg'
Twilight6 发表于 2020-7-21 01:10
你单双斜杠有点混淆了
改成这样:
谢谢大佬,但是爬出来的结果跟需要的还是不太一样,出来了两个部分,分别是['d8d7a098f9a16f74ab030de88f0cddc3ad1af510', 'a573253c4e780feb93767ac3821663285597852b'],我觉得您写的是对的,但是为什么匹配不了前面的pp3/720/d8/呢?而且为什么同样规则的东西,五个里面只能爬出两个呢? 本帖最后由 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'
Twilight6 发表于 2020-7-21 01:30
这样呢?
可以了!!!,大佬求教原理!!! 马钰乔布轩 发表于 2020-7-21 01:32
可以了!!!,大佬求教原理!!!
你前面那个是先 \w\d 导致匹配的第二个必须是数字
改成 \w{2} 匹配两次即可
或者像我直接 .+? 匹配任意次且非贪婪 Twilight6 发表于 2020-7-21 01:30
这样呢?
你也可以改成这样:
为什么咱们第一次那个不行呢? Twilight6 发表于 2020-7-21 01:33
你前面那个是先 \w\d 导致匹配的第二个必须是数字
改成 \w{2} 匹配两次即可
明白了,是我粗心了,并不是每一个后面都是数字,谢谢大神,我再去吧贪婪和非贪婪复习一下,万分感谢!!! 马钰乔布轩 发表于 2020-7-21 01:37
明白了,是我粗心了,并不是每一个后面都是数字,谢谢大神,我再去吧贪婪和非贪婪复习一下,万分感谢!! ...
好的! 马钰乔布轩 发表于 2020-7-21 01:37
明白了,是我粗心了,并不是每一个后面都是数字,谢谢大神,我再去吧贪婪和非贪婪复习一下,万分感谢!! ...
大神,我还有一点没理解,就是为什么匹配出来的数据是咱们需要的一部分呢?而不是全部呢。咱们需要的是
pp3/720/d8/d8.........jpg,但是匹配的结果却只有中间部分呢?例如这些['d8d7a098f9a16f74ab030de88f0cddc3ad1af510', '5ff0a1c763cb58842b8b2307ece255e98d33598b', '9a6037c27d84394ad3c92c9703ef6b8121c9fafd', 'a573253c4e780feb93767ac3821663285597852b', '6eaafbd0e81749e3539841f449780bc8fef31920']
页:
[1]