LOL峡谷之巅前500爬取
第一次爬取动态网页,晚上再来重新整理一下思路。
动态网页不同于静态网页,本次网页表面的url:http://lol.qq.com/act/a20170704super/ranking.shtml
但是在翻页时url并没有改变。可以说这是一个虚假的url。
而真正的url需要我们自己去寻找。
首先,我们要寻找真正的url
第一步先查看网页代码,点开network,选择JS
在我们点击翻页时会发现这里会加载出一些文件,点开
我们可以发现这里有一个Request URL,通过观察这几个包的Request URL,删除一些觉得不必要的东西,可以总结出真正的url=http://apps.game.qq.com/lol/a20150928lolRF/TopCanyonRank.php?module=UserRankList&e_num=25&Page=页数,
然后点击response查看点击换页时服务器的响应
可以看到这里加载了一个json格式的数据。去掉前面的var J_TopCanyonRank = 我们将内容到https://www.json.cn/#解析可以看到
这个就是我们另一个页面的内容。
最终我们可以通过爬取我们寻找的url来获取这个json格式的数据,解析并进行提取,就可以得到我们想要的内容了。
废话不多说,开代码:
import requests
import re
import json
import csvfp = open('F:/峡谷之巅.csv','wt',newline='',encoding='utf-8')
writer = csv.writer(fp)
writer.writerow(['排名','名称','段位','胜点','胜率'])headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36","Referer": "http://lol.qq.com/act/a20170704super/ranking.shtml"
}def explain_html(fins):for fin in fins:rank = fin.get('iRank')#排名name = fin.get('name')#玩家IDpan = fin.get('tier')#一个判断,获取的值是31是玩家的段位是最强王者,30是傲视宗师if pan == '31':location = '最强王者'else:location = '傲视宗师'point = fin.get('league_points')#胜点win = fin.get('total_wins')#赢得次数los = fin.get('total_losses')#输的次数pat = int(win) / (int(win) + int(los))#数据中没有直接给出胜率,只有输赢次数,我们需要自己来计算rate = str(int(pat * 100)) + "%"writer.writerow([rank, name, location, point, rate])#将以上获取的一组数据存储到Excel文档if __name__ == '__main__':urls = ["http://apps.game.qq.com/lol/a20150928lolRF/TopCanyonRank.php?module=UserRankList&e_num=25&Page={}".format(i) for i in range(1,21)]#动态抓包获取页面滚动链接的规律,然后爬取链接for url in urls:r = requests.get(url,headers = headers)needs = re.findall('var J_TopCanyonRank = (.*)',r.text,re.S)#爬取的数据是json数据,以字典形式存储# 需要过滤掉这个var J_TopCanyonRank = ,这个会妨碍JSON数据的解析results = json.loads(needs[0])fins = results.get('UserRankList').get('list')#获取对应键的值,就是我们要爬的大体内容explain_html(fins)#调用函数获取关键信息fp.close()
最终结果
最后在总结一下个人爬取这个网页的感想:
动态网页提取信息思路:
一般动态网页在翻页时,屏幕上的url是没有变化的,那可以说是假的url
而真正的url需要去抓包获取。
1.抓包,找到url变化规律。
2.遍历url,用requests.get提取页面信息。
3.用信息提取方法(re,xpath或BeautifulSoup)提取需要信息
4.用json.loads()解析信息
5.用get()逐步获取字典中键对应的值,因为json格式是一个很大的字典,可以说是字典
之中嵌套着字典,而我们要获取的数据可以说是最里面的一层(字典)数据,
所以要一步一步的得到值,一直到最后的值是一个有关提取信息的字典时就
可以get()其中的有用的关键值进行爬取和存储了。
LOL峡谷之巅前500爬取相关推荐
- 英雄联盟峡谷之巅前100爬取(动态网页+json格式解析)
目的是爬取英雄联盟官网的峡谷之巅前100的信息,经观察发现,每一页只有25个玩家的信息. 先看网页源代码 看到前面,结构清晰,很好抓取. 到了中间部分发现只有前25个,后面的数据貌似被隐藏了.在此处可 ...
- 进击的爬虫-003-beautifulsoup实现猫眼电影前100爬取
BeutifulSoup beautifulsoup是python的一个xml , html解析库, 借助网页的结构和属性等特性来解析网页,只需要简单的几条语句, 就可以用来方便的从网页中提取数据 选 ...
- 将豆瓣排名前250爬取数据通过sqlite3存入数据库
#爬取豆瓣top250电影,并保存到数据库 import requests from bs4 import BeautifulSoup import sqlite3def get_html(web_u ...
- python xpath爬取电影top100_进击的爬虫-002-xpath实现猫眼电影前100爬取
nodename : 选取此节点的所有子节点 / : 从当前节点选取直接子节点 // : 从当前节点选取子孙节点 . : 选取当前节点 .. : 选取当前节点的父节点 @ : 选取属性 3. 使用 3 ...
- python爬取网易云歌单
写在前面: 我的博客已迁移至自建服务器:博客传送门,CSDN博客暂时停止,如有机器学习方面的兴趣,欢迎来看一看. 此外目前我在gitHub上准备一些李航的<统计学习方法>的实现算法,目标将 ...
- python爬虫:爬取pixiv图片
自从接触python以后就想着爬pixiv,之前因为梯子有点问题就一直搁置,最近换了个梯子就迫不及待试了下. 爬虫无非request获取html页面然后用正则表达式或者beautifulsoup之类现 ...
- lol峡谷之巅区服务器位置,lol峡谷之巅资格申请地址 lol峡谷之巅奖励领取地址...
为各位带来lol峡谷之巅资格申请地址,想要参与到大神对战的各位玩家只要达到了钻石以上的段位即可参与到lol峡谷之巅资格赛,赢取各种奖励,下面我们就来看一看lol峡谷之巅奖励领取地址吧. lol峡谷之巅 ...
- 谷歌插件webscraper使用问疑难杂症(插件页面跑到右边+爬取内容乱序+自定义选择多个列表+滚动抓取社交发帖+select鼠标无法选中元素+无法识别表格+插件支持范围+爬取数据与原始顺序不一致+)
博客目录 谷歌插件webscraper使用问疑难杂症解决 1.插件打开后跑到了右边 2.爬取内容乱序 3.mac的支持这个插件吗 4.除了谷歌外,火狐.IE.360等浏览器支持吗 5.自定义选择多个列 ...
- 爬取酷狗音乐网站,上榜单前500名的歌曲名称!
爬取网络数据 1.1首先读取网站` https://www.kugou.com/yy/rank/home/1-6666.html?from=rank` 1.2定义用beautifulsoup选取HTM ...
最新文章
- 设置VSCode快速切换多个项目窗口的快捷键Alt+E
- 中国SaaS死或生之三:SaaS SCM能否上演绝地求生?
- 快速解决正则----模糊匹配、字符类、量词
- 二叉堆(最小堆)(数据结构与算法分析的代码实现)
- 强大的uml java_IDEA 还是强大啊,一键把项目生成 UML 类图…
- 【Luogu3931】SAC E#1 - 一道难题 Tree
- 51nod1355 斐波那契的最小公倍数
- [RHEL5企业级Linux服务攻略]--第11季 NIS服务全攻略
- 企业级项目实战讲解!Java获取某个日期的前一天
- ArcGIS按属性选择多个地类
- 【Camera】通过查看位置方向的平面进行灵活的相机校准
- 客户成功团队的 OKR 案例
- 从希腊神话到好莱坞大片,人工智能的七大历史时期值得铭记
- CC26xx(CortexM3) IO Control
- 中国海上风电装备行业经济效益评价与投资战略规划展望报告2022-2028年版
- gpio操作实现人体感应灯(一)
- 利用PaddleOCR训练车牌识别模型
- 【Python语言基础】——Python NumPy 数组副本 vs 视图
- 【Canal】canal部署
- Python错误集锦:pandas读取excel提示ImportError: Missing optional dependency ‘xlrd’.