本脚本主要实现爬取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. Phi小模型开发教程:用C#开发本地部署AI聊天工具,只需CPU,不需要GPU,3G内存就可以运行,不输GPT-3.5

    大家好,我是编程乐趣. 行业诸多大佬一直在说:"‌2025年将是AI应用元年‌",虽然说大佬的说法不一定对,但AI趋势肯定没错的. 对于我们程序员来说,储备AI应用开发技能,不管对 ...

  2. axios请求拦截器和响应拦截器

    axios里面可以设置拦截器 ,在请求发送之前做一些事情: 拦截器分[请求拦截器]和[响应拦截器] 参考地址:https://www.jb51.net/article/150014.htm 参考的地址 ...

  3. CompletableFuture 超时功能有大坑!使用不当直接生产事故!

    CompletableFuture 超时功能有大坑!使用不当直接生产事故! 本文未经允许禁止转载! 上一篇文章<如何实现超时功能(以CompletableFuture为例)>中我们讨论了 ...

  4. 从倒水问题到盛最多水的容器:一道经典的双指针应用题|LeetCode 11 盛最多水的容器

    LeetCode 11 盛最多水的容器 点此看全部题解 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中) 生活中的算法 你有没有遇到过这样的场景:家里要举办派对,需要准备一个大 ...

  5. 设置npm、yarn和pnpm的国内镜像地址和yarn命令相关问题

    1.npm 全局设置: 输入如下命令查看镜像地址: npm config get registry 输入如下命令设置镜像地址为淘宝: // 推荐地址 npm config set registry h ...

  6. 离线安装IDEA插件:详细步骤指南

    离线安装IDEA插件:详细步骤指南 网络环境下载插件包 访问 https://plugins.jetbrains.com/ 一.准备工作 找到可用的插件文件 访问 https://plugins.je ...

  7. 开源接流:一个方法搞定3D地图双屏联动

    老大提需求:一份数据,在2D地图上可编辑,在3D地图上显示高度信息,关键是两个地图得支持视图同步,末了还来句"两天时间够了吧?"我饶了饶头,内心各种问候...,代码如何下手,特X的 ...

  8. 用python做时间序列预测八:Granger causality test(格兰杰因果检验)

    如果想知道一个序列是否对预测另一个序列有用,可以用Granger causality test(格兰杰因果检验). Granger causality test的思想 如果使用时间序列X和Y的历史值来 ...

  9. linux rpm包下载

    下载地址 pkg.org 下载方法 搜索包名 找到需要的包 点击去,找到Download wget [Download url] 没有包管理器,恶心,真他妈恶心,我都不想使,还说啥稳定,环境都配不起来 ...

  10. Java - 高射炮打蚊子(第二弹)

    题记部分 01 || 面试题 001 || 什么是JVM JVM(Java虚拟机)是Java程序运行的环境,它是一个抽象的计算机,包括指令集.寄存器集.堆栈.垃圾回收等.JVM屏蔽了与具体操作系统平台 ...