Python网络图片爬虫—神经网络训练数据获取方法

Python网络图片爬虫—神经网络训练数据获取方法


最近因为要训练个灰度图转彩色图的神经网络,迫于数据的稀有性,就自学了python网络爬虫,并成功获取高质量10000张图片,在此和大家分享下自己的收获。

爬了百度图库的图片,但质量很差,后来发现一个超好的网站,叫pixabay,基于此网站写了个爬虫。


环境准备:网上说的beautifulsoup确实很好用,功能很强大,但经过一晚上折腾,发现re和requests两个库就足够了,而且正则匹配(re)真的很好用。

导入这两个库,如果还想导入beautifulsoup还需要pip install BeautifulSoup4安装一下,网上可以找到教程

import re
import requests
from bs4 import BeautifulSoup

打开网站搜索城市夜景,如图

Python网络图片爬虫—神经网络训练数据获取方法_第1张图片

每种类型图片最多50页,设置page和i,i用来表示图片数目,用于后面的图片保存

word = '夜景城市'
print('找到关键词:'+word+'的图片,现在开始下载')
page=1
i=1

requests.get(url)获取网页内容,防止中文乱码出现,用gbk2312来编码,将内容读入到html中,代码如图

url='https://stock.tuchong.com/search?term=%E5%A4%9C%E6%99%AF%E5%9F%8E%E5%B8%82&use=0&type=&layout=&sort=0&category=0&page='+str(page)+'&size=100&search_from=suggest&exact=0&platform=weili&tp=%E5%A4%9C%E6%99%AF&abtest=&royalty_free=0&option=&has_person=0&face_num=&gender=0&age=&racial='
print('当前页数',page)
result = requests.get(url)
result.encoding="gbk2312"
html=result.text

注意:这里的url格式中加了+str(page)+,是因为在html中没有发现下一页的url信息,它是用js动态实现换页的,这个地步也卡了我不少时间。

接下来,在html中去找图片存放的真正网址,打开html发现,如图

Python网络图片爬虫—神经网络训练数据获取方法_第2张图片

不像百度的网页信息,它根本就没有提供图片的原网址,只有imageId信息,仔细调查发现,图片的原网址格式类似,都是网址+id的形式,如下

http://p3.pstatp.com/weili/ms/235253543759380493.webp

所以只要从html中提取出imageid信息,再拼接成真正的原网址就可以了。

re.findall正则匹配所需要的信息,会返回一个存有所有id数字的list

pic_url=re.findall('"imageId":"(.*?)"',html,re.S)

接下来,就是拼接地址,将图片保存到本地

for each in pic_url:
    #拼接地址
    picadres=address+str(each)+'.webp'
    print ('正在下载第' + str(i) + '张图片,图片地址:' + picadres)
    try:
        #用requests.get获取图片,因为有延迟的问题,就设置timeout为10秒
        pic=requests.get(picadres,timeout=10)
        #无法连接就跳过错误,免得打断进程
    except requests.exceptions.ConnectionError :
        print('【错误】当前图片无法下载')
        continue
    except requests.exceptions.ReadTimeout:
        print("【错误】ReadTimeout")
        continue
    #保存到当地目录
    dir='F:/大三下/机器学习概论/爬虫图片/2/'+str(i)+'.jpg'
    fp=open(dir,'wb')
    fp.write(pic.content)
    fp.close()
    i+=1  

完整代码如下

import re
import requests
from bs4 import BeautifulSoup

word = '夜景城市'
print('找到关键词:'+word+'的图片,现在开始下载')
page=1
i=1
while page<51:
    url='https://stock.tuchong.com/search?term=%E5%A4%9C%E6%99%AF%E5%9F%8E%E5%B8%82&use=0&type=&layout=&sort=0&category=0&page='+str(page)+'&size=100&search_from=suggest&exact=0&platform=weili&tp=%E5%A4%9C%E6%99%AF&abtest=&royalty_free=0&option=&has_person=0&face_num=&gender=0&age=&racial='
    print('当前页数',page)
    result = requests.get(url)
    result.encoding="gbk2312"
    html=result.text
    pic_url=re.findall('"imageId":"(.*?)"',html,re.S)
    address='http://p9.pstatp.com/weili/ms/'
    for each in pic_url:
        #拼接地址
        picadres=address+str(each)+'.webp'
        print ('正在下载第' + str(i) + '张图片,图片地址:' + picadres)
        try:
            #用requests.get获取图片,因为有延迟的问题,就设置timeout为10秒
            pic=requests.get(picadres,timeout=10)
            #无法连接就跳过错误,免得打断进程
        except requests.exceptions.ConnectionError :
            print('【错误】当前图片无法下载')
            continue
        except requests.exceptions.ReadTimeout:
            print("【错误】ReadTimeout")
            continue
        #保存到当地目录
        dir='F:/大三下/机器学习概论/爬虫图片/3/'+str(i)+'.jpg'
        fp=open(dir,'wb')
        fp.write(pic.content)
        fp.close()
        i+=1    
    page+=1

效果如图

Python网络图片爬虫—神经网络训练数据获取方法_第3张图片

Python网络图片爬虫—神经网络训练数据获取方法_第4张图片

代码看似不多,但其中遇到了好多问题,才有了最后的成果,如果你喜欢这篇文章,请点个赞~有疑问可以随时问我

你可能感兴趣的:(实践)