总是要手动去下载百度图片,你会不会觉得特别麻烦?那不妨学学用爬虫进行批量爬取,如此一来就能轻松把事情解决,既实用又高效!接下来会给你详细讲讲操作的方法。
导入相关库
在使用爬虫批量爬取百度图片之前,需要导入合适的库。Python的requests
库是很常用的,它能够帮助我们轻松发送HTTP请求,以此来获取网页内容。re
库可以用于处理正则表达式,这便于从网页中提取所需信息。有了这些库的支撑,后续爬取图片就有了基础。
安装这些库并不复杂,如果你使用pip
包管理工具,在命令行输入相应的安装命令就行。比如说安装requests
库,输入“pip install requests”,回车后就会自动下载安装。安装好这些库以后,就能为后续的爬取工作做好准备。
确定百度图片链接
要实现批量爬取,首先要确定百度图片的链接。要先打开百度图片搜索页面,接着输入想要搜索的关键词,此时浏览器地址栏里的链接就是初始链接。不过,这个链接一般只展示了部分图片,要是想获取更多图片,还需要找到能包含更多图片信息的链接。
我们持续下拉网页,让浏览器加载更多图片,在此过程中,观察浏览器地址栏链接的变化,从这些变化里找到能批量获取图片信息的完整链接,这个链接就像钥匙,有了它才能打开批量下载图片的大门。
import requests#爬虫库 import re#正则表达式库 import os#系统库 import time#时间库
编程进行解码
获取到的网页内容一般是经过编码的,要提取出我们想要的图片信息,就需要进行解码。百度图片页面通常采用UTF – 8编码,我们能用相应工具按照UTF – 8编码格式对网页内容解码。
url='http://image.baidu.com/search/index?tn=baiduimage&fm=result&ie=utf-8&word='#百度链接
在Python里,使用字符串的decode
方法,能轻松完成解码任务。把编码后的网页内容当作参数传入decode
方法,指定UTF – 8编码,就可以获得解码后的网页数据。这样,后续就能方便地从里面查找图片的具体信息了。
处理百度图片下拉
在百度图片搜索结果的起始页面里,所展示的图片数量极少,要是想得到更多图片,那就得模拟网页向下拉动的动作,这可以借助自动化测试工具来达成,像Selenium
这种工具,它能够模仿真实用户的操作,依靠这个来实现网页下拉功能。
# 解码def decode(url): for key, value in str_table.items(): url = url.replace(key, value) return url.translate(char_table)
使用Selenium
时,我们要编写代码设置下拉次数,还要编写代码设置下拉间隔。比如设置为每隔2秒下拉一次,总共下拉10次。这样网页就能加载出更多图片信息。借助这种方法,我们便能收集到更多想要批量下载的图片。
正则表达式算图片数量
正则表达式对爬虫帮助很大,利用它能算出网页里图片的大概数量。首先得剖析网页的HTML结构,找出图片信息所在的代码模式,然后编写对应的正则表达式。
运行正则表达式,用它对网页内容展开匹配,找出所有与图片信息相匹配的项,统计这些匹配项的数量,通过这一数量就能知晓网页里大致有多少张图片,这对我们后续确定爬取范围有着重要的指导意义。
def buildUrls(word): word = urllib.parse.quote(word) url = r"http://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&fp= result&queryWord={word}&cl=2&lm=-1&ie=utf-8&oe=utf-8&st=-1&ic=0&word={word}&face=0&istype=2nc=1&pn={pn}&rn=60" urls = (url.format(word=word, pn=x) for x in itertools.count(start=0, step=60)) return urls re_url = re.compile(r'"objURL":"(.*?)"')
正则表达式找图片url
关键在于找到图片的具体URL,这同样需要用到正则表达式。要分析网页代码,因为发现图片URL通常存在一定规则,所以要依据这些规则编写正则表达式。
用这个正则表达式去匹配前面解码后的网页内容,从中能找出所有图片的URL,这些URL就像通往图片的路径,依据这些路径就能精准下载到对应的图片。
totalnum = re.findall('(.*?)', string) print("百度图片"+totalnum[0])img_url_regex = '"thumbURL":"(.*?)",'#正则匹配式count=0#总共下载 的图片数index=0#链接后面的序号page=0#当前搜集的页while(1): strhtml=requests.get(url+str(index),headers=headers)#get方式获取数据 string=str(strhtml.text) print("已爬取网页")
创建文件路径下载
首先,要在本地硬盘新建一个文件夹,把它当作存储图片的目录。接着,使用编程工具里的文件操作功能,依照图片的URL,依次把图片下载到这个新建的目录中。这就是创建下载路径并下载图片的最后一步。
可以给下载的图片取名字,比如用排序的文件名。下载时,为防止网络波动导致下载失败,还能设置重试机制。这样就能把图片完整下载下来,实现批量获取百度图片的目的。
你在使用爬虫进行图片批量下载的时候,遇到过什么问题吗?欢迎在评论区留言分享,要是认为文章有作用,不要忘记点赞以及分享!
print("第"+str(page+1)+"页共收集到"+str(len(pic_url))+"张图片")