1.问题分析
我们观察下之前获得的图片,可以发现图片的清晰度不够。
放大之后比较模糊,这样的图叫做缩略图,那该如何获得高清海报图片呢?
为了找到高清图片,我们需要对网页结构进行分析,找到高清图对应的链接。
2.获取高清图片
replace()函数中要传入两个参数,第一个参数是字符串被替换的内容,第二个参数是要替换成的新内容。
现在我们需要使用replace()函数,将链接中的s_ratio_poster替换成m。
3.访问读取文件
4.批量获取
这里我们已经获取了网页的图片,如何批量获取:我们观察发现不同的页面基本相同,每次翻页的
时候start后面的参数变化25,我们使用for循环获得这个数字,但是这个循环获得的是int行的数据
我们把数字和其他部分拼接的时候要求是字符串,我们需要把他转化成为字符串
str函数可以帮助我们解决这个问题,str()就可以转化成为字符类型
这样我们就可以把之前的代码加上for循环,就从单个的url获取到很多url了
5.代码
这里是获取网页图片,没有引入循环,如果实现翻页,需要利用今天的把之前的单个url去掉,使用
循环和字符串的拼接重新设置,更改的部分如下所示:
# 使用import导入requests模块
import requests
# 使用from..import从bs4模块导入BeautifulSoup
from bs4 import BeautifulSoup
# 将电影URL地址,赋值给变量url
url = "https://movie.douban.com/top250"
# 将User-Agent以字典键对形式赋值给headers
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"}
# 将字典headers传递给headers参数,添加进requests.get()中,赋值给response
response = requests.get(url, headers=headers)
# 将服务器响应内容转换为字符串形式,赋值给html
html = response.text
# 使用BeautifulSoup()传入变量html和解析器lxml,赋值给soup
soup = BeautifulSoup(html, "lxml")
# 使用find_all()查询soup中class="pic"的节点,赋值给content_all
content_all = soup.find_all(class_="pic")
# for循环遍历content_all
for content in content_all:
# 使用find()查询content中的img标签,并赋值给imgContent
imgContent = content.find(name="img")
# 使用.attrs获取alt对应的属性值,并赋值给imgName
imgName = imgContent.attrs["alt"]
# 使用print输出imgName
print(imgName)
# 使用.attrs获取src对应的属性值,并赋值给imgUrl
imgUrl = imgContent.attrs["src"]
# TODO 使用replace()函数将链接中的s_ratio_poster替换成m,并赋值给imgUrlHd
imgUrlHd=imgUrl.replace("s_ratio_poster","m")
# TODO 使用requests.get()请求图片链接,赋值给imgResponse
imgResponse=requests.get(imgUrlHd)
# TODO 使用.content属性将响应消息转换成图片数据,赋值给img
img=imgResponse.content
# TODO 使用with语句配合open()函数以图片写入的方式打开文件
# 用格式化将图片名字和.jpg格式组合
# 打开的文件赋值为f
with open(f"{imgName}.jpg","wb") as f:
# TODO 使用write()将图片写入
f.write(img)