python requests html格式图片打不开_Python 使用 requests_html 爬取豆瓣刘亦菲照片

这篇博客讲述了如何使用Python的requests_html库从豆瓣网站抓取刘亦菲的图片信息。作者首先找到图片的URL,然后通过分析URL模式找到了高清图片的地址。在过程中,发现了URL中'l'和'm'的区别,从而获取了高清图片。最后,作者实现了批量下载这些图片,并探讨了分页处理和图片清晰度的问题。
摘要由CSDN通过智能技术生成

最近要做一些羞羞的事情, 需要大量女神照片, 于是嘿嘿嘿

豆瓣刘亦菲主页, 呦西~2000多张, 刺激哦

安装所需要的库

pip install requests_html

二话不多说, 直接get一波

from requests_html import HTMLSession

sess = HTMLSession()

url = "https://movie.douban.com/celebrity/1049732/photos/"

resp = sess.get(url)

print(resp.text)代码输出刘亦菲照片页面

在控制台找到图片对应的元素标签图片对应的元素标签

根据标签拿到所有第一页的所有图片超链接

from requests_html import HTMLSession

sess = HTMLSession()

url = "https://movie.douban.com/celebrity/1049732/photos/"

resp = sess.get(url)

# 查找页面内class属性为cover的div

divs = resp.html.find('div.cover')

for div in divs:

# 就算只有一个元素依然返回的是列表

img = div.find('img')[0]

print(img.attrs['src'])查找第一页中所有图片地址

试着打开其中一个地址, 结果虽然是可以看到图片, 但貌似清晰度差了一点.... 高清大图需要登录才能看到... 试了下简单加个headers好像不行...so~~悲伤~~

我们先点进去一张图片看看清晰点的图片地址是啥样子的

# 清晰版

https://img3.doubanio.com/view/photo/l/public/p752033902.webp

# 模糊版

https://img1.doubanio.com/view/photo/m/public/p1204312987.jpg

第一反应是webp格式问题, 但是把模糊版换成webp后依然不够清晰

再次仔细看了下, 发现其中l和m的区别....难不成是衣服尺码??????

那我试试xl... 这年头不偏个科下个图片都麻烦xl和m的对比

ok, 到这一步就已经基本大功告成了, 其实我们第一步只需要拿到图片的名字就行, 按照名字再去拼接下载地址, 那怎么下载一张图片呢?

so ~~ 简单~~, 注意这里图片文件打开的模式为wb+, 是要以二进制格式写入文件的

from requests_html import HTMLSession

sess = HTMLSession()

url = "https://img1.doubanio.com/view/photo/m/public/p1204312987.jpg"

resp = sess.get(url)

path = './img.jpg'

with open(path, mode='wb+') as f:

f.write(resp.content)

至于分页的处理, 依次打开几个页面查看规律

第一页

https://movie.douban.com/celebrity/1049732/photos/

第二页

https://movie.douban.com/celebrity/1049732/photos/?type=C&start=30&sortby=like&size=a&subtype=a

第三页

https://movie.douban.com/celebrity/1049732/photos/?type=C&start=60&sortby=like&size=a&subtype=a

基本确定通过参数start控制分页数据

完整代码如下:

1, 通过循环遍历所有照片页面

2, 将每个页面中的图片名称保存在一个列表中

3, 遍历名称列表, 下载图片

from requests_html import HTMLSession

sess = HTMLSession()

def get_names(url):

resp = sess.get(url)

# 查找页面内class属性为cover的div

divs = resp.html.find('div.cover')

names = []

for div in divs:

# 就算只有一个元素依然返回的是列表

img = div.find('img')[0]

src = img.attrs['src']

names.append(src.split('/')[-1])

return names

def main():

image_names = []

for i in range(70):

url = f"https://movie.douban.com/celebrity/1049732/photos/?type=C&start={30 * i}&sortby=like&size=a&subtype=a"

image_names += get_names(url)

print(len(image_names))

for name in image_names:

url = f"https://img1.doubanio.com/view/photo/xl/public/{name}"

resp = sess.get(url)

with open(f'./image/刘亦菲/{name}', mode='wb+') as f:

f.write(resp.content)

main()感觉大部分图片清晰度依然不够...

基本上应该能用了, 感觉还是用搜索引擎找到的图片质量更好点....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值