鱼C论坛

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

正则表达式的应用

[复制链接]
发表于 2022-4-28 01:08:59 | 显示全部楼层 |阅读模式

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

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

x
求大神帮我看看我的正则表达式哪错了。。。  还有个问题就是关于图片的地址都在检查里的哪啊。。。有没有快速能找到的方法啊,我好几次看到的都是java 根本找不到jpg格式的。。。

import re
import urllib.request

def open_url(url):
    req = urllib.request.Request(url)
    req.add_header('user-agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36')

    response = urllib.request.urlopen(req)
    html = response.read().decode('GBK')

    return html

def get_img(html):
    捕获.JPG
    imagelist = re.findall(p,html)

    for each in imagelist:
        print (each)

if __name__ == '__main__':
    url = 'http://tieba.baidu.com/photo/p?kw=%E5%BC%A0%E9%9D%93%E9%A2%96&ie=utf-8&flux=1&tid=7679993387&pic_id=0a090ef3d7ca7bcbc5ea47fffb096b63f724a851&pn=1&fp=2&see_lz=1#!/pid0a090ef3d7ca7bcbc5ea47fffb096b63f724a851/pn1'
    get_img(open_url(url))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-4-28 01:09:37 | 显示全部楼层
我写的是 这样的。。
p = r'<img class="image_original_original".*src="[^"]+\.jpg"'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-28 11:26:35 | 显示全部楼层
是不是字符串前加了个r,所以失去了转义?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-28 11:41:05 | 显示全部楼层
因为这个页面是 js 动态渲染的,在页面源代码中没有 img 标签,主要都是 js 标签
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-28 13:14:53 | 显示全部楼层
isdkz 发表于 2022-4-28 11:41
因为这个页面是 js 动态渲染的,在页面源代码中没有 img 标签,主要都是 js 标签

那应该怎么快速找到啊。。 我发现现在的大部分页面都是这样的  只有js 。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-28 19:15:29 | 显示全部楼层
isdkz 发表于 2022-4-28 11:41
因为这个页面是 js 动态渲染的,在页面源代码中没有 img 标签,主要都是 js 标签

我最后导出来的html咋是这样的啊。。。。


import re
import urllib.request
import chardet

def get_encoding(res):
    coding_method = chardet.detect(res)['encoding']
    if coding_method == 'GB2312':
        coding_method = 'GBK'
    return coding_method

def open_url(url):
    req = urllib.request.Request(url)
    req.add_header('user-agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36')

    response = urllib.request.urlopen(req).read()
    cod = get_encoding(response)
    html = response.decode(cod)
    print(html)
    return html

def get_img(html):
    p = r'src="[^"]+\.jpg"'
    imagelist = re.findall(p,html)
    print(imagelist)
    for each in imagelist:
        filename = each.split('/')[-1]
        urllib.request.urlretrieve(each , filename , None)

if __name__ == '__main__':
    url = 'http://tieba.baidu.com/photo/p?kw=%E5%BC%A0%E9%9D%93%E9%A2%96&ie=utf-8&flux=1&tid=7679993387&pic_id=0a090ef3d7ca7bcbc5ea47fffb096b63f724a851&pn=1&fp=2&see_lz=1#!/pid0a090ef3d7ca7bcbc5ea47fffb096b63f724a851/pn1'
    get_img(open_url(url))

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

使用道具 举报

 楼主| 发表于 2022-4-28 23:52:46 | 显示全部楼层
isdkz 发表于 2022-4-28 11:41
因为这个页面是 js 动态渲染的,在页面源代码中没有 img 标签,主要都是 js 标签

def find_depth(res):
    soup = bs4.BeautifulSoup(res.text, 'html.parser') ##生成一个bs4的对象,或者使用lxml 解析
    depth = soup.find('span', class_='next').previous_sibling.previous_sibling.text ##找到class属性为next的span标签,的前前兄弟节点

这个previous_sibling.previous_sibling.text是啥意思啊。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-29 00:13:49 | 显示全部楼层
Victor0321 发表于 2022-4-28 23:52
def find_depth(res):
    soup = bs4.BeautifulSoup(res.text, 'html.parser') ##生成一个bs4的对象, ...

就是跟它并列一级的上上个标签的文本
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-29 02:02:54 | 显示全部楼层
isdkz 发表于 2022-4-29 00:13
就是跟它并列一级的上上个标签的文本

这个并列级 好像很难理解的样子。。。  我琢磨了半天
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-29 05:54:16 | 显示全部楼层
本帖最后由 isdkz 于 2022-4-29 05:55 编辑
Victor0321 发表于 2022-4-29 02:02
这个并列级 好像很难理解的样子。。。  我琢磨了半天


有那么难理解吗?同一个目录下的文件就属于并列级,

html 的标签跟目录也差不多,有上一级的,也有同一级的,

学过 html 的话就不难理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-29 11:29:05 | 显示全部楼层
isdkz 发表于 2022-4-29 05:54
有那么难理解吗?同一个目录下的文件就属于并列级,

html 的标签跟目录也差不多,有上一级的,也有 ...

emmm 主要确实还是没学过,,  我等下去度娘下 。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-30 12:53:04 | 显示全部楼层
Victor0321 发表于 2022-4-28 01:09
我写的是 这样的。。
p = r'

你要的是哪部分啊,为啥没()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-30 12:54:41 | 显示全部楼层
Victor0321 发表于 2022-4-28 01:09
我写的是 这样的。。
p = r'

可以去网页用正则工具自己弄一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 10:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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