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 上的数据:

python爬网获取图片到本地_第1张图片

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

下载到本地的资源:

python爬网获取图片到本地_第2张图片

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

代码: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()



 

你可能感兴趣的:(Python)