大家好,我是 👉 【Python当打之年】
本期我们利用 python脚本实现批量下载图片
希望对小伙伴们有所帮助,如有疑问或者需要改进的地方可以私信小编。
🏳️🌈 1.网页分析
打开网页直接搜索 ❤️‘小姐姐’,选择图片:
F12或者右键审查元素,多滚动几页,可以看到以下信息:
顺序:Network→XHR→Search
以前三页URL为例:
https://image.baidu.com/search/acjson?tn=resultjson_com&logid=6594154144538353771&ipn=rj&ct=201326592&is=&fp=result&fr=&word=%E5%B0%8F%E5%A7%90%E5%A7%90&queryWord=%E5%B0%8F%E5%A7%90%E5%A7%90&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=©right=&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&expermode=&nojc=&isAsync=&pn=30&rn=30&gsm=1e&1655090591300=
https://image.baidu.com/search/acjson?tn=resultjson_com&logid=6594154144538353771&ipn=rj&ct=201326592&is=&fp=result&fr=&word=%E5%B0%8F%E5%A7%90%E5%A7%90&queryWord=%E5%B0%8F%E5%A7%90%E5%A7%90&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=©right=&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&expermode=&nojc=&isAsync=&pn=60&rn=30&gsm=3c&1655090591410=
https://image.baidu.com/search/acjson?tn=resultjson_com&logid=6594154144538353771&ipn=rj&ct=201326592&is=&fp=result&fr=&word=%E5%B0%8F%E5%A7%90%E5%A7%90&queryWord=%E5%B0%8F%E5%A7%90%E5%A7%90&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=©right=&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&expermode=&nojc=&isAsync=&pn=90&rn=30&gsm=5a&1655090595073=
主要关注参数:pn、word、queryWord,可以看到:
pn:pn:30 、 pn:60 、 pn:90、…,实际上,pn表示一页包含30个图片。
word:%E5%B0%8F%E5%A7%90%E5%A7%90
在线解码工具:http://www.jsons.cn/urlencode
🏳️🌈 2. 新建文件夹用于存放爬取结果
def make_dirs(self):
if not os.path.exists(self.keyWord):
os.makedirs(self.keyWord)
🏳️🌈 3. 获取每页图片
def get_onepage_info(self,page):
url = f'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=6594154144538353771&ipn=rj&ct=201326592&is=&fp=result&fr=&word={self.keyWord}&queryWord={self.keyWord}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=©right=&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&expermode=&nojc=&isAsync=&pn={(page+1)*30}&rn=30&gsm=1e&1655091195245='
r = requests.get(url, headers=self.headers)
json_data = json.loads(r.text)
for num in range(30):
img_url = jsonInfo['data'][num]['thumbURL']
img_title = jsonInfo['data'][num]['fromPageTitleEnc'].replace(':','').replace('?','')
print(img_url)
try:
res = requests.get(img_url, headers=self.headers)
if res.status_code == 200:
with open(f'./{self.keyWord}/{img_title}.png', "wb") as f:
f.write(res.content)
print(f'第{page+1}页,第{num+1}张爬取完成')
except:
continue
结果:
🏳️🌈 4 获取所有页图片
def get_pages_info(self):
for page in range(self.pages):
self.get_onepage_info(page)
结果:
❤️❤️❤️ 5 封装类(全部代码)
class BaiduImage():
def __init__(self,keyWord,headers,pages):
self.keyWord = keyWord
self.headers = headers
self.pages = pages
def make_dirs(self):
if not os.path.exists(self.keyWord):
os.makedirs(self.keyWord)
def get_onepage_info(self,page):
url = f'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=6594154144538353771&ipn=rj&ct=201326592&is=&fp=result&fr=&word={self.keyWord}&queryWord={self.keyWord}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=©right=&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&expermode=&nojc=&isAsync=&pn={(page+1)*30}&rn=30&gsm=1e&1655091195245='
r = requests.get(url, headers=self.headers)
json_data = json.loads(r.text)
for num in range(30):
img_url = jsonInfo['data'][num]['thumbURL']
img_title = jsonInfo['data'][num]['fromPageTitleEnc'].replace(':','').replace('?','')
print(img_url)
try:
res = requests.get(img_url, headers=self.headers)
if res.status_code == 200:
with open(f'./{self.keyWord}/{img_title}.png', "wb") as f:
f.write(res.content)
print(f'第{page+1}页,第{num+1}张爬取完成')
except:
continue
def get_pages_info(self):
for page in range(self.pages):
self.get_onepage_info(page)
if __name__ == '__main__':
keyWord = '小姐姐'
pages = 1
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'
}
bd = BaiduImage(keyWord, headers, pages)
bd.make_dirs()
bd.get_pages_info()
以上就是本期为大家整理的全部内容了,赶快练习起来吧,原创不易,喜欢的朋友可以点赞、收藏也可以分享(注明出处)让更多人知道。
推荐阅读
- 👨🎓 【Pandas+Pyecharts | 山东省高考考生数据分析可视化】
- 🚗 【Pandas+Pyecharts | 40000+汽车之家数据分析可视化】
- 🛒 【Pandas+Pyecharts | 20000+天猫订单数据可视化】
- 🏠 【Pandas+Pyecharts | 广州市已成交房源信息数据可视化】
- 🏫 【Pandas+Pyecharts | 考研信息数据可视化】
- 💸 【Pandas+Pyecharts | 某平台招聘信息数据可视化】
- 🏥 【Pandas+Pyecharts | 医院药品销售数据可视化】
- 💰️ 【Pyecharts | 比特币每日价格动态可视化】
- 🥮 【可视化 | Python中秋月饼销量分析,这些口味才是yyds!】
- 🎦 【Pyecharts | 《白蛇2:青蛇劫起》20000+数据分析可视化】
- 💑 【Pyecharts | 历年全国各地民政局登记数据分析+可视化】
- 🌏 【Pandas+Pyecharts | 全国热门旅游景点数据分析+可视化】
- 🏆 【Pandas+Pyecharts | 2020东京奥运会奖牌数据可视化】
- 🏹 【Pandas常用基础操作指令汇总 】
- 🎯 【pandas + pyecharts | ADX游戏广告投放渠道综合分析】
- 🕔 【Schedule + Pyecharts | 时间序列图(动态轮播图)】
- 🏠 【Pandas+Pyecharts | 北京某平台二手房数据分析+可视化】
- 🏫 【Pandas+Pyecharts | 2021中国大学综合排名分析+可视化】
- 🎦 【爬虫 | Python爬取豆瓣电影Top250 + 数据可视化】
- 📡 【技巧 | Python创建自己的高匿代理IP池】
文章首发微信公众号 “Python当打之年” ,每天都有python编程技巧推送,希望大家可以喜欢