本脚本主要实现爬取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. 数组中的常见异常: 1. 数组角标越界的异常:ArrayIndexOutOfBoundsExcetion 2. 空指针异常:NullPointerException

    数组中的常见异常:  1. 数组角标越界的异常:ArrayIndexOutOfBoundsExcetion   2. 空指针异常:NullPointerException package com.ch ...

  2. BackupBuddy pg walkthrough Intermediate

    nmap ┌──(root㉿kali)-[~/lab] └─# nmap -p- -A 192.168.189.43 Starting Nmap 7.94SVN ( https://nmap.org ...

  3. java中的ArrayBlockingQueue

    ArrayBlockingQueue ArrayBlockingQueue 是 Java 并发包 (java.util.concurrent) 中的一个线程安全的阻塞队列实现. 它基于数组实现,容量固 ...

  4. LeetCode刷题小白必看!如何科学地刷题,从0到1建立你的算法体系?

    大家好,我是忍者算法的作者,今天想和大家聊聊如何科学地刷题.如果你是一个刚开始刷题的小白,面对LeetCode上密密麻麻的题目感到无从下手,或者刷了一段时间却发现自己进步缓慢,那么这篇文章就是为你准备 ...

  5. Centos7部署DVWA靶场

    Centos7部署DVWA靶场 ​ DVWA 款开源的渗透测试漏洞练习平台,其中内含xs SQL注入. 文件上传.文件包含. CSRF和暴力破解等各个难度的测试环境. 安装httpd及其相关的组件 y ...

  6. Codeforces 1749E Cactus Wall 题解 [ 紫 ] [ 01 BFS ] [ 图论建模 ] [ 构造 ] [ adhoc ]

    一道很好的思维题,被教练碾压了. 观察 首先从题目给的样例入手: 5 5 ..... ..... ..... ..... ..... 这种情况最终的答案是: YES ....# ...#. ..#.. ...

  7. JUC并发—3.volatile和synchronized原理

    大纲 1.volatile关键字的使用例子 2.主内存和CPU的缓存模型 3.CPU高速缓存的数据不一致问题 4.总线锁和缓存锁及MESI缓存一致性协议 5.Java的内存模型JMM 6.JMM如何处 ...

  8. RowCellMenuCustomizations 实现 Command 绑定

    给GridControl的行数据单元格添加菜单项,并通过Command绑定的方式实现菜单点击动作触发: <dxg:GridControl x:Name="mainGrid" ...

  9. Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版

    Deepseek卡的问题已经有几周了,还有同学没有解决这个问题? 今天就来教大家如何白嫖阿里云的Deepseek-R1满血版,新用户享受100万token额度,相当的富裕,可以随便用了.并且还配用AP ...

  10. DeepSeek本地性能调优

    技术背景 大模型性能调优是一个很复杂的工程,涉及到很多细节,如果真要对模型动刀子,还需要对模型和数据集本身有非常好的理解.这里我们仅仅考虑模型加载过程中,可以优化的一些参数配置.关于DeepSeek在 ...