迫于无聊,又刚好正在学习python,就来记录一篇关于python爬取图片链接下载本地的入门文章...
主要用到的模块:
request
和 BeautifulSoup4
开发之前建议先看一下官方给出关于这两个模块的文档
开发环境:
- python3.6.6
- vscode
- node v8.10
不同的python版本在部分代码上可能会有差异,请务必核对好版本...
开发流程解析
第一步:需要通过request获取页面的源代码
response = requests.get(url, headers=header, timeout=30)
第二步:分析页面结构

通过上图发现,他的每一个img标签的class都是img-responsive lazy image_dta
那么我们就可以直接通过bs4的find_all属性将其取出...
datas = soup.find_all(
name="img", attrs={"class": "img-responsive lazy image_dta"})
因为find_all取出的是一个数组,那么我们就需要去进行循环读取每个img标签
for data in datas:
print("downloading:", data.attrs['data-original'])
request.urlretrieve(
data.attrs['data-original'], downPath+'\%s.jpg' % time.time())
这边用的是request.urlretrieve进行资源下载...
需要注意的是,一般来讲我们都是去获取图片的src属性,但是由于这个网站使用了图片延时加载,所以我们直接获取src的话就取到他默认的图片,这边我们可以看到img的data-original属性是包含了图片的路径的,所以我们就直接取data-original就可以了....
最后main方法执行...
if __name__ == '__main__':
pool = ThreadPool(4)
urls = [
"http://www.doutula.com/photo/list/?page={}".format(str(i)) for i in range(1, 3)]
pool.map(getImg, urls)
pool.close()
pool.join()
这边运用了线城池进行简单的代码优化,后面会加入代理池和队列进行优化。
最后附上两张效果图:


代码地址:python爬取表情包并下载到本地
如果代码有帮助到您,记得点个start哦~~~
网友评论