Python爬虫入门教程10:彼岸壁纸爬取
前言💨
前文内容💨
PS:如有需要 Python学习资料 以及 解答 的小伙伴可以加点击下方链接自行获取
2021.03.02更新说明一下💨
说了不是缩略图,硬是不信= =
缩略图都有1mb的大小嘛?
基本开发环境💨
-
Python 3.6 Pycharm
相关模块的使用💨
-
re requests
安装Python并添加到环境变量,pip安装需要的相关模块即可。
一、💥明确需求
二、💥网页数据分析
一步一步点击图片进去可以发现详情页的url地址是有由 图片ID 以及 图片分辨率 组成。 再次点击,之后可以看到图片的真实地址。如果你只是想要找一张壁纸图片的话,这样保存图片之后就高清的壁纸了。 如果是要爬取图片的话,在详情页的中是有图片链接的。 所以只需要在列表页中,获取图片的 ID 就可以了,因为我们爬取的本身就是 1920*1080的分辨率,所以这个分辨率的是固定的。只要获取 图片ID然后拼接url就可以了。
这里需要注意一个问题:
每页的数据当中,是有两个我们不需要的内容。 我们所需要的数据是附带 标题的,不需要的则是没有标题,所以可以根据这个进行一个判断。
三、💥代码实现
获取网页数据💦
def get_response(html_url): """获取网页数据""" headers = { User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 } response = requests.get(url=html_url, headers=headers) return response
获取每张壁纸的ID💦
def main(html_url): """获取图片ID""" response = get_response(html_url) selector = parsel.Selector(response.text) image_info = selector.css(.list ul li) for link in image_info: image_title = link.css(a::attr(title)).get() # 进行简单的判断,如果有标题就获取ID if image_title: id_info = link.css(a::attr(href)).get() # /desk/23177.htm image_id = id_info.replace(.htm, ).split(/)[-1]
获取每张壁纸的url地址💦
def get_image_url(image_id): """获取图片的真实url地址""" page_url = fhttp://www.netbian.com/desk/{image_id}-1920x1080.htm response = get_response(page_url) selector = parsel.Selector(response.text) image_url = selector.css(#endimg a::attr(href)).get() return image_url
保存壁纸💦
def save(image_url, title): filename = images\ + title + .jpg image_content = get_response(image_url).content with open(filename, mode=wb) as f: f.write(image_content) print(正在保存:, title)
当我写完代码,运行的时候发现了一个问题
图片是能保存下来,但是它乱码了,所以需要在获取网页数据的函数里面加一行代码
# 万能的转码方式 response.encoding = response.apparent_encoding
更新代码之后,标题变成了中文了,但是又出现新的问题了
每个标题后面都是带有 更新时间的,返回网页看一下源代码。 a 标签里面的 title 属性里面是带有更新时间,img标签里面的alt属性是没有更新时间的,所以我们要重新提取一下标题数据。
更改后:
def main(html_url): """获取图片ID""" response = get_response(html_url) selector = parsel.Selector(response.text) image_info = selector.css(.list ul li) for link in image_info: image_title = link.css(a::attr(title)).get() if image_title: title = link.css(a img::attr(alt)).get() id_info = link.css(a::attr(href)).get() # /desk/23177.htm image_id = id_info.replace(.htm, ).split(/)[-1]
这些壁纸还挺大的,翻页根据页码进行翻页就好了,关于多线程爬取的话,可以参考上篇的文章内容。
下一篇:
centos下安装python3详细教程