Ajax数据爬取

  在spider爬取数据的过程中,有些网页的数据是利用Ajax动态加载出来的,所以,在网页源代码中可能不会看到这一部分的数据,因此,我们需要使用另外的方式进行数据多爬取。

  以豆瓣电影的网页源码获取为例 https://movie.douban.com/ ,我们查看网页源代码,会发现网页中所包含的数据根本不在源代码中,比如查询囧妈,会显示查询结果为0。这时候我们就要注意他可能是使用Ajax进行动态加载的数据。

  F12进入开发者工具,按照下图步骤进行查看

  双击第3步骤中的链接,会发现有一些tag标签,最后会发现有一些数据包含其中。

  有数据的这些连接就是Ajax动态加载的结果了。下面有一个小例子进行简单的运用。

 1 '''
2 @Description: 爬取异步加载数据——以豆瓣网为例
3 @Version: 1.0
4 @Autor: Montoin Yan
5 @Date: 2020-02-01 18:18:05
6 @LastEditors : Montoin Yan
7 @LastEditTime : 2020-02-03 18:50:01
8 '''
9 from urllib import parse
10 from urllib.request import urlopen,Request
11 import simplejson
12 import random
13
14 #设置多个请求头,防止被反扒措施进行拦截
15 ua_list = [
16 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
17 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36",
18 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
19 "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
20 ]
21 #随机pick one
22 ua = random.choice(ua_list)
23
24 #以https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=10&page_start=0 为例
25 #将链接进行分割,将Ajax需要传递的参数存储到字典中
26 url = "https://movie.douban.com/j/search_subjects"
27 d = {
28 'type':'movie',
29 'tag':'热门',
30 'page_limit':'10',
31 'page_start':'0'
32 }
33 request = Request('{}?{}'.format(url,parse.urlencode(d)),headers={
34 'User-agent':ua
35 })
36
37 with urlopen(request) as response:
38 subjects = simplejson.loads(response.read())
39 print(len(subjects['subjects']))
40 s = subjects['subjects']
41 for i in s:
42 print(i)

  结果可以参照以下内容:


 HTTPS跳过证书验证

  引用python自带的ssl库,进行不信任证书的忽略,以12306为例。

 1 '''
2 @Description: HTTPS利用SSL库进行默认信任证书的模拟
3 @Version: 1.0
4 @Autor: Montoin Yan
5 @Date: 2020-02-03 20:18:52
6 @LastEditors : Montoin Yan
7 @LastEditTime : 2020-02-03 20:32:47
8 '''
9
10 from urllib.request import urlopen,Request
11 import random
12 import ssl
13
14 url = "http://www.12306.cn/mormhweb/"
15 ua_list = [
16 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
17 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36",
18 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
19 "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
20 ]
21 #随机pick one
22 ua = random.choice(ua_list)
23 request = Request(url,headers={
24 'User-agent':ua
25 })
26
27 #忽略不信任的证书
28 context = ssl._create_unverified_context()
29
30 #利用urlopen的最后一个参数,强调上下文使得在链接传递的时候忽略证书
31 with urlopen(request,context=context) as response:
32 print(response._method)
33 print(response.read())

Ajax爬取动态数据和HTTPS自动默认证书的更多相关文章

  1. Golang+chromedp+goquery 简单爬取动态数据

    目录 Golang+chromedp+goquery 简单爬取动态数据 Golang的安装 下载golang软件 解压golang 配置golang 重新导入配置 chromedp框架的使用 实际的代 ...

  2. 爬虫系列4:Requests+Xpath 爬取动态数据

    爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...

  3. python 爬取动态数据

    按照:https://dryscrape.readthedocs.io/en/latest/installation.html 安装dryscrape 以下是简单实现 import dryscrape ...

  4. Python 爬虫实例(8)—— 爬取 动态页面

    今天使用python 和selenium爬取动态数据,主要是通过不停的更新页面,实现数据的爬取,要爬取的数据如下图 源代码: #-*-coding:utf-8-*- import time from ...

  5. 吴裕雄--天生自然PYTHON爬虫:安装配置MongoDBy和爬取天气数据并清洗保存到MongoDB中

    1.下载MongoDB 官网下载:https://www.mongodb.com/download-center#community 上面这张图选择第二个按钮 上面这张图直接Next 把bin路径添加 ...

  6. Python爬虫实战(一) 使用urllib库爬取拉勾网数据

    本笔记写于2020年2月4日.Python版本为3.7.4,编辑器是VS code 主要参考资料有: B站视频av44518113 Python官方文档 PS:如果笔记中有任何错误,欢迎在评论中指出, ...

  7. R语言爬取动态网页之环境准备

    在R实现pm2.5地图数据展示文章中,使用rvest包实现了静态页面的数据抓取,然而rvest只能抓取静态网页,而诸如ajax异步加载的动态网页结构无能为力.在R语言中,爬取这类网页可以使用RSele ...

  8. 使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)

    urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...

  9. 使用ajax爬取网站图片()

    以下内容转载自:https://www.makcyun.top/web_scraping_withpython4.html 文章关于网站使用Ajaxj技术加载页面数据,进行爬取讲的很详细 大致步骤如下 ...

随机推荐

  1. AI解决方案:边缘计算和GPU加速平台

    AI解决方案:边缘计算和GPU加速平台 一.适用于边缘 AI 的解决方案 AI 在边缘蓬勃发展.AI 和云原生应用程序.物联网及其数十亿的传感器以及 5G 网络现已使得在边缘大规模部署 AI 成为可能 ...

  2. Recommenders with TensorRT

    Recommenders with TensorRT 推荐系统用于向社交网络.媒体内容消费和电子商务平台的用户提供产品或媒体推荐.基于MLP的神经协作滤波器(NCF)推荐器使用一组完全连接或矩阵乘法层 ...

  3. CVPR2020:三维点云无监督表示学习的全局局部双向推理

    CVPR2020:三维点云无监督表示学习的全局局部双向推理 Global-Local Bidirectional Reasoning for Unsupervised Representation L ...

  4. 如何使用Intel vtune profilier?

    如何使用Intel vtune profilier?

  5. kali2020.4中安装nessus 8.14.0

    1.下载软件包 官网下载地址:https://www.tenable.com/downloads/nessus 2.安装nessus dpkg -i /root/Nessus-8.14.0-debia ...

  6. 【NX二次开发】Block UI 集列表

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  7. Pipeline模式与Factory+Provider模式的应用

    前言 我正在写FastGithub这个小麻雀项目,里面主要涉及了Pipeline模式和Factory+Provider模式,这两种设计模式,让这个项目在"ip扫描"和"i ...

  8. GlusterFS更换Brick

    故障环境还原 GlusterFS集群系统一共有4个节点,集群信息如下 # 分别在各个节点上配置hosts.同步好系统时间,关闭防火墙和selinux [root@glusterfs-master-8 ...

  9. 『无为则无心』Python基础 — 9、Python字符串的编码与转义

    目录 1.查看变量类型 2.转义字符 (1)转义字符说明 (2)示例 (3)常用转义字符对照表 3.字符编码 (1)字符编码介绍 (2)Python中的字符编码 (3)编码格式应用于不同场景 提示:上 ...

  10. 【学习】自定义view

    自定义控件其实很简单1/2   Canvas的使用 自定义控件其实很简单1/3   Shader与画布的旋转 自定义控件其实很简单2/3   view的测量 自定义控件其实很简单1/4   FontM ...