scrapy入门实战练习(三)----抓取AJAX异步加载网页

深度解析:网络爬虫抓取动态网页数据的实战指南 抓取动态网页数据虽然充满挑战,但通过合理使用 Selenium、Scrapy + Splash 等工具和框架,结合优化与反爬虫应对策略,我们能够突破重重阻碍,高效获取所需数据。同时,选择合适的数据存储方式也至关重要,CSV、JSON、SQLite 和 MongoDB 等存储方式各有优劣,需要根据实际需求进行选择。在实际应用中,要根据不同网站的特点选择合适的抓取方法和存储方式,并严格遵守法律法规和网站的使用条款,做到合法合规的数据采集。 阅读详情

转自知乎网


工具和环境

  1. 语言:python 2.7
  2. IDE: Pycharm
  3. 浏览器:Chrome
  4. 爬虫框架:Scrapy 1.3.3

什么是AJAX?

AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。

AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。

AJAX 是一种用于创建快速动态网页的技术。

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

两个Chrome插件

Toggle JavaScript

这个插件可以帮助我们快速直观地检测网页里哪些信息是通过AJAX异步加载而来的,具体怎么用,下面会详细讲解。
chrome商店下载地址:chrome.google.com/webst(Ps:打不的小伙伴自行百度搜索国内提供chrome插件下载的网站离线安装)

JSON-handle

这个插件可以帮我们格式化Json串,从而让我们以一个更友好的方式查看Json内的信息。 chrome商店下载地址:chrome.google.com/webst(Ps:打不的小伙伴自行百度搜索国内提供chrome插件下载的网站离线安装)

分析过程

分析页面是否采用AJAX

上次我们拿了豆瓣当做例子,刚好我发现了豆瓣有AJAX异步加载的页面,这次我们就不换了,还拿豆瓣做例子。(逃
首先我们打开豆瓣电影分类排行榜 - 动作片栏目。


打开过后你有没有发现什么不一样的地方呢?如果你的网速慢你会发现下面的电影信息是在网页别的部分出现后才慢慢出现的,试着把界面往下滑会不断有新的电影信息更新出来。
遇到这种情况初步就可以认定这个页面是采用AJAX异步加载的,你也可以通过右键查看网页源码来鉴别。比如说你右键查看源码ctrl+f搜索这个杀手不太冷这几个字,你会发现源码里没有。


上面的方法虽然能用,但是总感觉有点笨。还记得上面推荐的那个chrome插件Toggle JavaScript吗?


安好这个插件它就会出现在chrome浏览器的右边,试着轻轻点一下。


我的天呐!这么神奇吗?!刚才的电影信息都不见了!还记得AJAX的介绍吗?AJAX = 异步 JavaScript和XML。当我们点击了插件就代表这个我们封禁了JavaScript,这个页面里的JavaScript代码无法执行,那么通过AJAX异步加载而来的信息当然就无法出现了。通过这种方法我们能快速精确地知道哪些信息是异步加载而来的。

如何抓取AJAX异步加载页面

对于这种网页我们一般会采用两种方法:

  1. 通过抓包找到AJAX异步加载的请求地址;
  2. 通过使用PhantomJS等无头浏览器执行JS代码后再对网页进行抓取。

通常情况下我会采用第一种方法,因为使用无头浏览器会大大降低抓取效率,而且第一种方法得到的数据格式往往以Json为主,非常干净。在这里我只讲解第一种方法,第二种方法作为爬虫的终极武器我会在后续的教程中进行讲解。
回到我们需要抓取的页面,还记得我说过页面的一个细节吗,下拉更新。进入页面后我们按F12打开chrome浏览器的开发者工具选择Network,然后实现一次下拉更新。


你会在Network里发现一个Response为Json格式的请求,仔细看看Json里的内容你会明白这些都是网页上显示的电影信息。右键该请求地址选择Open Link in New Tab,如果你装了JSON-handle插件你会以下面这种更友好的方式查看这个Json串。

接着再让我们看一该请求的Header信息。


首先我们可以看出这是一个get请求,多看几个下拉请求的地址后你会发现地中的start=xxx在不断变化,每次增加20。所以我们只用更改这个参数就可以实现翻页不断获取新数据(Ps:修改其他的参数也会有不同的效果,这里就不一一细说了,留给大家慢慢地探索)。 spider代码如下:

# -*- coding: utf-8 -*-
# @Time     : 2017/4/9 14:32
# @Author   : woodenrobot


import re
import json


from scrapy import Request
from scrapy.spiders import Spider
from scrapyspider.items import DoubanMovieItem


class DoubanAJAXSpider(Spider):
    name = 'douban_ajax'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36',
    }

    def start_requests(self):
        url = 'https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=0&limit=20'
        yield Request(url, headers=self.headers)

    def parse(self, response):
        datas = json.loads(response.body)
        item = DoubanMovieItem()
        if datas:
            for data in datas:
                item['ranking'] = data['rank']
                item['movie_name'] = data['title']
                item['score'] = data['score']
                item['score_num'] = data['vote_count']
                yield item

            # 如果datas存在数据则对下一页进行采集
            page_num = re.search(r'start=(\d+)', response.url).group(1)
            page_num = 'start=' + str(int(page_num)+20)
            next_url = re.sub(r'start=\d+', page_num, response.url)
            yield Request(next_url, headers=self.headers)

在Scrapy工程文件的spiders里写好爬虫文件后在settings.py所在的目录下打开终端运行以下代码就能输出相应的电影数据。

scrapy crawl douban_ajax -o douban_movie.csv

代码Github地址: github.com/Wooden-Robot

结尾

整片文章主要以介绍思路为主,抓取的站点也只是做示范内容并不重要。授之以鱼不如授之以渔,希望大家可以从这篇教程里学到解决问题的方法与思路。: )


如何用Python爬虫抓取AJAX动态加载的数据:实战技巧与破解策略 本文介绍了如何用Python爬取AJAX动态加载的数据。首先解释了AJAX技术的特点及其对爬虫的挑战,然后详细讲解了三种抓取方法:1)使用requests库直接模拟AJAX请求;2)利用Selenium模拟浏览器渲染;3)结合Scrapy和Splash处理JavaScript渲染。文章还提供了识别AJAX请求的实用技巧,包括使用浏览器开发者工具分析网络请求。通过掌握这些方法,可以有效抓取动态加载的网页数据,同时强调了遵守网站爬取规则的重要性。 阅读详情

相关推荐

Scrapy系列—豆瓣网:爬取动态网页(异步加载数据)

豆瓣网的数据都是通过ajax异步加载上去的,所以我们按照xpath的方式提取数据是提取不完整的 第一步:确定爬取的URL并找到参数规律 1.进入到爬取的目标界面 进入到豆瓣网,点击分类,会显示出下图的界面 2.找到Ajax的请求信息 打开chrome的开发者工具刷新下界面 选中Network→XHR,然后就会看到ajax请求的url和参数了 3.分析数据结构...

qq_41622603的博客 2563

Scrapy爬虫框架教程(四)-- 抓取AJAX异步加载网页

  欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章     sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm_source=cp-400000000398149&u...

weixin_34007906的博客 960

python爬取ajax网页,用json形式获取数据,并存入excel中

某疾病下SNP与gene关联关系下载,采用python爬取ajax网页,用json形式获取数据,并存入excel中。亲测可行。主要是获得https的隐藏url, 具体百度都有。

Scrapy+Selenium爬取异步加载网页并部署到Linux-Debain服务器完整教程

Scrapy,爬虫,异步加载

焦糖呱呱子的博客 2485

python爬取Ajax动态加载网页过程解析

常见的反爬机制及处理方式 1、Headers反爬虫 :Cookie、Referer、User-Agent 解决方案: 通过F12获取headers,传给requests.get()方法 2、IP限制 :网站根据IP地址访问频率进行反爬,短时间内进制IP访问 解决方案: 1、构造自己IP代理池,每次访问随机选择代理,经常更新代理池 2、购买开放代理或私密代理IP 3、降低爬取的速度 3、User-Agent限制 :类似于IP限制 解决方案: 构造自己的User-Agent池,每次访问随机选择 5、对查询参数或Form表单数据认证(salt、sign) 解决方案: 找到JS文件,分析JS处理方法

基于CY7C68013A芯片的USB2.0设计

基于FPGA的USB2.0读写控制项目简介CY7C68013A芯片介绍CY7C68013A芯片读写时序控制CY7C68013A芯片读写代码USB2.0的测试结果结束语 项目简介 我们前面已经写过了USB3.0的FPGA实现,所用到的芯片是FX600Q芯片,这次我们讲解USB2.0的FPGA代码的编写。我们用到的芯片是Cypress厂家的Cy7C68013A,该款芯片在市场上的应用率极广,我们这里不...

zhangningning1996的博客 1万+

Python爬虫入门系列之Scrapy爬取Ajax网页

在前几篇博客中,我们学习了如何使用Scrapy框架爬取静态和动态网页。然而,有些网页使用Ajax技术加载数据,这就需要我们使用特殊的方法来获取这些网页的内容。本篇博客将介绍如何使用Scrapy爬取Ajax网页。

Jamson 1441

安卓APP通过CH340实现USB串口通信与设备检测

本文详细介绍了安卓APP通过CH340芯片实现USB串口通信与设备检测的完整流程。从CH340芯片的基础原理到开发环境搭建,再到串口通信的具体实现和错误处理,提供了全面的技术指导。文章还分享了USB热插拔处理、自动重连策略以及性能优化等实战技巧,帮助开发者高效完成安卓与嵌入式设备的通信开发。

weixin_42531925的博客 381

Python爬虫——获取ajax异步加载数据

在我们访问网页的时候,经常会看到一种技术,当我们点击了一个选项卡或者其他的链接,网页数据发生了改变,但是网址却没有发生任何变化,那么这种技术就是ajax异步加载数据,当我们点击一个链接的时候,它只是发送了一个数据包过来,然后只是将这个数据包的数据进行了替换,这样的好处就是我们进行网页访问的时候可以更加简洁高效,也更加的节省资源,但是这对于我们爬取数据的要求就更高了,那么我们接下来来看一下怎么爬取异...

geeknuo的博客 4714

卡尔曼滤波与目标追踪

卡尔曼滤波与目标追踪为什么要学卡尔曼滤波?卡尔曼滤波是什么?一些概率论的知识基础卡尔曼滤波完整推导状态估计计算卡尔曼增益预测和更新 卡尔曼滤波部分我打算分三节(三次博客的内容): 卡尔曼滤波与行人状态估计 扩展卡尔曼滤波(EKF)与传感器融合 过程模型,无损卡尔曼滤波(UKF)与车辆状态轨迹 为什么要学卡尔曼滤波? 卡尔曼滤波以及其扩展算法能够应用于目标状态估计,如果这个目标是行人,那么就是行人状态估计(或者说行人追踪),如果这个目标是自身,那么就是车辆自身的追踪(结合一些地图的先验,GPS等数据的话就

qq_43232556的博客 4176

Darknet-Yolov3 移植过程

本教程面向使用寒武纪平台进行深度学习推理任务的开发者。针对当前主流检测网络darknet-yolov3,进行寒武纪平台的移植。开发者对照移植过程,能够利用寒武纪智能处理器设备完成多种场景的目标检测任务。本实验代码基于 Neuware 1.6.1 与 Python 2.7 环境。

shengyin714959的博客 438

scrapy框架_Scrapy爬虫框架之Scrapy爬取分页数据(试学)

Python进阶必备课程目标: 掌握Scrapy的体系结构和框架搭建,学会使用Scrapy进行站点自动登录、分页数据的下载,和Ajax动态数据获取操作,为后续机器学习打下坚实的基础适用人群: 具备Py面向对象开发思想、其它语言类开发人员、浪子回头者、一夜暴富者课程收获:1. 熟练掌握Scrapy爬虫框架的环境搭建2. 掌握网站分页数据的自动下载3. 掌握动态IP与相关伪装技...

weixin_39976413的博客 324

华为OD机试2025A卷 - BOSS的收入(Java & Python& JS & C++ & C )

华为OD机试2025A卷 - BOSS的收入(Jav一个XX产品行销总公司,只有一个boss,其有若干一级分销,一级分销又有若干二级分销,每个分销只有唯一的上级分销。规定,每个月,下级分销需要将自己的总收入(自己的+下级上交的)每满100元上交15元给自己的上级。现给出一组分销的关系,和每个分销的收入,请找出boss并计算出这个boss的收入。输入:分销关系和收入:[[分销id 上级分销id 收入], [分销id 上级分销id 收入], [分销id 上级分销id 收入]]输出:[boss的ID, 总收入]

算法大师! 1173

Scrapy爬虫框架教程-- 抓取AJAX异步加载网页

Scrapy爬虫框架教程(一)– Scrapy入门Scrapy爬虫框架教程(二)– 爬取豆瓣电影TOP250Scrapy爬虫框架教程(三)– 调试(Debugging)Spiders前言前一段时间工作太忙一直没有时间继续更新这个教程,最近离职了趁着这段时间充裕赶紧多写点东西。之前我们已经简单了解了对普通网页的抓取,今天我就给大家讲一讲怎么去抓取采用Ajax异步加的网站。工具和环境语言:python...

Tomorrow never comes 2595

如何使用 Python 爬虫爬取滴滴打车信息:获取司机和乘客数据

滴滴打车作为中国最大的打车平台之一,提供了丰富的司机和乘客数据,包括司机的车辆信息、乘客的评价、行程数据等。公开的司机和车辆信息(如司机的名字、车辆类型、评价等)可以通过网页直接获取,而乘客的个人信息和具体行程数据通常会受到隐私保护。在滴滴打车的网页中,司机的信息可能以特定的 HTML 标签存在,例如包含司机名称、车辆类型、车辆等级等信息。我们需要分析网页的 HTML 结构,找到这些数据所在的标签。同时,对于涉及到隐私的用户数据(如乘客的行程信息、用户评价等),我们必须特别谨慎,避免侵犯他人的隐私。

2201_76125261的博客 1918

verilog扰码器设计及仿真

本设计使用verilog语言实现扰码器设计与仿真 本工程在quartusII下实现并在modelsim下进行仿真 设计中包括加扰器和解扰器模块、仿真测试模块等. 下面是工程截图: 下面是modelsim仿真截图: 仿真代码部分可以自己设计更改,输出也会不同。 ...

QQ_778132974的博客 1725

scrapy之爬取js异步加载的数据

tips:打印字典中全部的键值: for key in dict: print(key) 众所周知,厉害一点的网页现在都采取ajax异步加载的形式在网页中加载数据了。也就是说,在get了网页的html后,可能根本找不到在浏览器中看到的内容。所以,我们需要调用chrome的调试台,去找到ajax异步加载目标数据的请求,解析后进行模拟访问,拿到自己想要的数据。 这里以爬取金逸电影首页的正在热...

onesmile5137的博客 6329

什么是垂直同步?电脑快速消除屏幕撕裂与提升游戏性能的方法 垂直同步、游戏画面撕裂、游戏优化、VSync、FPS、FreeSync、G-Sync、显卡驱动更新、游戏画质、输入延迟

看这张动图,左边的画面出现了明显“切开”的断层现象,而右边画面非常流畅,没有撕裂。这正是「垂直同步」开关的区别。:每秒生成多少帧图像。比如 60FPS 表示一秒钟显示 60 张图片。刷新率(Refresh Rate):显示器每秒刷新几次画面,单位是赫兹(Hz)。60Hz 表示每秒刷新 60 次。参数说明FPS显卡渲染速度(逻辑帧率)刷新率显示器的显示频率(物理限制)当 FPS 高于刷新率时,显卡渲染的画面来不及被显示器显示,导致撕裂。屏幕撕裂(Screen Tearing)

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1349

突破JavaScript渲染障碍:Scrapy轻松抓取Ajax异步加载数据

你是否曾遇到这样的困境:用Scrapy爬取网页时,浏览器中明明显示的数据,在Scrapy响应中却踪迹全无?这通常是JavaScript动态渲染(如Ajax异步加载)造成的。本文将带你掌握三种实战方案,无需深入前端知识也能轻松获取动态内容,从找到数据接口到使用无头浏览器,循序渐进解决99%的JavaScript渲染问题。 ## 方案一:直接获取数据接口(推荐) 当网页通过JavaScript动态...

gitblog_00007的博客 909

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【爬虫】Scrapy爬虫框架教程-- 抓取AJAX异步加载网页

前一段时间工作太忙一直没有时间继续更新这个教程,最近离职了趁着这段时间充裕赶紧多写点东西。之前我们已经简单了解了对普通网页的抓取,今天我就给大家讲一讲怎么去抓取采用Ajax异步加的网站。 工具和环境 语言:python 2.7 IDE: Pycharm 浏览器:Chrome 爬虫框架:Scrapy 1.3.3 什么是AJAX? AJAX即“Asynchronous Javascrip...

小白兔的窝 2147

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

python爬取ajax异步加载_Scrapy爬取Ajax(异步加载)网页实例——简书付费连载

这两天学习了Scrapy爬虫框架的基本使用,练习的例子爬取的都是传统的直接加载完网页的内容,就想试试爬取用Ajax技术加载的网页。这里以简书里的优选连载网页为例分享一下我的爬取过程。网址为:https://www.jianshu.com/mobile/books?category_id=284一、分析网页进入之后,鼠标下拉发现内容会不断更新,网址信息也没有发生变化,于是就可以判断这个网页使用了异步...

weixin_39929721的博客 617

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Scrapy学习笔记-Ajax数据爬取

数据加载是一种异步加载方式,原始的页面最初不会包含某些数据,原始页面加载完后,会再向服务器请求某个接口获取数据,然后数据才被处理从而呈现到网页上,这其实就是发送了一个Ajax请求。如果遇到这样的页面,直接利用requests等库来抓取原始页面,是无法获取到有效数据的,这时需要分析网页后台向接口发送的Ajax 请求,如果可以用requests来模拟Ajax请求,那么就可以成功抓取了。 ...

肥叔菌的博客 9756

scrapy模拟ajax的post请求,爬取动态异步网页

直接进入正题:一般来说爬虫类框架抓取Ajax动态页面都是通过一些第三方的webkit库去手动执行html页面中的js代码, 最后将生产的html代码交给spider分析。但是一些简单的动态页面比如翻页等动态异步就不用大动干戈的使用Selenium等测试工具框架模拟浏览器执行js操作,直接发送post请求即可。 下面介绍中基协的异步翻页爬取: 创建爬虫不再赘述。 一、页面分析 1.首先右键=...

进击的Coder菜鸟 5510

如何用scrapy-playwright轻松抓取动态网页:终极指南

在现代网络爬虫开发中,动态网页抓取已成为开发者面临的最大挑战之一。🎭 scrapy-playwright 作为 Scrapy 与 Playwright 的完美集成,为动态网页抓取提供了全新的解决方案。这个强大的工具能够处理需要JavaScript渲染的页面,同时完全遵循Scrapy的标准工作流程,让您的爬虫开发体验更加顺畅。 ## 什么是scrapy-playwright? scrapy-p

gitblog_01167的博客 1142

初次运用scrapy爬取Ajax异步加载数据(陕西)

1.运用scrapy写爬虫 ①创建scrapy目录 ②设置setting ③写items ④写爬虫 scrapy.Request()参数: url: 需要请求,并进行下一步处理的url callback: 指定该请求返回的Response,由那个函数来处理。 method: 一般不需要指定,使用默认GET方法请求即可 headers: 请求时,包含的头文件。一般不需要。 Host: media.r...

Bi_1ngram4的博客 889

scrapy 爬虫框架中 ajax 异步加载 post请求方式的

scrapy 爬虫框架中 ajax 异步加载 post请求方式的处理方法: 以福建省公共资源交易电子公共服务网站为例https://www.fjggfw.gov.cn/Website/JYXXNew.aspx,爬取招标结果,打开F12控制台界面如下图所示: Request Method:POST post请求方式中主要是Form Data中的信息,及每次请求Cookie信息,通过构造Co...

peiwang245的博客 1800
上一篇: scrapy入门实战练习(二)----调试(Debugging)Spiders
下一篇: 改版知乎模拟登陆
exec1025
博客等级 码龄9年 15粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值