鱼C论坛

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

[已解决]关于爬取网页贴吧的图

[复制链接]
发表于 2022-5-2 21:52:40 | 显示全部楼层 |阅读模式

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

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

x
>>> import urllib.request
>>> import re
>>> response = urllib.request.urlopen('https://tieba.baidu.com/p/1397681324')
>>> html = response.read().decode('utf-8')
>>> p = r'<img class="BDE_Image".*?src="([^"]*\.jpg)[^"]*".*?>'
>>> imglist = re.findall(p,html)
>>> for each in imglist:
        print(each)

       
https://imgsa.baidu.com/forum/w%3D580/sign=3c06220887d6277fe912323018391f63/d4ecea1f3a292df55bf91aa6bc315c6034a87349.jpg
https://imgsa.baidu.com/forum/w%3D580/sign=c35a268c4bfbfbeddc59367748f1f78e/4cf62badcbef7609d2c32e2c2edda3cc7dd99ebf.jpg
https://imgsa.baidu.com/forum/w%3D580/sign=e92e32b633fa828bd1239debcd1e41cd/d18dbaec08fa513d7387da6d3d6d55fbb2fbd952.jpg
https://imgsa.baidu.com/forum/w%3D580/sign=e70575b5afc379317d688621dbc5b784/6edfb9cc7cd98d109e1cbb82213fb80e7aec90bf.jpg
https://imgsa.baidu.com/forum/w%3D580/sign=d3525bb0c895d143da76e42b43f18296/4cd58b2397dda1443cc1db01b2b7d0a20df486bf.jpg
https://imgsa.baidu.com/forum/w%3D580/sign=0e36fbb20a55b3199cf9827d73a88286/3cdb971001e9390180ca3a8d7bec54e737d196bf.jpg
https://imgsa.baidu.com/forum/w%3D580/sign=3208d0e5d0160924dc25a213e406359b/7af12087e950352a42a992bb5343fbf2b3118bbf.jpg
https://imgsa.baidu.com/forum/w%3D580/sign=1b2ee48ac93d70cf4cfaaa05c8ddd1ba/d0508222720e0cf3b3daf8480a46f21fbe09aa52.jpg
https://imgsa.baidu.com/forum/w%3D580/sign=a60fc2b7970a304e5222a0f2e1c9a7c3/7d6f4ffbb2fb43163632ccc920a4462309f7d352.jpg
https://imgsa.baidu.com/forum/w%3D580/sign=a90b8d771bd5ad6eaaf964e2b1ca39a3/7499193b5bb5c9ea6edeb550d539b6003af3b352.jpg
https://imgsa.baidu.com/forum/w%3D580/sign=d31a9a5bbc3eb13544c7b7b3961fa8cb/22d2ed03918fa0ec5bead2be269759ee3d6ddb52.jpg
https://imgsa.baidu.com/forum/w%3D580/sign=fc80da6d3d6d55fbc5c6762e5d234f40/bd1d5b34970a304eff081649d1c8a786c9175c59.jpg
https://imgsa.baidu.com/forum/w%3D580/sign=b8d1da01b2b7d0a27bc90495fbee760d/33f298025aafa40f5e1e786eab64034f79f019ae.jpg
https://imgsa.baidu.com/forum/w%3D580/sign=ff80693c6c81800a6ee58906813433d6/e9ee9013632762d0d9db340ca0ec08fa503dc69a.jpg
https://imgsa.baidu.com/forum/w%3D580/sign=9f063901d158ccbf1bbcb53229d9bcd4/172e0bdfa9ec8a134fffc753f703918fa1ecc09a.jpg
https://imgsa.baidu.com/forum/w%3D580/sign=b15a74dbccbf6c81f7372ce08c3fb1d7/51ddb3ec8a1363274f085280918fa0ec09fac79a.jpg



【我的问题】

1、以上是返回的结果,数了一下共16张图,而实际上https://tieba.baidu.com/p/1397681324页面中分2页,仅第1页就不止16张图,而我想把2页所有的图片都爬取

2、r'<img class="BDE_Image".*?src="([^"]*\.jpg)[^"]*".*?>'有点看不懂呢,请大神指点下
最佳答案
2022-5-3 10:08:53

1、以上是返回的结果,数了一下共16张图,而实际上https://tieba.baidu.com/p/1397681324页面中分2页,仅第1页就不止16张图,而我想把2页所有的图片都爬取


第一页就 16 张图,这里你的标签获取的图片都是指的是用户上传的图片,不能把广告图片、表情图片算进去

想爬第二页,最简单的就是观察 url 变化,发现 url:

https://tieba.baidu.com/p/1397681324?pn=1

https://tieba.baidu.com/p/1397681324?pn=2

https://tieba.baidu.com/p/1397681324?pn=3

https://tieba.baidu.com/p/1397681324?pn=4

共四页,你只需要一个 for 循环 1~5 格式化到 url 最后就行了

r'<img class="BDE_Image".*?src="([^"]*\.jpg)[^"]*".*?>'有点看不懂呢,请大神指点下


<img class="BDE_Image".*?src="([^"]*\.jpg)[^"]*".*?> 红色部分都是原字符串,观察 html 标签发现的共同点,所以直接写死这些字符,其他的都是正则匹配符了

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

使用道具 举报

发表于 2022-5-2 22:05:59 | 显示全部楼层
去搜下 python爬取动态页面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-3 10:08:53 | 显示全部楼层    本楼为最佳答案   

1、以上是返回的结果,数了一下共16张图,而实际上https://tieba.baidu.com/p/1397681324页面中分2页,仅第1页就不止16张图,而我想把2页所有的图片都爬取


第一页就 16 张图,这里你的标签获取的图片都是指的是用户上传的图片,不能把广告图片、表情图片算进去

想爬第二页,最简单的就是观察 url 变化,发现 url:

https://tieba.baidu.com/p/1397681324?pn=1

https://tieba.baidu.com/p/1397681324?pn=2

https://tieba.baidu.com/p/1397681324?pn=3

https://tieba.baidu.com/p/1397681324?pn=4

共四页,你只需要一个 for 循环 1~5 格式化到 url 最后就行了

r'<img class="BDE_Image".*?src="([^"]*\.jpg)[^"]*".*?>'有点看不懂呢,请大神指点下


<img class="BDE_Image".*?src="([^"]*\.jpg)[^"]*".*?> 红色部分都是原字符串,观察 html 标签发现的共同点,所以直接写死这些字符,其他的都是正则匹配符了

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

使用道具 举报

 楼主| 发表于 2022-5-3 10:54:39 | 显示全部楼层
本帖最后由 lzb1001 于 2022-5-3 11:01 编辑
Twilight6 发表于 2022-5-3 10:08
第一页就 16 张图,这里你的标签获取的图片都是指的是用户上传的图片,不能把广告图片、表情图片算进 ...


感谢大神指点

1、该贴吧有2页,我算了下,光第1页就至少有40张美女图片啊,为什么只爬取到16张图呢?

2、正则表达式是否可以写成:r'<img class="BDE_Image" src=".*?\.jpg".*?>'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-3 10:59:11 | 显示全部楼层
lzb1001 发表于 2022-5-3 10:54
感谢大神指点

该贴吧有2页,我算了下,光第1页就至少有40张美女图片啊,为什么只爬取到16张图呢?



知道为什么了,刚刚试着登入了,发现贴吧登入后用户一页可以查看 30 多楼层

而未登入时,只能查看 15 左右的楼层,才导致图片显示数量的不同

而爬虫你没有设置 cookie ,就默认是没有登入的

所以我没登入看到的总页码是 4 页,登入后看到的是 2 页

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

使用道具 举报

 楼主| 发表于 2022-5-3 11:04:42 | 显示全部楼层
Twilight6 发表于 2022-5-3 10:59
知道为什么了,刚刚试着登入了,发现贴吧登入后用户一页可以查看 30 多楼层

而未登入时,只能查看 ...


1、哦,原来如此,我都没注意登陆问题呢。那是不是说登陆后只要爬取2页,未登陆需要爬取4页,当然只要 通过设置for循环。无论哪种情况,所有美女图片都会一张不落(广告图或gif除外),是这样吗?

2、正则表达式是否可以写成:r'<img class="BDE_Image" src=".*?\.jpg".*?>'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-3 11:11:03 | 显示全部楼层
lzb1001 发表于 2022-5-3 11:04
1、哦,原来如此,我都没注意登陆问题呢。那是不是说登陆后只要爬取2页,未登陆需要爬取4页,当然只要  ...


1、那是不是说登陆后只要爬取2页,未登陆需要爬取4页,当然只要 通过设置for循环。无论哪种情况,所有美女图片都会一张不落(广告图或gif除外),是这样吗?


嗯,是否有其余图片要看你正则会不会匹配其余没用的资源

2、正则表达式是否可以写成:r'<img class="BDE_Image" src=".*?\.jpg".*?>'


括号不能少,我们主要是为了匹配出图片的资源地址,即 url ,这里的括号补上后就是匹配到后留下的部分

  1. r'<img class="BDE_Image" src="(.*?\.jpg)".*?>'
复制代码

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

使用道具 举报

 楼主| 发表于 2022-5-3 21:27:49 | 显示全部楼层
Twilight6 发表于 2022-5-3 10:08
第一页就 16 张图,这里你的标签获取的图片都是指的是用户上传的图片,不能把广告图片、表情图片算进 ...

假设要任意输入百度贴吧地址,并不知道准确页数的话,应如何处理呢?主要从需求角度方便爬取用户,他无需先访问地址查询下页数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-3 22:09:27 | 显示全部楼层
lzb1001 发表于 2022-5-3 21:27
假设要任意输入百度贴吧地址,并不知道准确页数的话,应如何处理呢?主要从需求角度方便爬取用户,他无需 ...



观察网站,一般都会显示最后一页的页码,所以我们目标就是找到这个页码值,同样可以用正则匹配

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 10:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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