动态加载数据抓取-Ajax

  • 特点
1、右键 -> 查看网页源码中没有具体数据
2、滚动鼠标滑轮或其他动作时加载
  • 抓取
1、F12打开控制台,页面动作抓取网络数据包
2、抓取json文件URL地址
# 控制台中 XHR :异步加载的数据包
# XHR -> QueryStringParameters(查询参数)

豆瓣电影数据抓取案例

  • 目标
1、地址: 豆瓣电影 - 排行榜 - 剧情
2、目标: 电影名称、电影评分
  • F12抓包(XHR)
1、Request URL(基准URL地址) :https://movie.douban.com/j/chart/top_list?
2、Query String(查询参数)
# 抓取的查询参数如下:
type: 13
interval_id: 100:90
action: ''
start: 0
limit: 用户输入的电影数量
  • json模块的使用
1、json.loads(json格式的字符串):把json格式的字符串转为python数据类型
# 示例
html = json.loads(res.text)
print(type(html))
  • 代码实现
import requests
import jsonclass DoubanSpider(object):def __init__(self):self.url = 'https://movie.douban.com/j/chart/top_list?'self.headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'}# 获取页面def get_page(self,params):res = requests.get(url=self.url,params=params,headers=self.headers,verify=True)res.encoding = 'utf-8'# json.loads() josn格式->Python格式html = res.json()self.parse_page(html)# 解析并保存数据def parse_page(self,html):# html为大列表 [{电影1信息},{},{}]for h in html:# 名称name = h['title'].strip()# 评分score = float(h['score'].strip())# 打印测试print([name,score])# 主函数def main(self):limit = input('请输入电影数量:')params = {'type' : '24','interval_id' : '100:90','action' : '','start' : '0','limit' : limit}# 调用函数,传递params参数self.get_page(params)if __name__ == '__main__':spider = DoubanSpider()spider.main()

腾讯招聘案例

  • URL地址及目标
  1. 确定URL地址及目标

    1、URL: 百度搜索腾讯招聘 - 查看工作岗位
    2、目标: 职位名称、工作职责、岗位要求
    
  2. F12抓包

  3. 一级页面json地址(index变,timestamp未检查)

https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1563912271089&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=&pageIndex={}&pageSize=10&language=zh-cn&area=cn
  1. 二级页面地址(postId在变,在一级页面中可拿到)
https://careers.tencent.com/tencentcareer/api/post/ByPostId?timestamp=1563912374645&postId={}&language=zh-cn
  • 具体代码实现
import requests
import json
import time
import randomclass TencentSpider(object):def __init__(self):self.headers = {'User-Agent':'Mozilla/5.0'}self.one_url = 'https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1563912271089&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=&pageIndex={}&pageSize=10&language=zh-cn&area=cn'def get_page(self,url):res = requests.get(url,headers=self.headers)res.encoding = 'utf-8'# json.loads()把json格式的字符串转为python数据类型html = json.loads(res.text)return htmldef parse_one_page(self,html):job_info = {}for job in html['Data']['Posts']:job_info['job_name'] = job['RecruitPostName']job_info['job_address'] = job['LocationName']# 拿postid为了拼接二级页面地址post_id = job['PostId']# 职责和要求(二级页面)# 得到二级页面链接two_url = 'https://careers.tencent.com/tencentcareer/api/post/ByPostId?timestamp=1563912374645&postId={}&language=zh-cn'.format(post_id)# 发请求解析job_info['job_duty'],job_info['job_requirement'] = self.parse_two_page(two_url)print(job_info)def parse_two_page(self,two_url):html = self.get_page(two_url)# 职责job_duty = html['Data']['Responsibility']# 要求job_requirement = html['Data']['Requirement']return job_duty,job_requirementdef main(self):for index in range(1,11):url = self.one_url.format(index)one_html = self.get_page(url)self.parse_one_page(one_html)time.sleep(random.uniform(0.5,1.5))if __name__ == '__main__':spider = TencentSpider()spider.main()

附git地址:https://github.com/RyanLove1/spider_code

补充:

控制台抓包

  • 打开方式及常用选项
1、打开浏览器,F12打开控制台,找到Network选项卡
2、控制台常用选项1、Network: 抓取网络数据包1、ALL: 抓取所有的网络数据包2、XHR:抓取异步加载的网络数据包3、JS : 抓取所有的JS文件2、Sources: 格式化输出并打断点调试JavaScript代码,助于分析爬虫中一些参数3、Console: 交互模式,可对JavaScript中的代码进行测试
3、抓取具体网络数据包后1、单击左侧网络数据包地址,进入数据包详情,查看右侧2、右侧:1、Headers: 整个请求信息General、Response Headers、Request Headers、Query String、Form Data2、Preview: 对响应内容进行预览3、Response:响应内容

python中正则处理headers和formdata

1、pycharm进入方法 :Ctrl + r ,选中 Regex
2、处理headers和formdata(.*): (.*)"$1": "$2",
3、点击 Replace All

python爬虫之Ajax动态加载数据抓取--豆瓣电影/腾讯招聘相关推荐

  1. 爬虫Spider 05 - 代理参数-proxies | 控制台抓包 | requests.post() | 动态加载数据抓取-Ajax

    文章目录 Spider 04回顾 requests.get()参数 常见的反爬机制及处理方式 Spider 05笔记 代理参数-proxies **控制台抓包** **requests.post()参 ...

  2. 爬虫案例:ajax异步加载,爬取豆瓣电影排行榜

    from urllib.request import Request,urlopen from fake_useragent import UserAgent #导入相应的库 base_url ='h ...

  3. 关于使用scrapy框架编写爬虫以及Ajax动态加载问题、反爬问题解决方案

    关于使用scrapy框架编写爬虫以及Ajax动态加载问题.反爬问题解决方案 参考文章: (1)关于使用scrapy框架编写爬虫以及Ajax动态加载问题.反爬问题解决方案 (2)https://www. ...

  4. echarts在.Net中使用实例(二) 使用ajax动态加载数据

    通过上一篇文章可以知道和echarts参考手册可知,series字段就是用来存储我们显示的数据,所以我们只需要用ajax来获取series的值就可以. option 名称 描述 {color}back ...

  5. [Python][爬虫04]Fiddler与HTTP请求:抓取豆瓣评分以及资源链接(一)

    >豆瓣电影 首先,找到豆瓣电影的分级评分页面,并初步分析页面结构: 然而实际上,这个页面是动态加载的,我们需要按照在[爬虫02]中介绍的抓取网易歌单的方法,去分析API接口,直接抓取相关的jso ...

  6. Python爬虫实战之二 - 基于Scrapy框架抓取Boss直聘的招聘信息

    Python爬虫实战之三 - 基于Scrapy框架抓取Boss直聘的招聘信息 ---------------readme--------------- 简介:本人产品汪一枚,Python自学数月,对于 ...

  7. echarts html ajax,ECharts+Ajax动态加载数据实例(.NET)

    什么是ECharts ECharts 是一个数据可视化工具,提供了系列常用图表,底层基于ZRender(一个全新的轻量级canvas类库),创建了坐标系,图例,提示,工具箱等基础组件,并在此上构建出折 ...

  8. 【Python 爬虫简单的JavaScript逆向实战】抓取中国电影票房的数据

    开篇闲聊 最近也是看完了崔庆才爬虫52讲里面JavaScript逆向部分,里面介绍了从简单到复杂整个JavaScript逆向的方法,里面也有一些实战案例(可以练习的),跟着视频练习之后,虽然也成功了, ...

  9. java抓取网页数据_Golang丨Java丨Python爬虫实战—Boss直聘网站数据抓取

    我们分别通过Golang.Python.Java三门语言,分别实现对Boss直聘网站的招聘数据进行爬取. 首先打开Boss直聘网站: 然后我们在职位类型中输入Go或者Golang关键字: 然后我们可以 ...

最新文章

  1. 送书拉!给开发者们的几本书籍 |福利
  2. July大神---SVM讲解
  3. Python 过滤字母和数字
  4. 使用 Wireshark 对本地 socket 通信进行数据抓包
  5. java简述什么是标识符_Java概述(标识符、变量、基本数据类型)
  6. 工作335:uni-增加表单验证
  7. oracle sql 语句 start with ...... connect by prior .......
  8. LeetCode(447)——回旋镖的数量(JavaScript)
  9. 【HDOJ4699】Editor(对顶栈,模拟)
  10. 【UX/UI原型模板】中国地图元件库操作说明(省份+直辖市+自治区+行政特区详细地图)
  11. Asp 解析 XML并分页显示
  12. zbbix服务器搭建_Linux系统搭建Zabbix监控服务器
  13. 组件测试 软件,测试AUTOSAR软件组件的测试方法及系统专利_专利查询 - 天眼查
  14. python--手机步数----微信运动--支付宝运动等步数刷新
  15. K - 链表的有序集合_Java
  16. 大论文 自动生成标题目录、图目录和表目录
  17. 享受知识饕餮盛宴,尽在2014年课程
  18. Matlab中lsim函数使用
  19. elasticsearch安装配置
  20. python实现图片拼接长图_python实现图像拼接

热门文章

  1. 怎样快速将PPT文件转换成Word
  2. 《STM32从零开始学习历程》——CAN相关结构体
  3. 群晖和威联通NAS的区别
  4. 普通人怎么在一年内赚到100万?
  5. el-table 动态生成多级表头
  6. 利用老毛桃pe启动U盘启动ubuntu.iso,完成ubuntu系统的安装
  7. 关于人脸识别,一篇很好的文章
  8. 调整计算机启动顺序,电脑双硬盘双系统bios调整硬盘启动顺序的图文教程
  9. Java SE EE ME
  10. vue中的属性方法computed与methods的区别