目录

前言

一、准备工作

二、网站信息

三、项目结构

四、代码实现步骤

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.texttime.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[@class="media media-3x2"]/a/@href')title_list = tree.xpath('/html/body/div[3]/div/div[2]/div//div[@class="media media-3x2"]/a/@title')return pic_urls_list, title_list

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

def Choosejj(title_list):number_list, n = [], 0print("这是本次爬取到的{}位小姐姐照片列表!".format(len(title_list)))while n < len(title_list):print(str(n+1) + '.' + title_list[n])n += 1print('请输入你要选择的小姐姐序号(输入回车结束输入):')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:breakprint('先生,请稍等。这就为你下载!')return number_list

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

def download_pics(pic_urls_list, title_list, number_list, headers, proxies):for number in number_list:number = number - 1pljj_pic_url = pic_urls_list[number]response = requests.get(url=pljj_pic_url, headers=headers, proxies=proxies)content = response.texttree = 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 = 1for img_url in img_urls:if img_url.split('.')[-1] == 'jpeg' or img_url.split('.')[-1] == 'jpg':print('正在下载第{}张照片'.format(n))n += 1file_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'}# 首先获取网页源码,返回contenturl = 'https://www.vmgirls.com/'content = get_content(url, headers, proxies)# print(content)# 从源码中找出每个图集的链接,返回urlspic_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库方法的使用,能够看懂网页源码定位所需内容位置。

爬虫项目之图文网站爬取图片相关推荐

  1. Java爬虫技术(一)普通网站爬取图片

    爬虫简单介绍 用户和网站服务器的操作如下 而爬虫需要做的是模拟仿照用户机,去向服务器发送请求数据,并接受响应数据,接着去解析数据,获得我们想要的数据 步骤大致分为 准备好要爬取的网址 定义爬虫的参数 ...

  2. python爬虫实践(1)爬取图片网站的高清壁纸

    python爬虫实践(1)爬取图片网站的高清壁纸 robots.txt协议: 爬取网站之前首先检查该站点根目录下是否存在robots.txt,如果存在,就会按照该文件中的内容来确定访问的范围:如果该文 ...

  3. 基于Spark的新闻推荐系统,包含爬虫项目、web网站以及spark推荐系统

    下载地址:https://download.csdn.net/download/ouyangxiaobai123/22174377 项目介绍: 基于Spark的新闻推荐系统,包含爬虫项目.web网站以 ...

  4. 爬虫项目3 - 股票数据爬取

    爬虫项目3 - 股票数据爬取 步骤 步骤 爬取股票名和股票列表,使用gucheng网进行爬取,网址: https://hq.gucheng.com/gpdmylb.html import reques ...

  5. Python爬虫学习(四)爬取图片素材网站素材

    效果 目标网站 图片网站 目标接口: # GET 请求 https://www.logosc.cn/api/so/get?page=0&pageSize=20&keywords=&am ...

  6. scrapy爬取动态网页_动漫爱好者必会的Scrapy爬虫框架之———— 多页爬取图片的信息...

    ok, 接下来我们要将怎样多页爬取图片的信息,以及如何下载图片. 知识点涉及到: 自动的翻页爬取 多个parse 之间的request 传递 构建图片爬取的通道 さあ!始めようぜ! 首先我们要爬取的网 ...

  7. python爬虫项目描述怎么写_爬虫项目咋写,爬取什么样的数据可以作为项目写在简历上?...

    看样子,主要目的是上简历 如果你想要爬虫的offer,那么你的项目应该有这么几个特征: 能用常用的框架,必要时有能力修改框架甚至自己写一个 熟悉多线程多进程分布式等,对爬虫任务调度有很好的解决办法 采 ...

  8. 网络爬虫---从千图网爬取图片到本地

    #图片爬虫,从千图网爬取图片到本地 import urllib.request import re import urllib.error for i in range(1,10):     page ...

  9. python桌面爬虫_爬虫项目实战十三:爬取zol桌面壁纸

    目标 爬取zol桌面壁纸,批量下载图片. 项目准备 软件:Pycharm 第三方库:requests,fake_useragent,re,lxml 网站地址:http://desk.zol.com.c ...

最新文章

  1. 国庆假期,推荐一款假日必备的看片神器!
  2. UIButton的重复点击
  3. 热插拔是什么?(Hot Swap hot-plugging hot plugging 带电插拔)USB热插拔
  4. javaone_JavaOne 2012:在JVM上诊断应用程序
  5. mysql网络异常_mysql运行过程中因网络或者数据库原因导致的异常
  6. Exchange2010应用地址列表
  7. 运用循环判断语句和列表的购物车程序
  8. JavaScript单线程运行机制与并发模型
  9. python节点之间的继承关系_python--继承关系
  10. 禁忌搜索算法求解TSP问题-python实现
  11. python关于pyaudio无法import的一系列问题
  12. 每周经典电路分析:采样保持放大器(1)
  13. linux上wps能云同步吗,WPS For Linux 6634 再次更新发布-文档也要上云
  14. MYSQL-中文检索匹配与正则表达式
  15. html5在线编辑器效果和源码
  16. 如何评价一个开源项目(一)--活跃度
  17. uni.showToast与uni.navigateTo同时使用问题
  18. matplotlib绘制折线图的柱状图
  19. 分布式链路追踪系统深入理解
  20. 诺奖以上,真相未满:追捕黑洞二百年

热门文章

  1. URL 相对路径和绝对路径
  2. 关于 SQL Error: 1146, SQLState: 42S02的解决方案
  3. https 请求是报错No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
  4. html鼠标事件有哪些,JavaScript事件类型:鼠标事件
  5. 数据库基本查询(函数)
  6. java循环语句实现自然数1~99的遍历求和
  7. 最近宽带升级成了200M速率,但是家里路由器不支持千兆宽带,该换什么样的?
  8. 高薪招聘能讲课的JAVA程序员,专、兼职均可
  9. openSUSE leap 42.3 添加HP Laserjet Pro M128fn打印机和驱动
  10. MongoDB深究之ObjectId