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 运行之后等待,安装完毕,想要深造,那么官方文 ...
随机推荐
- 通过R Studio用Markdown写Beamer
技术背景 在写一些学术演示文档时,经常有可能用到Beamer--一种Latex的学术风PPT模板,比如下图所示的这种: 这种风格的演示文档有几个明显的优点:简约.严肃.可以用Latex敲公式和推导.可 ...
- Java 中如何将字符串转换为整数?
String s="123"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法:i=Integer.valueOf(s).intValue();
- memcached 是如何做身份验证的?
没有身份认证机制!memcached 是运行在应用下层的软件(身份验证应该是应用 上层的职责).memcached 的客户端和服务器端之所以是轻量级的,部分原因就 是完全没有实现身份验证机制.这样,m ...
- js技术之拖动table标签
一.js技术之拖动table标签 起因:前几天公司,突然安排一个任务 任务描述:要求尺码table列表要像Excel表中一样可以直接移动整行尺码到任意行位置 技术点:采用ui的sortable技术来h ...
- 顺利通过EMC实验(1)
- 以太网EMC(浪涌)中心抽头方案(节约空间)
- Head标签里面的dns-prefetch,preconnect,prefetch和prerender
开始 今天突然心血来潮想起前端性能优化的问题,这基本是老生常谈的事情了,面试随便都能说上几个,但是还是有点疑问:就是Head标签了,记忆中Head可是藏龙卧虎,各种技能都有,当然这些不可能都一一记住, ...
- 使用Egret插件压缩代码包体积,减少请求数量的实战教程
在白鹭引擎发布了5.2.7版本中新增加了命令行,增加自动合图插件TextureMergerPlugin功能.今天,我们以一个EUI案例来展示自动合图插件的具体使用方法和注意事项. 此外,我们在本文还融 ...
- 认识 Function.prototype.bind()
欢迎前端爱好者加入QQ群:112916679 答疑解惑,且可获取更多前端资料! bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个 ...
- 基 vue-element-admin升级的Vue3 +TS +Element-Plus 版本的后端管理前端解决方案 vue3-element-admin 正式对外发布,有来开源组织又一精心力作,毫无保留开放从0到1构建过程
项目简介 vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 + Element Plus 版本的后台管理前端解决方案,是 有来技术团队 继 youla ...