欢迎加入我们卧虎藏龙的python讨论qq群:729683466
●导 语 ●
最近重温了一遍《舌尖上的中国》
瞬间就被里面的美食吸引了
于是我就百度了一下这些美食
发现了好多“色香味”俱全的美食
然后我发现
这些图片其实可以用爬虫
下载到电脑里面啊!!
代码及相关资源获取
1:关注“python趣味爱好者”公众号,回复“ 美食”获取源代码。
效果演示
往期精选
????
开发工具
python3.6.4
第三方库:
argparse,os, re, sys, urllib,json,socket
讲解部分
一:目标网页
我们要爬取的对象是百度,也就是百度图库里面的美食图片。这就是百度图片的网址。
我们要输入关键词,然后搜索。
我们尝试着输入“美食”,然后搜索,看看网址会怎样变化。
可以看到,搜索美食以后,出现了很多美食的图片。然后当前的网址变成了这样子:
https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111111&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E7%BE%8E%E9%A3%9F&oq=%E7%BE%8E%E9%A3%9F&rsp=-1
“美食”这个关键词进入了这个网址之中,当然,由于编码格式的差异,在这里我们看不到“美食”这两个汉字。
二:爬取图片
我们先定义一个爬虫的类,下面是部分截图。这个类里面是爬虫所需的一些函数,例如发送请求,解析网页,存储图片之类的。
在爬取图片时,为了防止被网站识别成爬虫,我们需要伪造一个headers。
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
然后,我们用urllib里面的request里面的Request响url发送请求。
-
try:
-
time.sleep(
self.time_sleep)
-
-
-
req = urllib.request.Request(url=url, headers=
self.headers)
-
page = urllib.request.urlopen(req)
-
rsp = page.read()
-
except UnicodeDecodeError
as e:
-
print(e)
-
print(
'-----UnicodeDecodeErrorurl:', url)
如果我们的请求得到了服务器的回应,那么返回的网页信息就会存在req里面。然后我们解析这个网页。
有些时候,我们不能得到服务器的回应,那我们就需要做一下异常处理,用print打印出出现的错误。
三:保存图片
获得网页信息并且解析网页以后,我们就可以将图片保存到本地。我们专门定义了一个函数用来保存图片。首先判断当前文件夹里面有没有用来存图片的文件夹,如果有就跳过,如果没有,就新建一个文件夹。新建文件夹的函数就是os.mkdir。
部分保存图片代码如下:
-
filepath =
'./%s/%s' % (word, str(
self.__counter) + str(suffix))
-
urllib.request.urlretrieve(url, filepath)
-
if os.path.getsize(filepath) <
5:
-
print(
"下载到了空文件,跳过!")
-
os.unlink(filepath)
-
continue
-
except urllib.
error.HTTPError
as urllib_err:
-
print(urllib_err)
其中filepath就是图片应该保存的路径。如果出现了异常,就做一下异常处理。
前面说的都是这个crawler的定义,然后,再主函数中我们就可以实例化这个对象。代码就是这样:crawler = Crawler(args.delay)
实例化完成之后,调用其中的start函数,就可以开始爬取图片了。
crawler.start('美食', 10, 2, 30)
最后:
在实际的爬虫中,我们经常会发送请求后加一个延时,这样既可以减轻服务器的压力,也可以避免请求频率过高被服务器识别,毕竟,我们的目的是爬取数据,而不是要把对方的服务器搞崩。
作者|齐
编辑|齐
感谢大家观看
有钱的老板可打赏一下小编哦
扫描二维码
关注我们
QQ群:729683466
◰
参考来源
代码作者:kong36088
参考链接:https://github.com/kong36088/BaiduImageSpider
转载:https://blog.csdn.net/qq_42680814/article/details/109975209