windows批处理执行图片爬取脚本
背景
由于测试时需要上传一些图片,而自己保存的图片很少。
为了让测试数据看起来不那么重复,所以网上找了一个爬虫脚本,以下是源码:
1 import requests
2 import os
3
4 class Image():
5 url = 'https://image.baidu.com/search/acjson'
6 headers = {
7 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.9 Safari/537.36'
8 }
9 varlist = []
10 dir = './images'
11 params = {}
12
13 def __init__(self):
14 global page_num,keywords
15 page_num = int(input('请输入要抓取的页数:\n'))
16 keywords = input('请输入关键字:\n')
17 if self.catch_page():
18 self.writeData()
19 else:
20 print('抓取页面失败')
21
22 def catch_page(self):
23 for i in range(0,page_num * 30,30):
24 self.params = {
25 'tn': 'resultjson_com',
26 'ipn': 'rj',
27 'ct': '201326592',
28 'is': '',
29 'fp': 'result',
30 'queryWord': keywords,
31 'cl': '2',
32 'lm': '-1',
33 'ie': 'utf-8',
34 'oe': 'utf-8',
35 'adpicid': '',
36 'st': '-1',
37 'z': '',
38 'ic': '0',
39 'hd': '',
40 'latest': '',
41 'copyright': '',
42 'word': keywords,
43 's': '',
44 'se': '',
45 'tab': '',
46 'width': '',
47 'height': '',
48 'face': '0',
49 'istype': '2',
50 'qc': '',
51 'nc': '1',
52 'fr': '',
53 'expermode': '',
54 'force': '',
55 'cg': 'girl',
56 'pn': i,
57 'rn': '30',
58 'gsm': '',
59 '1584010126096': ''
60 }
61 res = requests.get(url = self.url,params = self.params).json()['data']
62 for j in range(0,30):
63 self.varlist.append(res[j]['thumbURL'])
64 if self.varlist != None:
65 return True
66 return False
67
68 def writeData(self):
69 # 判读是否存在文件,不存在则创建
70 if not os.path.exists(self.dir):
71 os.mkdir(self.dir)
72
73 for i in range(0,page_num * 30):
74 print(f'正在下载第{i}条数据')
75 images = requests.get(url = self.varlist[i])
76 open(f'./images/{i}.jpg','wb').write(images.content)
77
78 if __name__ == '__main__':
79 Image()
这代码可能作者跑当时ok,但我跑失败了(报错:requests.exceptions.TooManyRedirects: Exceeded 30 redirects.),排查了一下,请求时加上headers参数就ok了。
图片是保存到当前路径下的,要是把图片存储换一个目录,就需要移动这个爬虫文件,当然你也可以改代码里面的路径,但是换一次路径就改下代码?感觉不太优雅。
那能不能写个window的批处理脚本(xxx.bat),py文件不动,你要换那个目录就把.bat文件放在那个目录里,py文件就放一个地方不用动。
解决方案
首先,这方法肯定是可行的
其次,我得确认py文件的路径
接着,我可以执行这个py文件
然后,执行的时候把当前.bat路径传给py文件
最后,在py代码里把图片保存在传入的路径下
大功告成!.bat文件内容如下:
1 @echo off
2 rem 这里的D:和D:\Python 是Python文件所在的盘及路径
3 D:
4 cd D:\spider
5
6 echo 当前路径:%~dp0
7 python drink_pic.py %~dp0
8 pause
9 exit
其中:
%cd%
代表的是当前工作目录(current working directory,variable);%~dp0
代表的是当前批处理文件所在完整目录(the batch file's directory,fixed)
以下是修改后图片爬虫py源码:
1 import argparse
2
3 import requests
4 import os
5 import sys
6
7 class Image():
8 url = 'https://image.baidu.com/search/acjson'
9 headers = {
10 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.9 Safari/537.36',
11 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
12 'Accept-Encoding':'gzip, deflate',
13 'Accept-Language':'zh-CN,zh;q=0.9',
14 'Connection':'keep-alive',
15 'Cookie':'BDqhfp=%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95logo%26%26NaN-1undefined-1undefined%26%262928%26%266; BAIDUID=50559E09CC89BCB4A35AE534A4AFBD93:FG=1; PSTM=1613793192; BIDUPSID=994A62B2BBC179C9D5FDDD4576FD1138; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; __yjs_duid=1_b93b073db4b3095e4b6ca8bdad9666671613879345923; H_PS_PSSID=33512_33241_33257_33344_31254_33601_33585_26350_33264; delPer=0; PSINO=5; ZD_ENTRY=baidu; BA_HECTOR=2081a48k040k852hlm1g3c5g40r; BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm; userFrom=www.baidu.com; indexPageSugList=%5B%22%E9%85%92%22%5D; cleanHistoryStatus=0',
16 'Host':'image.baidu.com',
17 'Referer':'https://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=%E9%85%92',
18 'Upgrade-Insecure-Requests':'1',
19 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
20 }
21 varlist = []
22 dir = './images'
23 params = {}
24
25 def __init__(self, pt):
26 global page_num,keywords
27 page_num = int(input('请输入要抓取的页数:\n'))
28 keywords = input('请输入关键字:\n')
29 if self.catch_page():
30 self.writeData(pt)
31 else:
32 print('抓取页面失败')
33
34 def catch_page(self):
35 for i in range(0,page_num * 30,30):
36 self.params = {
37 'tn': 'resultjson_com',
38 'ipn': 'rj',
39 'ct': '201326592',
40 'is': '',
41 'fp': 'result',
42 'queryWord': keywords,
43 'cl': '2',
44 'lm': '-1',
45 'ie': 'utf-8',
46 'oe': 'utf-8',
47 'adpicid': '',
48 'st': '-1',
49 'z': '',
50 'ic': '0',
51 'hd': '',
52 'latest': '',
53 'copyright': '',
54 'word': keywords,
55 's': '',
56 'se': '',
57 'tab': '',
58 'width': '',
59 'height': '',
60 'face': '0',
61 'istype': '2',
62 'qc': '',
63 'nc': '1',
64 'fr': '',
65 'expermode': '',
66 'force': '',
67 'cg': 'girl',
68 'pn': i,
69 'rn': '30',
70 'gsm': '',
71 '1584010126096': ''
72 }
73 res = requests.get(url = self.url,headers = self.headers, params = self.params).json()['data']
74 print("---------res=", res)
75 for j in range(0,30):
76 self.varlist.append(res[j]['thumbURL'])
77 if self.varlist != None:
78 print(self.varlist)
79 return True
80 return False
81
82 def writeData(self, pt):
83 # 判读是否存在文件,不存在则创建
84 pt = pt + 'images/'
85 if not os.path.exists(pt):
86 os.mkdir(pt)
87 print(pt)
88 for i in range(0,page_num * 30):
89 print(f'正在下载第{i}条数据')
90 images_data = requests.get(self.varlist[i])
91 images_content = images_data.content
92 open(pt + f'{i}.jpg','wb').write(images_content)
93
94 if __name__ == '__main__':
95 # sys.argv[1]这里代表接受CMD传入的第一个参数,如果传多个参数命令后以空格隔开
96 print("入参[1]为:", sys.argv[1])
97 pt = sys.argv[1]
98 # pt = 'E:/图片视频/'
99 pt1 = pt.replace('\\', '/')
100 print('path',pt1)
101 im= Image(pt1)
windows批处理执行图片爬取脚本的更多相关文章
- 爬虫07 /scrapy图片爬取、中间件、selenium在scrapy中的应用、CrawlSpider、分布式、增量式
爬虫07 /scrapy图片爬取.中间件.selenium在scrapy中的应用.CrawlSpider.分布式.增量式 目录 爬虫07 /scrapy图片爬取.中间件.selenium在scrapy ...
- Python爬虫入门教程 26-100 知乎文章图片爬取器之二
1. 知乎文章图片爬取器之二博客背景 昨天写了知乎文章图片爬取器的一部分代码,针对知乎问题的答案json进行了数据抓取,博客中出现了部分写死的内容,今天把那部分信息调整完毕,并且将图片下载完善到代码中 ...
- 4k图片爬取+中文乱码
4k图片爬取+中文乱码 此案例有三种乱码解决方法,推荐第一种 4k图片爬取其实和普通图片爬取的过程是没有本质区别的 import requests import os from lxml import ...
- Java分布式爬虫Nutch教程——导入Nutch工程,执行完整爬取
Java分布式爬虫Nutch教程--导入Nutch工程,执行完整爬取 by briefcopy · Published 2016年4月25日 · Updated 2016年12月11日 在使用本教程之 ...
- scrapy之360图片爬取
#今日目标 **scrapy之360图片爬取** 今天要爬取的是360美女图片,首先分析页面得知网页是动态加载,故需要先找到网页链接规律, 然后调用ImagesPipeline类实现图片爬取 *代码实 ...
- [Python_scrapy图片爬取下载]
welcome to myblog Dome地址 爬取某个车站的图片 item.py 中 1.申明item 的fields class PhotoItem(scrapy.Item): # define ...
- Python爬虫入门教程 8-100 蜂鸟网图片爬取之三
蜂鸟网图片--啰嗦两句 前几天的教程内容量都比较大,今天写一个相对简单的,爬取的还是蜂鸟,依旧采用aiohttp 希望你喜欢 爬取页面https://tu.fengniao.com/15/ 本篇教程还 ...
- Python爬虫入门教程 7-100 蜂鸟网图片爬取之二
蜂鸟网图片--简介 今天玩点新鲜的,使用一个新库 aiohttp ,利用它提高咱爬虫的爬取速度. 安装模块常规套路 pip install aiohttp 运行之后等待,安装完毕,想要深造,那么官方文 ...
- Python爬虫入门教程第七讲: 蜂鸟网图片爬取之二
蜂鸟网图片--简介 今天玩点新鲜的,使用一个新库 aiohttp ,利用它提高咱爬虫的爬取速度. 安装模块常规套路 pip install aiohttp 运行之后等待,安装完毕,想要深造,那么官方文 ...
随机推荐
- java进行远程部署与调试及原理解析
远程调试,特别是当你在本地开发的时候,你需要调试服务器上的程序时,远程调试就显得非常有用. JAVA 支持调试功能,本身提供了一个简单的调试工具JDB,支持设置断点及线程级的调试同时,不同的JVM通过 ...
- select、poll和epoll的区别
操作系统在处理io的时候,主要有两个阶段: 等待数据传到io设备 io设备将数据复制到user space 我们一般将上述过程简化理解为: 等到数据传到kernel内核space kernel内核区域 ...
- manjaro下使用scrcpy安卓设备投屏
scrcpy 安卓版本要大于等于 5.0 安装scrcpy及安卓工具包 yay -S scrcpy-git android-tools 打开手机 开发者模式->USB调试,将手机通过数据线连接电 ...
- Spring中毒太深,离开了Spring,我居然连最基本的接口都不会写了¯\_(ツ)_/¯
前言 众所周知,Java必学的框架其中就是SSM,Spring已经融入了每个开发人员的生活,成为了不可或缺的一份子. 随着 Spring 的崛起以及其功能的完善,现在可能绝大部分项目的开发都是使用 S ...
- jedis 和 redisson 有哪些区别?
Jedis 和 Redisson 都是Java中对Redis操作的封装.Jedis 只是简单的封装了 Redis 的API库,可以看作是Redis客户端,它的方法和Redis 的命令很类似.Redis ...
- jvm-learning-运行时数据区-整体
在jdk8之后之前的方法区有叫做元数据. 每个JVM只有一个Runtime实例,即为运行时环境,相当于内存结构种的运行时数据区 线程 线程是一个程序里的运行单元,JVM允许一个应用有多个线程并行的执行 ...
- 学习openldap03
ldap统一认证架构 一.ldap目录服务介绍什么是目录服务? 目录是一类为了浏览和搜索数据而设计的特殊的数据库.例如,为人所熟知的微软公司的活动目录(active directory)就是目录数据 ...
- can总线第二讲
一 CAN总线拓扑结构CAN是一种分布式的控制总线,总线上的每一个节点一般来说都比较简单,使用MCU控制器处理CAN总线数据,完成特定的功能:通过CAN总线将各节点连接只需较少的线缆(两根线:CAN_ ...
- js随手笔记-------理解JavaScript碰撞检测算法核心简单实现原理
碰撞检测在前端游戏,设计拖拽的实用业务等领域的应用场景非常广泛,今天我们就在这里对于前端JavaScript如何实现碰撞检测算法进行一个原理上的探讨,让大家能够明白如何实现碰撞以及碰撞的理念是什么:1 ...
- ES6-11学习笔记--let
新声明方式:let 1.不属于顶层对象 window 2.不允许重复声明 3.不存在变量提升 4.暂时性死区 5.块级作用域 原来var声明: var a = 5; console.log(a); ...