网页爬虫抓取百度图片(来自《Python项目案例开发从入门到实战》(清华大学出版社郑秋生夏敏捷主编) )
优采云 发布时间: 2021-11-04 19:10网页爬虫抓取百度图片(来自《Python项目案例开发从入门到实战》(清华大学出版社郑秋生夏敏捷主编)
)
来自《Python项目案例开发从入门到实战》(清华大学出版社郑秋生、夏敏毅主编)爬虫应用-抓取百度图片
本文使用请求库爬取了一张网站的图片。博文前几章介绍了如何使用urllib库爬取网页。本文主要使用请求库抓取网页内容以及使用方法基本相同,只是请求方法比较简单
别忘了爬虫的基本思想:
1. 指定要爬取的链接然后抓取网站源码
2.提取你想要的内容,比如你想爬取图片信息,可以选择用正则表达式过滤或者使用提取
如何标记
3.循环获取要爬取的内容列表,保存文件
这里的代码和我博客前几章的区别(图片爬虫系列一)是:
1. requests 库用于提取网页
2.保存图片时,后缀不总是使用png或jpg,而是图片本身的后缀名
3.保存图片时,不要使用urllib.request.urlretrieve函数,而是使用文件读写操作保存图片
具体代码如下图所示:
1 # 使用requests、bs4库下载华侨大学主页上的所有图片
2 import os
3 import requests
4 from bs4 import BeautifulSoup
5 import shutil
6 from pathlib import Path # 关于文件路径操作的库,这里主要为了得到图片后缀名
7
8
9 # 该方法传入url,返回url的html的源代码
10 def getHtmlCode(url):
11 # 伪装请求的头部来隐藏自己
12 headers = {
13 'User-Agent': 'MMozilla/5.0(Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0'
14 }
15 # 获取网页
16 r = requests.get(url, headers=headers)
17 # 指定网页解析的编码格式
18 r.encoding = 'UTF-8'
19 # 获取url页面的源代码字符串文本
20 page = r.text
21 return page
22
23
24 # 该方法传入html的源代码,通过截取其中的img标签,将图片保存到本机
25 def getImg(page, localPath):
26 # 判断文件夹是否存在,存在则删除,最后都要重新新的文件夹
27 if os.path.exists(localPath):
28 shutil.rmtree(localPath)
29 os.mkdir(localPath)
30
31 # 按照Html格式解析页面
32 soup = BeautifulSoup(page, 'html.parser')
33 # 返回的是一个包含所有img标签的列表
34 imgList = soup.find_all('img')
35 x = 0
36 # 循环url列表
37 for imgUrl in imgList:
38 try:
39 # 得到img标签中的src具体内容
40 imgUrl_src = imgUrl.get('src')
41 # 排除 src='' 的情况
42 if imgUrl_src != '':
43 print('正在下载第 %d : %s 张图片' % (x+1, imgUrl_src))
44 # 判断图片是否是从绝对路径https开始,具体为什么这样操作可以看下图所示
45 if "https://" not in imgUrl_src:
46 m = 'https://www.hqu.edu.cn/' + imgUrl_src
47 print('正在下载: %s' % m)
48 # 获取图片
49 ir = requests.get(m)
50 else:
51 ir = requests.get(imgUrl_src)
52 # 设置Path变量,为了使用Pahtlib库中的方法提取后缀名
53 p = Path(imgUrl_src)
54 # 得到后缀,返回的是如 '.jpg'
55 p_suffix = p.suffix
56 # 用write()方法写入本地文件中,存储的后缀名用原始的后缀名称
57 open(localPath + str(x) + p_suffix, 'wb').write(ir.content)
58 x = x + 1
59 except:
60 continue
61
62
63 if __name__ == '__main__':
64 # 指定爬取图片链接
65 url = 'https://www.hqu.edu.cn/index.htm'
66 # 指定存储图片路径
67 localPath = './img/'
68 # 得到网页源代码
69 page = getHtmlCode(url)
70 # 保存图片
71 getImg(page, localPath)
注意,我们之所以判断图片链接是否以“https://”开头,主要是因为我们需要完整的绝对路径来下载图片,而要得到这个,我们需要查看原创网页代码,选择一张图片,点击html所在的代码,鼠标悬停,可以看到绝对路径,然后根据这个绝对路径设置需要添加的缺失部分,如下图: