一,导入包文件

  • os:用于文件操作。这里是为了创建保存图片的目录
  • re:正则表达式模块。代码中包含了数据处理,因此需要导入该模块
  • request:请求模块。通过该模块向对方服务器发送请求获取数据包
  • lxml:通过etree模块中的xpath方法来获取html标签中的属性值或者文本内容
  • headers:根据使用的浏览器不同,headers也不同。这里主要是做一层ua伪装。不然对方服务器很容易就看出我们的请求不是一个正常的请求而是一个爬虫。
import os
import re
import time
import requests
from lxml import etree # 1.ua伪装
headers = {
'Cookie': 'UM_distinctid=183de2bde63bdd-0a9891aebfde0c-26021f51-15f900-183de2bde64211; __gads=ID=12c03794dd79a744-22151ed314d7003e:T=1665879761:RT=1665879761:S=ALNI_MayIUbqx7Eoqn3Rfhw4y3sdBWO8Hw; __gpi=UID=00000b63230f485e:T=1665879761:RT=1665879761:S=ALNI_MY73_h2FkMuU64S-R9TpNud-Rao2Q; _d_id=1ac93cdb5a0e86565209190f7f0314; CNZZDATA1281132404=586521712-1665876889-https%253A%252F%252Fwww.baidu.com%252F%7C1665983833',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'
}

二,程序入口和参数传值

  • main是程序的入口文件。代码的主要逻辑是因为我们发现,要访问的url网址,指定人物的第一页和第二页以后的地址不同。因此不能直接获取。所以需要做一个判断把两种情况都包含在内,这样就可以获取指定人物的所有分页中的图片。这个规律对这个网站的其他人物同样适用。
  • 将url传递给get_url函数中进行图片链接的获取并返回回来。返回值是links。这里存储着返回归来的图片地址。
  • 再将获取到的links数组传递给download函数进行处理和下载。
if __name__ == '__main__':
# 每个url链接的第一页的页码和第二页以后的页面不同因此这里需要做一个判断
for i in range(1, 2):
if i == 1:
url = 'http://www.cgtpw.com/xgmn/732.html'
else:
url = f'http://www.cgtpw.com/xgmn/732_{i + 1}.html' # 将url传递给get_url函数,并获得返回后的结果
links = get_url(url) # 将get_url返回后的结果传递给download函数
download(links)

  

三,获取图片链接

  • 注释中都细讲了每个步骤的意思,请参照注释。
# 2.获取url
def get_url(url):
all_link = [] # 用于存储获取到的链接

# 发送请求
r = requests.get(url)
time.sleep(1)
r.encoding = r.apparent_encoding # 解决代码中文乱码问题
html = etree.HTML(r.text)
# 获取链接指定目录页下的所有链接
pic_links = html.xpath('//div[@class="art-picBox"]/ul/li//a/@href')
# 去重
set_links = list(set(pic_links)) # 获取的链接不完整,因此需要加上链接头部拼接链接
for link in set_links:
index_urls = 'http://www.cgtpw.com' + link # 将拼接好的链接添加到all_link数组中并返回
all_link.append(index_urls)
return all_link

四,下载并保存图片

# 3.下载图片
def download(links):
# 遍历链接数组
for link in links:
# 通过正则表达式将链接中.html以外的部分提取出来。因为每个链接页跟之前一样第一页和第二页页码不同需要做处理
new_str_list = re.sub(r'\.html$', '', link) try:
# 为了存储图片要给图片编号因此这里用到了枚举
for num, i in enumerate(range(1, 19)):
num += 1 # 如果链接为第一页则直接用Link,反之则拼接一下页码
if i == 1:
url = link
else:
url = new_str_list + f'_{i}.html'
r = requests.get(url, headers=headers)
time.sleep(1) # 这里是为了防止中文乱码
r.encoding = r.apparent_encoding
# 提取链接中的所有图片和title名称
html = etree.HTML(r.text)
title = html.xpath('//div[@class="art-top"]/h1/text()')[0]
img_urls = html.xpath('/html/body/div[3]/div[2]//div[@class="artbody"]//img/@src') # 创建目录,如果目录不存在就创建目录文件夹。为了存储不同类型的照片
if not os.path.exists(f'美女图片/{title}'):
os.makedirs(f'美女图片/{title}') # 获取到每个人对应的所有地址后进行逐一遍历
for img in img_urls:
# 将图片以二进制码流的方式输出
pics = requests.get(img, headers=headers).content
# 存盘
with open(f'美女图片/{title}/{title}_{num}.jpg', 'wb') as f:
f.write(pics)
print(f'已下载>>{title}...编号:{num}')
# 关闭读写
f.close()
except Exception:
continue

五,完整代码

import os
import re
import time
import requests
from lxml import etree # 1.ua伪装
headers = {
'Cookie': 'UM_distinctid=183de2bde63bdd-0a9891aebfde0c-26021f51-15f900-183de2bde64211; __gads=ID=12c03794dd79a744-22151ed314d7003e:T=1665879761:RT=1665879761:S=ALNI_MayIUbqx7Eoqn3Rfhw4y3sdBWO8Hw; __gpi=UID=00000b63230f485e:T=1665879761:RT=1665879761:S=ALNI_MY73_h2FkMuU64S-R9TpNud-Rao2Q; _d_id=1ac93cdb5a0e86565209190f7f0314; CNZZDATA1281132404=586521712-1665876889-https%253A%252F%252Fwww.baidu.com%252F%7C1665983833',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'
} # 2.获取url
def get_url(url):
all_link = [] # 用于存储获取到的链接 r = requests.get(url)
time.sleep(1)
r.encoding = r.apparent_encoding # 解决代码中文乱码问题
html = etree.HTML(r.text)
# 获取链接指定目录页下的所有链接
pic_links = html.xpath('//div[@class="art-picBox"]/ul/li//a/@href')
# 去重
set_links = list(set(pic_links)) # 获取的链接不完整,因此需要加上链接头部拼接链接
for link in set_links:
index_urls = 'http://www.cgtpw.com' + link # 将拼接好的链接添加到all_link数组中并返回
all_link.append(index_urls)
return all_link # 3.下载图片
def download(links):
# 遍历链接数组
for link in links:
# 通过正则表达式将链接中.html以外的部分提取出来。因为每个链接页跟之前一样第一页和第二页页码不同需要做处理
new_str_list = re.sub(r'\.html$', '', link) try:
# 为了存储图片要给图片编号因此这里用到了枚举
for num, i in enumerate(range(1, 19)):
num += 1 # 如果链接为第一页则直接用Link,反之则拼接一下页码
if i == 1:
url = link
else:
url = new_str_list + f'_{i}.html'
r = requests.get(url, headers=headers)
time.sleep(1) # 这里是为了防止中文乱码
r.encoding = r.apparent_encoding
# 提取链接中的所有图片和title名称
html = etree.HTML(r.text)
title = html.xpath('//div[@class="art-top"]/h1/text()')[0]
img_urls = html.xpath('/html/body/div[3]/div[2]//div[@class="artbody"]//img/@src') # 创建目录,如果目录不存在就创建目录文件夹。为了存储不同类型的照片
if not os.path.exists(f'美女图片/{title}'):
os.makedirs(f'美女图片/{title}') # 获取到每个人对应的所有地址后进行逐一遍历
for img in img_urls:
# 将图片以二进制码流的方式输出
pics = requests.get(img, headers=headers).content
# 存盘
with open(f'美女图片/{title}/{title}_{num}.jpg', 'wb') as f:
f.write(pics)
print(f'已下载>>{title}...编号:{num}')
# 关闭读写
f.close()
except Exception:
continue if __name__ == '__main__':
# 每个url链接的第一页的页码和第二页以后的页面不同因此这里需要做一个判断
for i in range(1, 2):
if i == 1:
url = 'http://www.cgtpw.com/xgmn/732.html'
else:
url = f'http://www.cgtpw.com/xgmn/732_{i + 1}.html' # 将url传递给get_url函数,并获得返回后的结果
links = get_url(url) # 将get_url返回后的结果传递给download函数
download(links)

爬取春光图片网美女图片

【python爬虫】爬取美女图片的更多相关文章

  1. python爬虫-爬取百度图片

    python爬虫-爬取百度图片(转) #!/usr/bin/python# coding=utf-8# 作者 :Y0010026# 创建时间 :2018/12/16 16:16# 文件 :spider ...

  2. Python爬虫 —— 抓取美女图片(Scrapy篇)

    杂谈: 之前用requests模块爬取了美女图片,今天用scrapy框架实现了一遍. (图片尺度确实大了点,但老衲早已无恋红尘,权当观赏哈哈哈) Item: # -*- coding: utf-8 - ...

  3. Python爬虫爬取网页图片

    没想到python是如此强大,令人着迷,以前看见图片总是一张一张复制粘贴,现在好了,学会python就可以用程序将一张张图片,保存下来. 今天逛贴吧看见好多美图,可是图片有点多,不想一张一张地复制粘贴 ...

  4. Python爬虫 —— 抓取美女图片

    代码如下: #coding:utf-8 # import datetime import requests import os import sys from lxml import etree im ...

  5. 使用Python批量爬取美女图片

    运行截图 实列代码: from bs4 import BeautifulSoup import requests,re,os headers = { 'User-Agent': 'Mozilla/5. ...

  6. 使用Python爬虫爬取网络美女图片

    代码地址如下:http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip install ...

  7. Scrapy爬取美女图片第四集 突破反爬虫(上)

     本周又和大家见面了,首先说一下我最近正在做和将要做的一些事情.(我的新书<Python爬虫开发与项目实战>出版了,大家可以看一下样章) 技术方面的事情:本次端午假期没有休息,正在使用fl ...

  8. python爬虫---爬取王者荣耀全部皮肤图片

    代码: import requests json_headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win ...

  9. Scrapy爬取美女图片 (原创)

    有半个月没有更新了,最近确实有点忙.先是华为的比赛,接着实验室又有项目,然后又学习了一些新的知识,所以没有更新文章.为了表达我的歉意,我给大家来一波福利... 今天咱们说的是爬虫框架.之前我使用pyt ...

  10. Scrapy爬取美女图片第三集 代理ip(上) (原创)

    首先说一声,让大家久等了.本来打算那天进行更新的,可是一细想,也只有我这样的单身狗还在做科研,大家可能没心思看更新的文章,所以就拖到了今天.不过忙了521,522这一天半,我把数据库也添加进来了,修复 ...

随机推荐

  1. Linux让部署在服务器上的项目一直保持运行状态…&跑多个项目

    在idea通过package得到的.jar包或者.war包可通过 java -jar xxx.jar/xxx.war 命令直接在linux或者windows系统运行:   将打好包的项目放在linux ...

  2. Linux用户管理2

    passwd给用户修改密码 用户自己给自己设置密码直接passwd root用户给普通用户设置密码passwd 用户名 --stdin从标准输入获取信息 echo "1" | pa ...

  3. 服务器DMZ理解

    转别人的 您的公司有一堆电脑,但可以归为两大类:客户机.服务器.所谓客户机就是主动发起连接请求的机器,所谓服务器就是被动响应提供某些服务的机器.服务器又可以分仅供企业内网使用和为外网提供服务两种.   ...

  4. IT工具知识-13: 如何编辑SVG图像文件并转换为ICO图标文件

    使用背景 最近做了个小软件, 但是桌面快捷方式图标不好看, 于是想着找个好看点的图标, 但是网上搜了一圈, 发现好看的几乎都要钱, 常用的话, 付费倒也不反感, 但是, 仅仅只用那么一两次, 为这个付 ...

  5. 如何用算法把一个十进制数转为十六进制数-C语言基础

    这一篇文章要探讨的是"如何用算法实现十进制转十六进制"并不涉及什么特别的知识点.属于C语言基础篇. 在翻找素材的时候,发现一篇以前写的挺有意思的代码,这篇代码里面涉及的知识点没有什 ...

  6. C#获取本地所有打印机名称

    引用:using System.Drawing.Printing; 实现代码: List<string> PrintS = new List<string>(); foreac ...

  7. MSVC-用于其他IDE的手工环境配置,手工提取

    ​ 最近因为在使用Code::Blocks编程,遇到了MSVC编译的库,不愿意换VS,所以手工配置了MSVC路径.CB是有点老了,不像现在新的IDE都是自动搜索的,而且我又不会批处理orz. 这里面可 ...

  8. 【QT5】学习整理包含引用资料

    视频学习资料 [[6天学会QT] 视频教程及QT5.11.1安装包安装方法][含代码]](https://www.bilibili.com/video/BV1hg4y1B7Vu?from=search ...

  9. 随便记录一些使用IDEA在ssm阶段的踩过的坑

    重命名中括号问题:需要重命名模块+目录 Intellij idea 报错:Error : java 不支持发行版本5_灵颖桥人的博客-CSDN博客_不支持发行版本5 idea中的目标字节码版本总是自动 ...

  10. SpringBoot笔记--配置->profile的配置

    profile--动态配置切换 profile配置方式: 使用spring.profile.active=进行激活.properties文件 直接使用一个.yml文件代替多文件配置 使用---分隔符分 ...