首页 > 编程知识 正文

Python爬虫爬取网页图片,利用Python批量爬取网页图片

时间:2023-05-03 16:46:42 阅读:13632 作者:6

让我大致谈谈想法和步骤

一.网络分析

1、输入关键词进行搜索,得到瀑布格式显示的图像。 我们爬的不是这样的图,点击后分辨率为960*720的图像,所以也会获取各个图像的页面。

查看图像地址,例如https://cdn.pix abay.com/photo/2017/06/04/12/31/sea-2370936 _ 960 _ 720.jpg。 匹配2017/06/04/12/31/sea-2370936部分即可

锁定一张图像

2、在一页所有图像的源代码中,用正则表达式匹配各具体图像的信息。 web源代码区分前十几个图像代码和后一个,一致时要区分

re.com pile (r ' img src set=' https://cdn.pix abay.com/photo ).*? () ).*? (__340.*? ',re.S )

re.com pile (r ' data-lazy-srcset=' https://cdn.pix abay.com/photo ), () ).*? (__340.*? ',re.S )

二.代码功能

1、允许输入关键词自动搜索图像

2、显示检索关键字图像总张数和总页数

3、可以指定开始下载的页码和下载的页数

3、下载完成后,显示下载和下载成功的失败图像的数量(此处使用全局变量) ) ) ) )。

三.文件保存

正常的文件操作

因为图像是二进制格式,所以用‘WB’写入文件

我写的可能不太清楚

我建议去看原作者的报道: https://砖兰.智湖.com/p/26354353

原作者知乎专栏: https://珠兰.智湖.com/waking-up

importreimportrequestsimportos #定义了全局变量T_download_num和F_download_num,分别表示下载成功。 失败数量的globalt _ download _ numt _ download _ num=0globalf _ download _ numf _ download _ num=0defgetsource (URL ) ! ! ! ' (默认图片来源(URL ) :# )用于获取单张图像地址的专用函数try:r=requests.get(URL ) r.raise_for_status ) ) ) 65 r.encoding=fgetpage_data(URL ) : result=pattern=re.com pile (r ' input name=' pagi ' type=' ) (d ).*? h1 class=' hide-xs ' style=' font-size 336013 px; color:#bbb; margin:0 19px'.*? (d ).*?re.S ) items=re.findall(pattern,result.text ) [0]print ) (n n )搜索到的图像共%d张,共%d页(% ) int ) items ) n int(items[1] ) defgetonepagephoto(URL ) : result=get souuphoto (获得解决方案) (__340.*? ',re.S ) pattern2=re.com pile (r ' data-lazy-srcset=' https://cdn.pix abay.com/photo ).*? () ).*? (__340.*?re.S ) items=re.findall(pattern1,result.text ) I=0foriteminitems 3360 try : photo _ u URL='

https://cdn.pixabay.com/photo/' + str(item[0]) + '-' + str(item[1]) + '_960_720.jpg' DownLoadOnePhoto(Photo_url,item) except: continue i = i + 1 items = re.findall(pattern2,result.text) for item in items: try: Photo_url = 'https://cdn.pixabay.com/photo/' + str(item[0]) + '-' + str(item[1]) + '_960_720.jpg' #这里因为下面的f.write触发异常也会触发异常,直接执行except里的语句,因此下面f.write后面的语句都将跳过 DownLoadOnePhoto(Photo_url,item) except: continuedef DownLoadOnePhoto(Photo_url,item): global T_download_num global F_download_num fpath = 'E:/python/Photo/' +str(item[1]) + '.jpg' print('正在下载图片......') result = getPhotoSource(Photo_url) if result == 'Photo wrong': F_download_num += 1 else: print('下载成功!') T_download_num += 1 E = os.path.exists(fpath) if not E: with open(fpath,'wb') as f: try: #result如果是str型,会触发异常,回到getOnePagePhoto(url)函数中for循环当中 f.write(result.content) except: print('图片下载失败!') else: print('图片已存在') #这条代码会因为f.write发生异常导致上面函数异常,直接执行except里continue,从而这句不执行 print(F_download_num,T_download_num)def main(): key = str(input('请输入搜索关键词(英文):')) url = 'https://pixabay.com/zh/photos/?min_height=&image_type=&cat=&q='+ key + '&min_width=&pagi=' num = int(input('请输入总共要搜索的页数:')) start_page = int(input('请输入开始搜索的页面:')) getPage_data(url) for i in range(start_page,start_page + num): new_url = url + str(i) getOnePagePhoto(new_url) print('nnn成功获取图片%d张,嘿嘿!' % T_download_num) print('%d张图片不知去向-_-!' % F_download_num)main()




















总结:

在写的过程中我遇到了一个问题,就是在代码f.wirte发生异常后,后面的代码没有执行。

经过一番查找才发现,原来是getOnePagePhoto(url)函数发生异常,执行了except中的continue,所以后面的代码都被跳过了



有一个多月没写爬虫了(因为那可恶的期末考试),最近重拾起来,发现还是有点生疏了,还得多写多练

最近也看了一些其他人写的项目,许多都写的很好也很有趣。自己也要慢慢学着写,这个爬虫也是模仿着来写的,能写出来感觉还是不错。


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。