Python爬取手机壁纸图片

使用Python爬取图片。

1 说明

本文通过爬虫程序的编写,实现了一个简单易懂的爬虫程序,方便初学者理解,主要程序分为网页获取函数,以及保存下载函数,这就是所有爬虫程序的基本思想。(本文不涉及反爬,具体反爬程序以后再说),文章最后附上全部代码。
爬取目标网站为

https://www.3gbizhi.com

此网站没有反爬,图片质量也很好,爬取时需加延时,不要给他们的服务器造成太大负担,且用且珍惜!!!

2 准备事项:

先pip安装以下命令


使用的第三方库

1.配置以下请求头,模拟自己是个浏览器

headers =  {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36 Edg/86.0.622.58',
        "Cookie": "UM_distinctid=1758c184bea97-0d217f1a4272e5-7d677f67-144000-1758c184beb5c8; CNZZDATA1255139604=1098251314-1604371519-%7C1604403769; Hm_lvt_3b19253d112290a9184293cf68a02346=1604373205,1604402882,1604407056; _uupv=3; Hm_lpvt_3b19253d112290a9184293cf68a02346=1604407260"
           }

2.通过分析网址,发现此网页的分类是根据url的名字变化,实现,因此,我们只需要将分类之后的文字作为参数传入get_parse_page函数中,就可以找到目标网页。

def get_parse_page(name):

        # name是你要搜索的关键词
        url = r'https://www.3gbizhi.com/%s'%(name)

        #1. 发送请求,获取相应
        response = requests.get(url, headers=headers)
        html = response.content.decode()
        # print(html)

        # 2.正则表达式解析网页
        results = re.findall('src="(.*?).238.390.jpg"', html) # 返回一个图片下载链接的列表
        pic_names = re.findall('alt="(.*?)"', html)  # 返回图片名字一个列表
        print(results)

        # 根据获取到的图片链接,把图片保存到本地
        save_to_txt(results, name, pic_names)

# 保存图片到本地

3.在获取到图片链接以及图片名字之后,进行下载,保存到本地指定的文件路径中,并进行命名。

def save_to_txt(results, name, pic_names):
    j = 0
    # 在当目录下创建文件夹
    if not os.path.exists('./' + name):
        os.makedirs('./' + name)
    # 下载图片
    for result in results:

        try:
            pic = requests.get(result, headers=headers)
            print(pic)
            print('正在保存第{}个'.format(j + 1))
            time.sleep(random.random())
        except:
            print('当前图片无法下载')
            j += 1
            continue
        # 把图片保存到文件夹
        file_full_name = './' + name + '/' + str(j) + '-' + pic_names[j] + '.jpg'
        with open(file_full_name, 'wb') as f:
            f.write(pic.content)

        j += 1

4.这是主函数

# 主函数
if __name__ == '__main__':

    name = "sjbz"#手机壁纸分类
    get_parse_page(name)
# 获取图片url连接
# 配置以下模块
import random
import requests
import re
import os
import time

headers =  {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36 Edg/86.0.622.58',
        "Cookie": "UM_distinctid=1758c184bea97-0d217f1a4272e5-7d677f67-144000-1758c184beb5c8; CNZZDATA1255139604=1098251314-1604371519-%7C1604403769; Hm_lvt_3b19253d112290a9184293cf68a02346=1604373205,1604402882,1604407056; _uupv=3; Hm_lpvt_3b19253d112290a9184293cf68a02346=1604407260"
           }

def get_parse_page(name):

        # name是你要搜索的关键词
        # pn是你想下载的页数
        url = r'https://www.3gbizhi.com/%s'%(name)

        # 发送请求,获取相应
        response = requests.get(url, headers=headers)
        html = response.content.decode()
        # print(html)

        # 2.正则表达式解析网页
        # "objURL":"http://n.sinaimg.cn/sports/transform/20170406/dHEk-fycxmks5842687.jpg"
        results = re.findall('src="(.*?).238.390.jpg"', html) # 返回一个列表
        pic_names = re.findall('alt="(.*?)"', html)  # 返回一个列表
        print(results)

        # 根据获取到的图片链接,把图片保存到本地
        save_to_txt(results, name, pic_names)

# 保存图片到本地
def save_to_txt(results, name, pic_names):
    j = 0
    # 在当目录下创建文件夹
    if not os.path.exists('./' + name):
        os.makedirs('./' + name)
    # 下载图片
    for result in results:

        try:
            pic = requests.get(result, headers=headers)
            print(pic)
            print('正在保存第{}个'.format(j + 1))
            time.sleep(random.random())
        except:
            print('当前图片无法下载')
            j += 1
            continue
        # 把图片保存到文件夹
        file_full_name = './' + name + '/' + str(j) + '-' + pic_names[j] + '.jpg'
        with open(file_full_name, 'wb') as f:
            f.write(pic.content)

        j += 1
# 主函数
if __name__ == '__main__':

    name = "sjbz"
    get_parse_page(name)

你可能感兴趣的:(Python爬取手机壁纸图片)