持续创造,加速生长!这是我参与「掘金日新方案 4 月更文应战」的第4天,点击检查活动概况
数据收集
确定网址
王者新赛季马上就要开端了,咱们都开端冲榜了,准备拿一个小省标,那么,本文,就来练习获取各地最低战力的爬虫收集实战。
确定好咱们的方针网址之后,咱们要找到咱们需要的数据源,通过开发者工具剖析,咱们不难发现其数据地址。
恳求URL:
https://www.sapi.run/hero/select.php
恳求方式:
- GET
参数:
参数名 | 必选 | 类型 | 阐明 |
---|---|---|---|
hero | 是 | string | 英豪名 |
type | 是 | string | 选aqq、awx、iqq、iwx |
恳求示例
https://www.sapi.run/hero/select.php?hero=孙悟空&type=aqq
回来示例
{
"code": 200,
"data": {
"uid": "167",
"name": "孙悟空",
"alias": "齐天大圣-孙悟空",
"platform": "安卓-扣扣区",
"photo": "https://game.gtimg.cn/images/yxzj/img201606/heroimg/167/167.jpg",
"area": "武强县",
"areaPower": "3693",
"city": "潮州市",
"cityPower": "5501",
"province": "天津市",
"provincePower": "7274",
"guobiao": "11404",
"stamp": "1654640093",
"updatetime": "2022/06/08 06:14:53",
"clientIP": "119.0.0.126"
},
"msg": " "
}
下面,咱们开端写代码。
获取数据
第一步,发送恳求,取得数据。
import requests
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}
hero_url = 'https://pvp.qq.com/web201605/herolist.shtml'
response = requests.get(url=hero_url, headers=headers)
这段代码中,咱们运用 Python 的requests
模块发送了一个 GET 恳求,恳求的 URL 为https://pvp.qq.com/web201605/herolist.shtml
,而且运用了headers
参数来设置恳求头信息。恳求头信息包含了user-agent
字段,用于指定浏览器的 User-Agent 信息。
恳求回来的结果是一个Response
目标,咱们能够运用response.text
属性来获取恳求的呼应内容。在这个比如中,咱们运用了response.json()
办法来将呼应内容转换为 JSON 格局,并将其存储在response.text
属性中。
response.encoding='gbk'
heros = re.findall('alt=".*?">(.*?)</a>',response.text)[0:93]
这段代码中,咱们运用 Python 的re
模块中的findall()
函数来查找 JSONP 回调函数的参数。findall()
函数能够回来一个列表,其间包含了所有匹配的子字符串。
在这个比如中,咱们运用findall()
函数来查找 JSONP 回调函数的参数,并将其存储在response.text
变量中。然后,咱们运用[0:93]
来获取第一个匹配的子字符串,并将其存储在heros
变量中。
需要注意的是,findall()
函数回来的子字符串列表中或许包含多个匹配的子字符串,因而咱们需要运用[0:93]
来获取第一个匹配的子字符串。
解析数据
咱们发现,咱们得到了这样英豪姓名
的数据,下面,咱们就能够构建url,获取战力信息。
for hero in heros:
print(hero)
url = f'https://www.sapi.run/hero/select.php?hero={hero}&type=qq'
res = requests.get(url)
data = res.json()['data']
name = data['name']
area = data['area']
areaPower= data['areaPower']
city = data['city']
cityPower = data['cityPower']
province= data['province']
provincePower = data['provincePower']
platform= data['platform']
updatetime = data['updatetime']
这段代码中,咱们运用 Python 的requests
模块发送了一个 GET 恳求,恳求的 URL 为https://www.sapi.run/hero/select.php?hero={hero}&type=qq
,而且运用了json()
办法将呼应内容转换为 JSON 格局,并将其存储在res.json()
变量中。
恳求回来的结果是一个Response
目标,咱们能够运用response.json()
办法将呼应内容转换为 JSON 格局,并将其存储在res.json()
变量中。
在这个比如中,咱们运用了res.json()
变量来获取呼应内容,并将其存储在data
变量中。然后,咱们运用name
变量获取了英豪称号,运用area
变量获取了区域姓名,运用areaPower
变量获取了区域战力,运用city
变量获取了市,运用cityPower
变量获取了市战力,运用province
变量获取了省份,运用provincePower
变量获取了省份战力,运用platform
变量获取了渠道,运用updatetime
变量获取了更新时刻。
保存数据
dit = {
'英豪称号':name,
'服务区':platform,
'更新时刻': updatetime,
'铜牌区域':area,
'铜牌分数': areaPower,
'银牌区域':city,
'银牌分数': cityPower,
'金牌区域':province,
'金牌分数':provincePower ,
}
这段代码是一个 Python 代码片段,它界说了一个字典,其间包含了一些英豪的信息,包含英豪称号、服务区、更新时刻、铜牌区域、铜牌分数、银牌区域、银牌分数、金牌区域、金牌分数等。
下面就是数据的写入了。其实,把字典数值写入到csv文件里边,特别简单,只需呀四行代码就能够完成。
f = open('最低战力.csv', mode='a', encoding='utf-8_sig', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['英豪称号', '服务区', '更新时刻', '铜牌区域', '铜牌分数',
'银牌区域', '银牌分数', '金牌区域','金牌分数'])
csv_writer.writeheader()
这段代码翻开了一个名为'最低战力.csv'
的文件,并将其以追加形式翻开。它还指定了文件的编码为 UTF-8 和行结束符为空字符串(newline=''
)。
然后,代码创建了一个csv.DictWriter
目标,并将其与文件目标相关起来。fieldnames
参数指定了字典中的键和值的称号。
接下来,代码调用writeheader()
办法来写入表头。这个办法将字典中的键值对写入文件中,并将其作为表头。
写入字典数值。
csv_writer.writerow(dit)
这时候,咱们就会在文件夹里边找到最低战力的csv文件,咱们翻开看看作用。