下面是完整的攻略:
一、前置准备
- 安装 Python 环境(建议使用 Python 3.x版本)。
-
安装必要的第三方库:
-
requests:用于发送 HTTP 请求和获取返回的数据。
- beautifulsoup4:用于解析 HTML 和 XML 格式文档。
- lxml:beautifulsoup4 的解析器,用于加速解析过程。
可以使用以下命令进行安装:
pip install requests
pip install beautifulsoup4
pip install lxml
二、实现步骤
1. 寻找目标网站
首先,我们需要找到目标网站,本次示例我们要爬取的是英雄联盟中国官网的皮肤库,其 URL 为 https://lol.qq.com/data/info-heroskins.shtml。
2. 分析网页结构
打开目标网站后,使用浏览器开发者工具进行网页结构分析。我们可以发现,每个皮肤都有独特的标识符:data-heroskin-id
。同时,皮肤对应的图片 URL 蕴含在 div
标签的 style
属性中,以 background-image:url()
形式呈现。
3. 获取皮肤标识符
使用 requests
库发送 HTTP 请求,并使用 beautifulsoup4
库解析返回的 HTML 内容。通过解析得到每个皮肤的标识符。
import requests
from bs4 import BeautifulSoup
URL = "https://lol.qq.com/data/info-heroskins.shtml"
# 发送 HTTP 请求
response = requests.get(URL)
# 解析 HTML 内容
soup = BeautifulSoup(response.content, "lxml")
# 获取所有皮肤的标识符
skin_ids = [div["data-heroskin-id"] for div in soup.find_all("div", class_="herolist") if div.has_attr("data-heroskin-id")]
4. 构造图片 URL
对每个皮肤的标识符,构造对应的图片 URL。
for skin_id in skin_ids:
# 构造图片 URL
img_url = f"https://ossweb-img.qq.com/images/lol/web201310/skin/small{skin_id}.jpg"
# 下载图片
...
5. 下载图片
使用 requests
库发送 HTTP 请求,并将返回的二进制数据写入到文件中。
# 下载图片
response = requests.get(img_url)
with open(f"{skin_id}.jpg", "wb") as f:
f.write(response.content)
三、示例说明
示例 1:下载前 5 个皮肤
import requests
from bs4 import BeautifulSoup
URL = "https://lol.qq.com/data/info-heroskins.shtml"
# 发送 HTTP 请求
response = requests.get(URL)
# 解析 HTML 内容
soup = BeautifulSoup(response.content, "lxml")
# 获取前 5 个皮肤的标识符
skin_ids = [div["data-heroskin-id"] for div in soup.find_all("div", class_="herolist") if div.has_attr("data-heroskin-id")][:5]
# 下载图片
for skin_id in skin_ids:
# 构造图片 URL
img_url = f"https://ossweb-img.qq.com/images/lol/web201310/skin/small{skin_id}.jpg"
# 下载图片
response = requests.get(img_url)
with open(f"{skin_id}.jpg", "wb") as f:
f.write(response.content)
示例 2:下载特定英雄的所有皮肤
import requests
from bs4 import BeautifulSoup
URL = "https://lol.qq.com/data/info-heroskins.shtml"
# 发送 HTTP 请求
response = requests.get(URL)
# 解析 HTML 内容
soup = BeautifulSoup(response.content, "lxml")
# 获取特定英雄的所有皮肤的标识符
hero_name = "劫"
hero_div = soup.find("div", string=hero_name)
skin_ids = [div["data-heroskin-id"] for div in hero_div.find_next_siblings("div") if div.has_attr("data-heroskin-id")]
# 下载图片
for skin_id in skin_ids:
# 构造图片 URL
img_url = f"https://ossweb-img.qq.com/images/lol/web201310/skin/small{skin_id}.jpg"
# 下载图片
response = requests.get(img_url)
with open(f"{hero_name}_{skin_id}.jpg", "wb") as f:
f.write(response.content)
以上就是python爬取英雄联盟皮肤并下载的示例的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 爬取英雄联盟皮肤并下载的示例 - Python技术站