Ajax,是利用JavaScript在保证页面不被刷新,页面链接不改变的情况下与服务器交换数据并更新部分网页的技术。简单的说,Ajax使得网页无需刷新即可更新其内容。举个例子,我们用浏览器打开新浪微博,进入某个用户的页面,当我们浏览到该页末尾时,会出现一个加载的动画,然后就刷新出来的新的微博内容,这个过程并不需要我们手动的刷新网页。

Ajax的原理:发送Ajax请求到网页更新的这个过程可分为三步:

1.发送请求

2.解析内容

3.渲染网页

详细的原理介绍可参照:https://www.cnblogs.com/wanghp/p/6991554.html

简单的说,JavaScript新建了一个XMLHttpRequest对象,然后调用onreadystatechange属性设置了监听,然后调用open()方法和send()方法向服务器发送了请求,当服务器返回响应时,监听对应的方法便会触发,然后在方法里解析响应的内容,从而实现了无需刷新便能更新网页。

那么如何查看Ajax请求呢?以爬取哔哩哔哩番剧索引追番人数排行为例,我们使用Chrome浏览器打开https://www.bilibili.com/anime/index/#season_version=-1&area=-1&is_finish=-1&copyright=-1&season_status=-1&season_month=-1&pub_date=-1&style_id=-1&order=3&st=1&sort=0&page=1,并按F12打开开发者工具,如图所示:

在开发者工具中切换到Network选项卡,然后重新刷新页面,筛选XHR请求类型,如图所示:

在左边找到我们需要爬取的Ajax请求,即

点击header可以查看该请求的header信息,之后我们会用到。

Preview是该请求返回的响应内容,包含了我们所要爬取的信息。

接下来我们以爬取b站追番人数排行榜为例来介绍如何提取Ajax结果:

首先在header中找到请求链接,即Request URL:

接着找到该请求的参数信息:

观察到每次翻页,page参数+1,其他参数没有改变,所以我们每次请求时只需要改变page参数即可。

下面给出代码示例:

1 from urllib.parse importurlencode2 importrequests3 importtime4 importcsv5 importos6

7 base_url = "https://bangumi.bilibili.com/media/web_api/search/result?"

8

9 headers ={10 'Host':'bangumi.bilibili.com',11 'Referer':'https://www.bilibili.com/anime/index/',12 'User_Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',13 'Origin': 'https://www.bilibili.com',14 }15

16 defget_page(page):17 #参数

18 params ={19 'season_version':'-1',20 'area': '-1',21 'is_finish': '-1',22 'copyright': '-1',23 'season_status': '-1',24 'season_month':'-1',25 'pub_date': '-1',26 'style_id': '-1',27 'order': '3',28 'st': '1',29 'sort': '0',30 'page': page,31 'season_type':'1',32 'pagesize':'20'

33 }34 url = base_url +urlencode(params)35 try:36 response = requests.get(url,headers=headers,allow_redirects=False)37 #将内容解析为json格式返回

38 returnresponse.json()39 exceptrequests.ConnectionError as e:40 print('Error',e.args)41

42 defparse_page(json):43 ifjson:44 items = json.get('result').get('data')45 for item initems:46 ret ={}47 ret['title'] = item.get('order').get('title')48 ret['score'] = item.get('order').get('score')49 ret['play'] = item.get('order').get('play')50 ret['follow'] = item.get('order').get('follow')51 ret['index_show'] = item.get('index_show')52 ret['is_finish'] = item.get('is_finish')53 yielditem54

55 #写入文件

56 defwrite_to_file(items):57 with open("bilibili.csv","a+") as csvfile:58 writer =csv.writer(csvfile)59 for item initems:60 print(item)61 writer.writerow([item['order']['follow'],item['title'],item['order']['score'],62 item['order']['play'],item['index_show'],item['is_finish']])63

64

65 defmain(offset):66 json =get_page(offset)67 results =parse_page(json)68 write_to_file(results)69 return070

71

72 if __name__ == '__main__':73 for page in range(1,11):74 main(offset=page)75 time.sleep(1)76

77

运行结果:

php获取哔哩哔哩追番_Ajax介绍及爬取哔哩哔哩番剧索引追番人数排行相关推荐

  1. python 软件开发 哔哩哔哩_介绍Python爬取哔哩哔哩视频

    栏目介绍如何爬取视频 相关免费学习推荐: 本篇文章主要给大家讲解下如实使用python 爬取哔哩哔哩中的视频,首先我是一名大数据开发工程师,爬虫只是我的一个业余爱好,喜欢爬虫的小伙伴可以一起交流.好了 ...

  2. 如何用python爬取视频_介绍Python爬取哔哩哔哩视频

    python视频教程栏目介绍如何爬取视频 本篇文章主要给大家讲解下如实使用python 爬取哔哩哔哩中的视频,首先我是一名大数据开发工程师,爬虫只是我的一个业余爱好,喜欢爬虫的小伙伴可以一起交流.好了 ...

  3. Python番外篇:爬取CSDN作者排行榜数据

    今天,又双叒叕是番外篇,我们来爬取CSDN作者排行榜上的数据. 1. 确定数据源 首先,排行榜的网页链接是https://blog.csdn.net/rank/list/total: 打开" ...

  4. python爬虫获取的网页数据为什么要加[0-使用 Python 爬取网页数据

    1. 使用 urllib.request 获取网页 urllib 是 Python 內建的 HTTP 库, 使用 urllib 可以只需要很简单的步骤就能高效采集数据; 配合 Beautiful 等 ...

  5. scrapy获取a标签的连接_python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求[前期准备] 2.分析及代码实现(1)获取五大板块详情页url(2)解析每个板块(3)解析每个模块里的标题中详情页信息 点击此处,获取 ...

  6. python 获取qq群成员信息_教你用python爬取自己加入的QQ群成员名单,它们竟然是这样的人...

    本次实验环境: 操作系统:Mac OS 开发语言:python 3.6 IDE:jupyter notebook(建议使用) 浏览器:Chrome(版本75.0.3770.100) 需要用到的库:se ...

  7. python获取币安k线数据_如何利用Python 爬取币乎的数据

    1LSGO软件技术团队 贡献人:李金原 如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习. If you like the content here, the gre ...

  8. c#使用正则表达式获取TR中的多个TD_使用python+BeautifulSoup爬取微博热搜榜

    本文将介绍基于Python使用BeautifulSoup爬取微博热搜榜的实现过程 1.首先导入需要使用的库 from bs4 import BeautifulSoup from urllib.requ ...

  9. java获取b站动态列表地址_爬虫入门(三)爬取b站搜索页视频分析(动态页面,DBUtils存储)...

    这一次终于到了分析b站视频了.开始体会到写博客非常占用学技术的时间,但是还是希望能总结,沉淀下来. 工具:使用Webmaigc框架,DBUtils,C3P0连接池. 分析过程:b站的搜索页面是这样的. ...

最新文章

  1. 用vs2010打开使用vs2013升级后的WP工程
  2. 免费GPU哪家强?谷歌Kaggle vs. Colab
  3. Java 语言 集合架构(Set规则集)
  4. 把代码放到服务器文件夹,怎么将本地代码传到云服务器
  5. silverlight控件打印预览
  6. linux中更改文件所有者
  7. hystrix 页面_微服务 | 使用Hystrix实现Spring Cloud的熔断机制
  8. failed to open log file_C++中glog源码剖析以及如何设计一个高效 log模块
  9. Laravel 日志权限问题
  10. linux平台下使用boost库
  11. python中返回上一步操作_通过实例解析Python文件操作实现步骤
  12. 用控制台怎么编译java程序_怎么在cmd中运行java控制台程序?
  13. 雷军:执掌金山纯属意外
  14. win10语音识别的设置和开启
  15. 拼写的能力和重要性英语作文_拼写很重要吗? 我认为是的。
  16. 树的计数 Prufer序列+Cayley公式
  17. 全部口罩机3D图纸图档打包
  18. Au入门系列之六:多轨剪辑编辑
  19. 【服务器数据恢复】某银行服务器磁盘阵列多块硬盘掉线的数据恢复案例
  20. 用python监控A股股票波动并发送预警邮件_V3

热门文章

  1. 这届“新国货”很牛!天猫新零售驱动新制造
  2. android 360游戏sdk,360ssp sdk接入说明 360移送媒体平台Android SDK 接入说明
  3. 【Flutter】Dart 校验身份证号合法性,根据身份证号获取年龄性别
  4. MassGrid(MGD)双周报第30期(4.27-5.10)
  5. WARNING: erroneous pipeline: no element ffdec_h264解决方案
  6. Typora图片自动上传插件
  7. nginx配置ssl证书流程及常见问题
  8. 函数式javascript_JavaScript第二部分中的函数式编程
  9. 牛客网——牛牛的通勤
  10. 产品思维训练 | 新用户从注册到绑卡流失率很高是什么原因?