最近要做一些羞羞的事情, 需要大量女神照片, 于是嘿嘿嘿
豆瓣刘亦菲主页, 呦西~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()感觉大部分图片清晰度依然不够...
基本上应该能用了, 感觉还是用搜索引擎找到的图片质量更好点....