-
获取英雄列表
https://pvp.qq.com/web201605/herolist.shtml
使用浏览器打开该网站,按F12进入开发者模式,点击network选项,刷新网页。可以发现一个包含了所有英雄名字的json文件,其中乱码是因为解码问题。
复制该链接并访问,可以得到如下文件:
-
点击页面中某一英雄,进入详情页:
可以看到艾琳的英雄id为155,在之前的json文件中搜索155:
-
进一步点击背景故事按钮,可以得到该英雄的背景故事。
所以可以得知,我们只需要知道英雄的ename属性,就可以得到该英雄的背景故事。 -
查看网页源代码可知,该故事直接在源代码中。
-
右键copy->copy selector,得到路径为#hero-story > div.pop-bd。
-
根据以上步骤,代码如下:
import json # 读取json文件
import requests # 爬虫
from bs4 import BeautifulSoup # 解析html,提取信息
class WzrySpider:
def __init__(self):
self.crawl_herolist()
# 读取英雄列表
def crawl_herolist(self):
try: # 如果json文件已经下载到本地,直接读取
reader = open("herolist.json","rb")
self.herolist_json = json.load(reader)
print("herolist.json读取成功!")
except: # 如果本地文件读取失败,去访问网页下载
herolist_url = "https://pvp.qq.com/web201605/js/herolist.json"
response = requests.get(herolist_url)
self.herolist_json = response.json()
# 提取json文件中英雄id和英雄名称
self.herolist = [(item["ename"],item["cname"]) for item in self.herolist_json]
def crawl(self):
# 构造单个英雄详情url
url = "https://pvp.qq.com/web201605/herodetail/%s.shtml"
# 循环访问每一个英雄详情页
for (ename,cname)