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 运行之后等待,安装完毕,想要深造,那么官方文 ...
随机推荐
- json知识点总结(一)--基础介绍
前言 JSON是一种轻量化的数据编码方式它不依赖于编程语言是独立的文本格式.和xml相比JSON具有格式简洁,转译速度快的特点,因此现在被广泛使用.JSON的本质是字符串,采用了特定的分隔方式对字符串 ...
- SpringMVC实现文件上传功能
文件上传 文件上传要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data" SpringMVC中将上传的文件封装到Multi ...
- 无刷电调修理方法 | 银燕(EMAX)12A无刷电调维修
一. 银燕(XP-12A)电调修理 笔者的电调在使用4S电池时烧毁,其中一个PMOS管明显烧焦. 将其拆除,买来新元件重新焊接,通电依然冒烟了. 引脚定义 丝印662F: XC6206P332MR 低 ...
- kafka 保证消息被消费和消息只消费一次
1. 保证消息被消费 即使消息发送到了消息队列,消息也不会万无一失,还是会面临丢失的风险. 我们以 Kafka 为例,消息在Kafka 中是存储在本地磁盘上的, 为了减少消息存储对磁盘的随机 I/O, ...
- Java IO流处理
字节流是由字节组成的;字符流是由字符组成的Java里字符由两个字节组成. 1字符=2字节JAVA中的字节流是采用ASCII编码的,字符流是采用好似UTF编码,支持中文的 Java IO流处理 面试题汇 ...
- REST 和RPC对比?
1.RPC主要的缺陷是服务提供方和调用方式之间的依赖太强,需要对每一个微服务进行接口的定义,并通过持续继承发布,严格版本控制才不会出现冲突. 2.REST是轻量级的接口,服务的提供和调用不存在代码之间 ...
- 什么是Spring beans?
Spring beans 是那些形成Spring应用的主干的java对象.它们被Spring IOC容器初始化,装配,和管理.这些beans通过容器中配置的元数据创建.比如,以XML文件中 的形式定义 ...
- docker学习-01-安装docker
[root@localhost firstDocker]# cat /etc/centos-release CentOS Linux release 7.6.1810 (Core) [root@loc ...
- js技术之截取substring(int,int)
案例:把所有单词以空格为分割并将首字母转为大写 <!DOCTYPE html><html lang="en"><head> <meta c ...
- 一个用于学习的react项目
React-element 根据开源项目 vue-sell进行的开发,将其改造成了react的项目.在开始学习vue的时候就是用的这个项目,发现效果不错,所以在学习React也使用了此项目. 目的:将 ...