Python 爬虫入门教程 10:彼岸壁纸爬取,成功入职字节跳动
Pycharm
re
requests
安装 Python 并添加到环境变量,pip 安装需要的相关模块即可。
彼岸的壁纸,在我觉得是真的好看。虽然可以免费下载,但是对于有条件的小伙伴,还是可以支持一下付费的,毕竟不贵,只需要 30 元就可以全站无限制下载了。
![](https://static001.geekbang.org/infoq/f3/f3c0398b627210566e63e270b2d7745c.png)
一步一步点击图片进去可以发现详情页的 url 地址是有由 图片ID
以及 图片分辨率
组成。
![](https://static001.geekbang.org/infoq/0d/0da9e206f213a9e8fa2ac145e90c36ae.png)
再次点击,之后可以看到图片的真实地址。如果你只是想要找一张壁纸图片的话,这样保存图片之后就高清的壁纸了。
![](https://static001.geekbang.org/infoq/75/750181d72f7ad0d44f6418140ac5745b.png)
如果是要爬取图片的话,在详情页的中是有图片链接的。
![](https://static001.geekbang.org/infoq/f8/f886dfa2fe84babb14151ab05b82182a.png)
所以只需要在列表页中,获取图片的 ID 就可以了,因为我们爬取的本身就是 1920*1080 的分辨率,所以这个分辨率的是固定的。只要获取 图片 ID 然后拼接 url 就可以了。
![](https://static001.geekbang.org/infoq/4d/4d1a2975de47544417f676606eefcc74.png)
每页的数据当中,是有两个我们不需要的内容。
![](https://static001.geekbang.org/infoq/6e/6e3a8cc517e6a01bbc2d1906d868fa30.png)
![](https://static001.geekbang.org/infoq/ca/ca4b55e54a05384132f2b747a8b2d132.png)
我们所需要的数据是附带 标题的,不需要的则是没有标题,所以可以根据这个进行一个判断。
获取网页数据
??
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 = f'http://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)
![](https://static001.geekbang.org/infoq/46/462ee27aa875a9d6dc0a466949995b50.png)
![](https://static001.geekbang.org/infoq/f1/f13605fc5e8303df191ca3f0a214edfe.png)
图片是能保存下来,但是它乱码了,所以需要在获取网页数据的函数里面加一行代码
万能的转码方式
response.encoding = response.apparent_encoding
![](https://static001.geekbang.org/infoq/a7/a74ca620f34c4bb6888d6f206d64adae.png)
(1)Python 所有方向的学习路线(新版)
这是我花了几天的时间去把 Python 所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
![](https://static001.geekbang.org/infoq/3d/3d6f0eec83eb2777c7496115ed8a2702.png)
(2)Python 学习视频
包含了 Python 入门、爬虫、数据分析和 web 开发的学习视频,总共 100 多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
![](https://static001.geekbang.org/infoq/3d/3d6f0eec83eb2777c7496115ed8a2702.png)
(3)100 多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
![](https://static001.geekbang.org/infoq/3d/3d6f0eec83eb2777c7496115ed8a2702.png)
评论