您的位置:首页 > 产品设计 > UI/UE

requests+selenium+pyquery+threading实现LOL所有装备图片爬取保存

2020-07-04 19:16 746 查看

注意:

  1. chrome的chromedriver.exe文件需要和代码放在同一路径下,有了chromedriver才能使用selenium驱动浏览器,根据浏览器版本,在http://npm.taobao.org/mirrors/chromedriver/下载chromedriver
  2. 本环境为python3.5版本之后,需要安装好pyquery、selenium、requests模块
    pip install pyquery
    pip install requests
    pip install selenium

话不多说,上代码,对应的关键位置我都注释了。

# coding=utf-8
import requests
from threading import Thread
from pyquery import PyQuery as pq
from selenium import webdriver
import time

# 利用pyquery解析网页标签,获取需要的装备名字,以及img src地址
def get():
driver = webdriver.Chrome()
driver.get(url)
driver.implicitly_wait(10)
doc = pq(driver.page_source)  # 使用selenium加载获取网页的源码,使用requests是无法直接获取得到装备的标签的
lis = doc("#jSearchItemDiv li")
for li in lis.items():
imgsrc = li('img').attr('src')  # 装备图片的url地址
name = li('p').text()  # 装备的名称
yield {'imgsrc': imgsrc, 'name': name}
time.sleep(5)
driver.close()

# 保存图片到当前路径,需要以‘wb’模式新建文件,写入获取的流数据res.content
def save_pic(data):
with open(r'.\%s.png' % data.get('name'), 'wb') as f:   # 定义保存格式,装备名+.png
try:
res = requests.get(data.get('imgsrc'), headers=headers)
content = res.content
f.write(content)
print('%s 保存完成.....' %  data.get('name'))
except Exception as e:
print(e)

# 多线程运行函数,其实用不用多线程都很快,毕竟数据很小
def run():
datas = get()
tasks = [Thread(target=save_pic, args=(data, )) for data in datas]
for t in tasks:
t.start()
for t in tasks:
t.join()

if __name__ == '__main__':
headers = {"User-Agent": "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)"}
url = "https://lol.newyx.net/data/item/"
run()

最终保存效果:图片太多,只截图部分…

喜欢的新手小伙伴可以拿去玩一下…

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: