python爬網獲取圖片到本地

通過python 可以將圖片直接下載到本地,或者將圖片/MP3/視頻等資源的Url 路徑和名稱保存在數據庫中 。

這裏使用的是mysql 數據庫。在上傳到mysql的時候發現報錯:

Field 'id' doesn't have a default value

id 是序號,作爲主鍵。 在 insert into 數據庫中的時候並沒加id ,id不是自動增量 ,所以報錯,解決辦法:

mysql> CREATE TABLE `table1` (
    -> `id` int(11) NOT NULL auto_increment,
    -> `create_time` datetime DEFAULT NULL,
    -> PRIMARY KEY (`id`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected

====================================================

mysql 上的數據:

========================================

下載到本地的資源:

===========================================

代碼:doutu_download.py

import requests
import re
import pymysql
import os
import urllib.request


# 連接數據庫
db = pymysql.connect(host="localhost", port=3306, db='mysqldb', user='user1', passwd='user1', charset='utf8')

# 創建遊標
cursor = db.cursor()
cursor.execute("select * from images")
# 打印查詢結果
# print(cursor.fetchall())


def get_ImagesList(page):
    """
    :param page:
    :return:
    """
    html = requests.get('http://www.xxxx.com/photo/list/?page={}'.format(page)).text
    reg = r'data-original="(.*?)".*?alt="(.*?)"'
    reg = re.compile(reg, re.S)       # 多行匹配
    images_List = re.findall(reg, html)
    
    for i in images_List:
        image_url = i[0]
        image_title = i[1]
        cursor.execute("insert into images(`name`, `imageUrl`) values('{}', '{}')".format(image_title, image_url))
        print("正在保存:%s" % image_title)
        db.commit()
    return images_List

"""
data-original="http://ww1.sinxx.cn/bmiddle/9150e4e5gy1gxxxxmj20f00esq3a.jpg" alt="強壯"
"""
file_path = "e:\\Temp\\doutu\\"
def download_image():
    for index in range(108, 1001):
        images_list = get_ImagesList(index)
        for i in images_list:
            image_url = i[0]
            image_title = i[1]
            try:
                if not os.path.exists(file_path):
                    os.makedirs(file_path)
                file_suffix = os.path.splitext(image_url)[1]
                # 拼接文件名
                file_name = "{}{}{}".format(file_path, image_title, file_suffix)
                print(file_name)
                # 利用 urlib.request.urlretrieve 下載圖片
                urllib.request.urlretrieve(image_url, filename=file_name)

            except Exception as e:
                print(e)

if __name__ == '__main__':
    download_image()



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章