python3 TensorFlow訓練數據集准備 下載一些百度圖片 入門級爬蟲示例


從百度圖片下載一些圖片當做訓練集,好久沒寫爬蟲,生疏了。沒有任何反爬,隨便抓。

網頁:

 

 動態加載,往下划會出現更多的圖片,一次大概30個。先找到保存每一張圖片的json,其對應的url:

 

 打開調試,清空,然后往下划。然后出現:

 

 點擊左側的鏈接,出現右邊的詳細信息,對應的就是URL。對這個url做請求即可。以下是代碼:

# -*- coding: utf-8 -*-
# import tensorflow as tf
# import os
# import numpy as np
import requests
import my_fake_useragent as ua
import re
import random

# 藍色背景
def blue_print(*s, end='\n'):
    for item in s:
        print('\033[46m {} \033[0m'.format(item), end='')
    print(end=end)


# 高亮,綠色字體,紅色背景
def green_print(*s, end='\n'):
    # print('\033[1m {} \033[0m'.format(s), end=end)
    for item in s:
        print('\033[1;32;41m {} \033[0m'.format(item), end='')
    print(end=end)


class download_data():
    def __init__(self):
        # 初始化常用參數
        # 請求頭
        self.user_agent = ua.UserAgent()
        # 正則用於匹配響應內容中的圖片url
        self.pattern_url = r'"thumbURL":"(.*?)"'


    # 爬蟲:從網上下載數據集
    def get_url_from_internet(self, url):
        for i in range(5):
            try:
                # print(self.user_agent.random())
                res = requests.get(url, headers={'User-Agent': self.user_agent.random()}, timeout=5)
                # print(res.text)
                url_list = re.findall(self.pattern_url, res.text)
                # print(url_list)
                return url_list
            except:
                pass

        # 這里可以將請求失敗的url存入數據庫,防止數據丟失
        return None

    def write_img(self, url):
        for i in range(3):
            try:
                # 真正下載圖片數據的,就這兩行代碼
                res = requests.get(url, headers={'User-Agent': self.user_agent.random()}, timeout=5)
                img = res.content
                # print(img)

                # 將響應內容寫入本地*.jpg文件中
                with open('dataset/monkey{}.jpg'.format(random.randint(10 ** 8, 10 ** 9)), 'wb') as f:
                    f.write(img)
                print('monkey{} 下載完成'.format(random.randint(10 ** 8, 10 ** 9)))
                return
            except:
                pass

        # 這里可以將請求失敗的url存入數據庫,防止數據丟失
        return None

if __name__ == '__main__':
    tt = download_data()
    for page in range(0, 1000, 30):
        # 構造url,設置range的右邊界越大,下載的圖片就越多
        url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result\
            &queryWord=%E7%8C%B4%E5%AD%90+%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=\
            &hd=&latest=&copyright=&word=%E7%8C%B4%E5%AD%90+%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=\
            &istype=&qc=&nc=&fr=&expermode=&force=&pn={}&rn=30&gsm=&1572502599384='.format(page)
        url_list = tt.get_url_from_internet(url)
        if url_list:
            for each_url in url_list:
                tt.write_img(each_url)

什么都不打印看着不舒服,隨便打印一些結果出來:

 

 文件夾:

 

用網上的圖片作訓練集,而且還是自己抓的,效果估計不會太好。先用着看。自己手動將質量差的圖片刪一刪。

11-19

有時候會遇到一點點反爬,響應碼403,在headers中添加 "referer": "https://image.baidu.com"即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM