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)
6.脑图