本脚本主要实现爬取caoliu某图片板块,前3页当天更新的帖子的所有图片,同时把图片下载到对应帖子名创建的文件夹中

爬虫主要通过python xpath来实现,同时脚本内包含,创建文件夹,分割数据,下载等操作

首先,我们分析下caoliu某图片板块的资源链接

贴子对应的页面元素

展开元素,可以看到帖子的实际地址,所以我们第一步就是把地址都给扒下来

AA里包含了caoliu某图片板块前3页的地址,创建lit空集来收集爬取来的帖子地址

def stepa (AA):
lit=[]
for url in AA:
response = requests.get(url=url, headers=headers, timeout=100000)
wb_data = response.text.encode('iso-8859-1').decode('gbk')#caoliu的编码格式需要对返回值重新转码
# 将页面转换成文档树
html = etree.HTML(wb_data)
a = html.xpath('//td[@class="tal"]//@href')#帖子地址xpath
lit.append(a)
return(lit)
alllink = stepa(AA)
alllink=alllink[0]

执行后的结果

我们获得帖子地址后,获取的帖子地址如上图,所以需要对地址进行处理,同时屏蔽掉站务贴

BB是需要屏蔽掉的站务贴集合,alllink是上一步骤获取的图贴集合,创建循环,从alllink集合里每次取一个链接,if用于跳过账务贴

def stepb(alllink,headers,BB):
for url in alllink:
#print(url)
if "read" in url:
continue
elif url in BB:
continue
else:
url='https://cl.hexie.xyz/'+url
print(url)
response = requests.get(url, headers=headers)
response=response.text.encode('iso-8859-1').decode('gbk')
html = etree.HTML(response)
b = html.xpath('//div[@class="tpc_content do_not_catch"]//@ess-data')#图片地址xpath
title = html.xpath('/html/head/title/text()')#帖子名称xpath
title=title[0]
title=title[:-27]#去掉帖子名称后面共同的和影响创建文件夹的部分
print(title)

因为获取的链接”htm_data/2011/8/4182612.html“需要重新拼接

拼接步骤”url='https://cl.hexie.xyz/'+url“

后面的步骤就是访问拼接好的url,获取帖子内的图片地址,我们分析下图片资源的元素信息

图片地址存放在"tpc_content do_not_catch"class内,所以xpath可写成”

//div[@class="tpc_content do_not_catch"]//@ess-data“

如此,图片地址就获取到了

接下来,就是通过地址,下载图片资源到本地

创建文件夹参考:https://www.cnblogs.com/becks/p/13977943.html

下载图片到本地参考:https://www.cnblogs.com/becks/p/13978612.html

附上整个脚本

# -*-coding:utf8-*-
# encoding:utf-8
# 本脚本用于爬取草榴图片板块(新时代的我们)最近3天的所有帖子的所有图片,每一个帖子创建独立的文件夹,图片下载到文件夹中
import requests
from lxml import etree
import os
import sys
import re
import random
from urllib import request
import io #sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')
#解决vscode窗口输出乱码的问题,需要import io 和import sys headers = {
'authority': 'cl.hexie.xyz',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'sec-fetch-site': 'none',
'sec-fetch-mode': 'navigate',
'accept-language': 'zh-CN,zh;q=0.9',
'cookie': '__cfduid=d9b8dda581516351a1d9d388362ac222c1603542964',
} path = os.path.abspath(os.path.dirname(sys.argv[0])) AA=[
"https://cl.和谐.xyz/thread0806.php?fid=8",
#"https://cl.和谐.xyz/thread0806.php?fid=8&search=&page=2",
#"https://cl.和谐.xyz/thread0806.php?fid=8&search=&page=3"
] #AA里包含最新前3页列表链接 BB=["htm_data/1109/8/594739.html",
"htm_data/1803/8/3018643.html",
"htm_data/0706/8/36794.html",
"htm_data/1106/8/524775.html",
"htm_data/2011/8/344500.html"] #BB里面包含需要跳过的帖子,这部分帖子是站务贴,里面没资源 #第1步,获取每一页所有的帖子地址,地址格式“https://cl.和谐.xyz/htm_data/2011/8/4182841.html”
def stepa (AA):
lit=[]
for url in AA:
response = requests.get(url=url, headers=headers, timeout=100000)
wb_data = response.text.encode('iso-8859-1').decode('gbk')#草榴的编码格式需要对返回值重新转码
# 将页面转换成文档树
html = etree.HTML(wb_data)
a = html.xpath('//td[@class="tal"]//@href')#帖子地址xpath
lit.append(a)
return(lit)
alllink = stepa(AA)
alllink=alllink[0] #第2步,获取每一篇帖子里所有图片的地址,地址格式“https://和谐.xyz/i/2020/11/15/sedlrk.jpg"
def stepb(alllink,headers,BB):
for url in alllink:
#print(url)
if "read" in url:
continue
elif url in BB:
continue
else:
url='https://cl.和谐.xyz/'+url
print(url)
response = requests.get(url, headers=headers)
response=response.text.encode('iso-8859-1').decode('gbk')
html = etree.HTML(response)
b = html.xpath('//div[@class="tpc_content do_not_catch"]//@ess-data')#图片地址xpath
title = html.xpath('/html/head/title/text()')#帖子名称xpath
title=title[0]
title=title[:-27]#去掉帖子名称后面共同的和影响创建文件夹的部分
print(title) path2 = r'D://tu'
os.mkdir(path2 + './'+str(title))
#以上两行即在d盘tu目录下创建名称为变量title的文件夹 for c in b:
print("loading"+" " +c)
pic_name = random.randint(0,100)#图片名称随机命令 r = requests.get(c,stream=True,headers=headers)
time = r.elapsed.total_seconds()#获取响应时间
if time > 1000:
continue
else:
with open(path2 + './'+str(title) +'./'+str(pic_name) +'.jpg', 'wb') as fd:
for chunk in r.iter_content():
fd.write(chunk)
#从87行开始即下载的脚本,把图片下载到上文创建的指定文件夹中 stepb(alllink,headers,BB) #第3步:提示爬取完成
def over():
print("ok")
over()

嘿嘿

python实例:爬取caoliu图片,同时下载到指定的文件夹内的更多相关文章

  1. Python:爬取网站图片并保存至本地

    Python:爬取网页图片并保存至本地 python3爬取网页中的图片到本地的过程如下: 1.爬取网页 2.获取图片地址 3.爬取图片内容并保存到本地 实例:爬取百度贴吧首页图片. 代码如下: imp ...

  2. python 3 爬取百度图片

    python 3 爬取百度图片 学习了:https://blog.csdn.net/X_JS612/article/details/78149627

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

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

  4. python爬虫--爬取某网站电影下载地址

    前言:因为自己还是python世界的一名小学生,还有很多路要走,所以本文以目的为向导,达到目的即可,对于那些我自己都没弄懂的原理,不做去做过多解释,以免误人子弟,大家可以网上搜索. 友情提示:本代码用 ...

  5. Python简单爬取Amazon图片-其他网站相应修改链接和正则

    简单爬取Amazon图片信息 这是一个简单的模板,如果需要爬取其他网站图片信息,更改URL和正则表达式即可 1 import requests 2 import re 3 import os 4 de ...

  6. Python爬虫爬取网页图片

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

  7. python+selenium爬取百度文库不能下载的word文档

    有些时候我们需要用到百度文库的某些文章时,却发现需要会员才能下载,很难受,其实我们可以通过爬虫的方式来获取到我们所需要的文本. 工具:python3.7+selenium+任意一款编辑器 前期准备:可 ...

  8. Python实例---爬取下载喜马拉雅音频文件

    PyCharm下python爬虫准备 打开pycharm 点击设置 点击项目解释器,再点击右边+号 搜索相关库并添加,例如:requests 喜马拉雅全网递归下载 打开谷歌/火狐浏览器,按F12打开开 ...

  9. 【Python】爬取网站图片

    import requests import bs4 import urllib.request import urllib import os hdr = {'User-Agent': 'Mozil ...

  10. python保存爬取的图片

    用爬虫抓取图片的保存 保存图片 request=urllib2.Request(randNumberUrl,data,headers) picture=opener.open(request).rea ...

随机推荐

  1. 腾讯云HAI服务器上部署与调用DeepSeek-R1大模型的实战指南

    上次我们大概了解了一下 DeepSeek-R1 大模型,并简单提及了 Ollama 的一些基本信息.今天,我们将深入实际操作,利用腾讯云的 HAI 服务器进行 5 分钟部署,并实现本地 DeepSee ...

  2. CBAM注意力模型介绍

    本文分享自天翼云开发者社区<CBAM注意力模型介绍>,作者:Liuzijia 近年来,注意力机制在各项深度学习任务中表现出色.研究表明,人类视觉感知过程中,注意力机制发挥了积极的效果,可以 ...

  3. 搭建基于Grafana+JMeter+InfluxDB的性能监控与分析平台(Linux)

    搭建基于Grafana+JMeter+InfluxDB的性能监控与分析平台(Linux版) 在软件开发和运维领域,性能监控与分析是确保应用稳定性和用户体验的关键环节.随着应用规模的不断扩大和复杂度的增 ...

  4. Q:如何实现notepad++列编辑模式

    列编辑: txt编辑器大家都非常熟悉,当需要修改多行的时候只能一行一行的修改.而notepad 可以同时修改多行的数据. 1.鼠标移动光标到要选择的列 2.按住 alt 键,从上到下选择多列,光标会变 ...

  5. 推荐一款人人可用的开源 BI 工具,更符合国人使用习惯的数据可视化分析工具,数据大屏开发神器!

    前言 今天大姚给大家推荐一款人人可用的开源.免费的 BI 工具,更符合国人使用习惯的数据可视化分析工具,数据大屏开发神器,Tableau.帆软的开源替代:DataEase. 工具介绍 DataEase ...

  6. Vulnhub-DC-9靶机-SQL注入拿到账户+利用端口敲门连接ssh+信息泄露利用root脚本追加提权

    一.环境搭建 选择扫描虚拟机 选择靶机路径 如果出现以下信息 如下修改,修改和虚拟机一样的版本 二.信息收集 扫ip nmap -sn 192.168.108.0/24 得到靶机ip:192.168. ...

  7. 少样本学习实战:Few-Shot Prompt设计

    让AI用最少样本学会"举一反三" 想象一下,你要教一个外星人认识地球上的动物.如果只给它看三张哈士奇的照片,它可能会认为所有四条腿的动物都叫"哈士奇".这就是A ...

  8. AI大模型的崛起:从技术突破到行业变革

    在人工智能技术飞速发展的今天,AI大模型作为新一代的智能工具,正逐步渗透到各行各业,引领着数字化转型的新浪潮.前瞻产业研究院发布的一份关于AI大模型场景应用的报告显示,2023年,我国AI大模型行业规 ...

  9. manim边学边做--移动相机的场景类

    Manim作为强大的数学动画引擎,其核心功能之一是实现复杂的镜头运动控制. MovingCameraScene类正是为满足这种需求而设计的专业场景类. 与基础Scene类相比,它通过以下特性拓展了镜头 ...

  10. leetcode两数之和变种(找出所有满足总和的两个数)

    偶尔看到leetcode 的两数之和,但是之前遇到过两数之和的变种,之前一开始想不出来,后面看了别人的题解才想到解法,这里记录一下. 题目描述: 原leetcode题目描述 给定一个整数数组 nums ...