爬取YOLOv3训练所需图片

爬取YOLOv3训练所需图片

在我们使用yolov3我们自己的模型前,我们需要准备很多张图片,一个一个下载太麻烦了,所以使用简单的爬虫来解决这个问题


使用步骤

1.引入库

代码如下(示例):

import re
import requests

re库可以让我们使用正则表达式,这样子可以很快的找到我们要找的东西(解析网页)
requests库里面包含了爬虫的很多方法(不推荐使用urllib)

2.访问要爬取的网站

因为我是用yolov3训练识别口罩的,所以这里爬取的都为带有口罩的人
代码如下(示例):

url = 'https://699pic.com/jpg/daikouzhao.html'
headers = {"User-Agent":
"Mozilla/5.0 (compatible; MSIE 10.0; WindowsNT 6.1; WOW64; Trident/6.0; QQBrowser/7.7.24962.400)"}
 #将python包装成浏览器,防止被防爬。这个可以在自己电脑里面的浏览器里面查到,右击网页空白地方,选择检查(同样查看源代码也是必须的)...进入下图中的页面。这个工具好像是叫抓包工具
 html = requests.get(url=url, headers=headers)
 #使用get方法进行访问,也有post方法,具体情况可以使用上面所说的抓包工具进行选择
 #<img alt="职业劳动者戴口罩抗疫复工高清图片" title="职业劳动者戴口罩抗疫复工图片下载" class="lazy" src="//static.699pic.com/images/blank.png" data-original="//img95.699pic.com/photo/50159/9753.jpg_wh300.jpg" data-original-srcset="//imgs.699pic.com/01/501/599/753/501599753.jpg!list2x.v1 2x" width="1062.3160892264" height="300" />
 findlink = re.compile(r'<img alt=.*?data-original="(?P<jpg>.*?)" .*?</a>', re.S)
 #正则表达式,爬虫时都使用惰性模式即 .*?(匹配尽可能多的字符),可根据上面的例子进行分析  
 htmllink = findlink.finditer(html.text)
 #在爬取返回的内容里面匹配上面的正则表达式
 for i in htmllink:
   print(i.group('jpg'))
   if len(i.group('jpg')) == 49:  #这里发现爬取的图片有些不符合要求就自己去掉了(好像爬的是广告的图)
       print(i.group('jpg'))

!在这里插入图片描述
这里面可以看到我们需要的东西,一般我们爬虫都是按照这个来伪装自己的。如果需要密码登录,我们可以使用cookies,有防盗链,我们就添加referer

3.将爬取的图片链接进行存储

在存储图片之前我们需要得到照片的内容,按照上述操作,我们得到了子连接,想要获取里面的内容我们就还需要访问图片的链接

       sonhtml = 'https:'+i.group('jpg')
       #爬取的子连接为//img95.699pic.com/photo/50157/5121.jpg_wh300.jpg,所以要访问的话要加上https(如果爬取的是http就要在get或post里面加参数verify=false)
       result = requests.get(url=sonhtml, headers=headers)
       jpg_name = sonhtml.split("/")[-1]
       #对文件进行命名,将连接进行划分,结果为5121.jpg_wh300.jpg
       with open(jpg_name, mode="wb") as f:
           f.write(result.content)
           #以二进制写入文件,图片是由二进制组成的
           print("下载成功")

4.综合爬取图片

上面的为爬取一页的图片,如果要爬很多呢?
我们对网址进行分析,下面都为同一页面的网址
url = ‘https://699pic.com/jpg/daikouzhao.html’
url = ‘https://699pic.com/soso/daikouzhao-complex------jpg—0–0.html’
经过尝试后发现下面链接的最后一位为页面数(其实正常情况理应如此)

def geturl():
    for m in range(1, 2):
        url = 'https://699pic.com/soso/daikouzhao-complex------jpg---0--'+str(m)+'.html'
        headers = {"User-Agent":
                       "Mozilla/5.0 (compatible; MSIE 10.0; WindowsNT 6.1; WOW64; Trident/6.0; QQBrowser/7.7.24962.400)"}
        findlink = re.compile(r'<img alt=.*?data-original="(?P<jpg>.*?)" .*?</a>', re.S)
        url = url
        html = requests.get(url=url, headers=headers)
        htmllink = findlink.finditer(html.text)
        for i in htmllink:
            # print(i.group('jpg'))
            if len(i.group('jpg')) == 49:
                #print(i.group('jpg'))
                sonhtml = 'https:' + i.group('jpg')
                result = requests.get(url=sonhtml, headers=headers)
                jpg_name = sonhtml.split("/")[-1]
                with open(jpg_name, mode="wb") as f:
                    f.write(result.content)
                    print("下载成功")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值