栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

爬虫项目之图文网站爬取图片

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

爬虫项目之图文网站爬取图片

目录

前言

一、准备工作

二、网站信息

 三、项目结构

四、代码实现步骤

1.引入库

2.实现抓取网站主页源码

3.实现抓取每一图集链接

4.生成图集列表供选择下载

5.通过所选内容进行下载

6.主函数整合

五、项目实现效果

总结


前言

网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。


一、准备工作
  • PyCharm 2021.3.1
  • Python 3.8及以上
  • 了解爬虫相关基础知识(xpath、request、lxml)

二、网站信息

该网站为完全免费的个人维护网站,希望大家练习时控制访问频率,以免造成网站损失。

 三、项目结构
  1. 获取网站主页源代码
  2. 分析源码得到每一图集的链接并制成列表
  3. 循环访问列表中的链接得到源码
  4. 从源码中找到下载链接

四、代码实现步骤

1.引入库
import time
import os
import requests
import random
from lxml import etree

2.实现抓取网站主页源码
def get_content(url, headers, proxies):
    response = requests.get(url=url, proxies=proxies, headers=headers)
    content = response.text
    time.sleep(random.random() * 3)
    return content

3.实现抓取每一图集链接
def get_pic_urls(content):
    tree = etree.HTML(content)
    pic_urls_list = tree.xpath('/html/body/div[3]/div/div[2]/div//div[@]/a/@href')
    title_list = tree.xpath('/html/body/div[3]/div/div[2]/div//div[@]/a/@title')
    return pic_urls_list, title_list

4.生成图集列表供选择下载
def Choosejj(title_list):
    number_list, n = [], 0
    print("这是本次爬取到的{}位小姐姐照片列表!".format(len(title_list)))
    while n < len(title_list):
        print(str(n+1) + '.' + title_list[n])
        n += 1
    print('请输入你要选择的小姐姐序号(输入回车结束输入):')
    while True:
        Q1 = input()
        if Q1 != '':
            if int(Q1) <= len(title_list) and int(Q1) not in number_list:
                number_list.append(int(Q1))
            elif int(Q1) > len(title_list) or int(Q1) <= 0:
                print('对不起,先生。没有{}号小姐姐哦!'.format(int(Q1)))
            elif int(Q1) in number_list:
                print('先生,你已经选过这位小姐姐了哦!')
        else:
            break
    print('先生,请稍等。这就为你下载!')
    return number_list

5.通过所选内容进行下载
def download_pics(pic_urls_list, title_list, number_list, headers, proxies):
    for number in number_list:
        number = number - 1
        pljj_pic_url = pic_urls_list[number]
        response = requests.get(url=pljj_pic_url, headers=headers, proxies=proxies)
        content = response.text
        tree = etree.HTML(content)
        img_urls = tree.xpath('/html/body/main/div/div[2]/div[1]/div/div/div[4]/div[3]/a/@href')
        time.sleep(random.random() * 3)
        print(img_urls)
        dir_name = title_list[number]
        if not os.path.exists(dir_name):
            os.mkdir(dir_name)
            print('为你创建《{}》图集'.format(dir_name))
        n = 1
        for img_url in img_urls:
            if img_url.split('.')[-1] == 'jpeg' or img_url.split('.')[-1] == 'jpg':
                print('正在下载第{}张照片'.format(n))
                n += 1
                file_name = img_url.split('/')[-1]
                response = requests.get(url=img_url, proxies=proxies, headers=headers, timeout=5)
                with open(dir_name + '/' + file_name, 'wb') as f:
                    f.write(response.content)
                    time.sleep(3)


6.主函数整合
def main():
    # 准备好请求头和代理池
    headers = {'User-Agent': 'Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)'}
    proxies = {'http': '47.106.105.236:80'}
    # 首先获取网页源码,返回content
    url = 'https://www.vmgirls.com/'
    content = get_content(url, headers, proxies)
    # print(content)
    # 从源码中找出每个图集的链接,返回urls
    pic_urls_list, title_list = get_pic_urls(content)
    # print(pic_urls_list)
    # print(title_list)
    number_list = Choosejj(title_list)
    # 循环访问链接,下载图片
    download_pics(pic_urls_list, title_list, number_list, headers, proxies)
    print("下载完毕啦!")

五、项目实现效果


总结

本文中的爬虫实例为初级爬虫,需要练习者了解爬虫相关的基础知识,会使用xpath方式匹配源码内容,了解request、lxml库方法的使用,能够看懂网页源码定位所需内容位置。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034357.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号