python爬取网页数据 ajax_如何爬取通过ajax加载数据的网站

news/2024/5/9 13:13:05/文章来源:https://blog.csdn.net/weixin_39917437/article/details/110344088

目前很多网站都使用ajax技术动态加载数据,和常规的网站不一样,数据时动态加载的,如果我们使用常规的方法爬取网页,得到的只是一堆html代码,没有任何的数据。

请看下面的代码:

url = 'https://www.toutiao.com/search/?keyword=美女'

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0"}

response = requests.get(url,headers=headers)

print(response.text)

上面的代码是爬取今日头条的一个网页,并打印出get方法返回的文本内容如下图所示,值现在一堆网页代码,并没有相关的头条新闻信息

201981595032691.png?201971595212

内容过多,只截取部分内容,有兴趣的朋友可以执行上面的代码看下效果。

对于使用ajax动态加载数据的网页要怎么爬取呢?我们先看下近日头条是如何使用ajax加载数据的。通过chrome的开发者工具来看数据加载过程。

首先打开chrome浏览器,打开开发者工具,点击Network选项,点击XHR选项,然后输入网址:https://www.toutiao.com/search/?keyword=美女 ,点击Preview选项卡,就会看到通过ajax请求返回的数据,Name那一栏就是ajax请求,当鼠标向下滑动时,就会出现多条ajax请求:

201981595032692.png?201971595212

通过上图我们知道ajax请求返回的是json数据,我们继续分析ajax请求返回的json数据,点击data展开数据,接着点击0展开数据,发现有个title字段,内容刚好和网页的第一条数据匹配,可知这就是我们要爬取的数据。如下所示:

201981595032693.png?201971595212

鼠标向下滚动到网页底部时就会触发一次ajax请求,下面是三次ajax请求:

https://www.toutiao.com/search_content/?offset=0&format=json&keyword=%E7%BE%8E%E5%A5%B3&autoload=true&count=20&cur_tab=1&from=search_tab&pd=synthesis

https://www.toutiao.com/search_content/?offset=20&format=json&keyword=%E7%BE%8E%E5%A5%B3&autoload=true&count=20&cur_tab=1&from=search_tab&pd=synthesis

https://www.toutiao.com/search_content/?offset=40&format=json&keyword=%E7%BE%8E%E5%A5%B3&autoload=true&count=20&cur_tab=1&from=search_tab&pd=synthesis

观察每个ajax请求,发现每个ajax请求都有offset,format,keyword,autoload,count,cur_tab,from,pd参数,除了offset参数有变化之外,其他的都不变化。每次ajax请求offset的参数变化规律是0,20,40,60…,可以推测offset是偏移量,count参数是一次ajax请求返回数据的条数。

为了防止爬虫被封,每次请求时要把请求时都要传递请求头信息,请求头信息中包含了浏览器的信息,如果请求没有浏览器信息,就认为是网络爬虫,直接拒绝访问。request header信息如下:

headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0",

"referer": "https://www.toutiao.com/search/?keyword=%E7%BE%8E%E5%A5%B3",

'x-requested-with': 'XMLHttpRequest'

}

完整代码如下:

import requests

from urllib.parse import urlencode

def parse_ajax_web(offset):

url = 'https://www.toutiao.com/search_content/?'

#请求头信息

headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0",

"referer": "https://www.toutiao.com/search/",

'x-requested-with': 'XMLHttpRequest'

}

#每个ajax请求要传递的参数

parm = {

'offset': offset,

'format': 'json',

'keyword': '美女',

'autoload': 'true',

'count': 20,

'cur_tab': 1,

'from': 'search_tab',

'pd': 'synthesis'

}

#构造ajax请求url

ajax_url = url + urlencode(parm)

#调用ajax请求

response = requests.get(ajax_url, headers=headers)

#ajax请求返回的是json数据,通过调用json()方法得到json数据

json = response.json()

data = json.get('data')

for item in data:

if item.get('title') is not None:

print(item.get('title'))

def main():

#调用ajax的次数,这里调用5次。

for offset in (range(0,5)):

parse_ajax_web(offset*20)

if __name__ == '__main__':

main()

上面是爬取通过ajax请求加载数据网站的例子,如果想要其他的数据,可以动手自己写,这里只是搭了一个架子,各位可以尝试将数据写入到excel或者数据库中。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: 如何爬取通过ajax加载数据的网站

本文地址: http://www.cppcns.com/jiaoben/python/268516.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_800101.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flex 底部固定_小猿圈网站页面底部固定的方法

网络发展到了今天,很多朋友对于网站已经不陌生了,但是当我们看网页时你注意到网站的底部了吗?虽然很少人会注意到他,但是如果不在底部的话,会很难看,今天小猿圈web前端讲师就为你介绍网站页面底部固定的方法…

织梦分页php,织梦DedeCMS网站首页分页插件

织梦DEDECMS首页分页插件下载,一款主要运用用DEDECMS博客模板类的插件。实现首页分页功能。含GBK和UTF8双版本。 后台生成首页 温馨提示 如果你网站以下5个文件做过修改,使用前请备份这5个文件,不然安装插件后会被覆盖!&#xff0…

linux mq客户端配置,客户端配置 - IBM MQ运维使用手册_服务器应用_Linux公社-Linux系统门户网站...

六、 客户端配置为方便对部署在linux上的MQ程序进行管理,可以通过在windows端添加远程远程队列管理器的方式进行图形化管理。以为QM1新建远程队列管理器进行图形化管理为例,步骤如下:1. 修改队列管理器QM1访问权限mqmmq:~> strmqm Q…

mac搭建网站服务器,Mac上搭建Web服务器--Apache

局域网搭建 Web 服务器测试环境,因为Mac OS X 自带了 Apache 和 PHP 环境,我们只需要简单的启动它就行了。1.命令:sudo apachectl startApache服务器默认的web根目录在:/Library/WebServer/DocumentsApache的配置文件在:/etc/apac…

java中间件开发 豆瓣_《大型网站系统与Java中间件》读书笔记(上)

前言只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y这本书买了一段时间了,之前在杭州没带过去,现在读完第三章,来做做笔记豆瓣评分这本书前三章都在科普和回顾中间件/分…

seo自动工具_世界工厂网:星矿关键词库管理 助力企业获取SEO流量

互联网时代,得流量者得天下,这一直是企业线上业务的核心目标。特别是搜索引擎这一领域,是企业开展线上渠道的必争之地。想要抢占这部分流量,企业要做的第一步就是挖掘优质产品关键词搭建优化网站,占领流量高地。但如何…

摄影html网页模板,2017年最新15个漂亮的 HTML 摄影网站模板

摄影是一门艺术,它需要大量的耐心和努力工作来捕捉那些精彩的瞬间。如果你是一位热情的摄影师,想要建立一个网站来展示那些高质量的摄影作品,那么你找对地方了。本文包含15个最佳的摄影网站模板,你可以使用这些 HTML 模板创建自己…

网站设计

这几天和艺术学院的同学交流网站的设计,和各自做了几个作品,感觉和别人的确是存在不小的差距! 学习! 图一:自己设计的学员展板的简介 图二:李丽的作品 图四:程志伟的作品 图四:赵立文…

从今开始,让网站用Email地址登录

现今,很多Web2.0网站都使用Email地址作为登录用户名,其有如下优点: 1. 不易重复。用户名经常会重复,导致用户不得不在多个网站之间使用多种不同的用户名,不易记忆和管理;而Email地址具有唯一性。 2. …

vue遇到ie兼容问题如何处理_当网站遇到黑链时该如何进行处理?

黑链是指通过非正规手段所获取的反向链接,一些居心不良或者竞争对手们会把黑链挂在你的网站上,从而给网站带来不好的影响,如果处理不及时,还会导致网站被降权降排名,让之前的优化都白费了,那么当网站遇到黑…

房产网站源码 Java_基于jsp的房产网站-JavaEE实现房产网站 - java项目源码

基于jspservletpojomysql实现一个javaee/javaweb的房产网站, 该项目可用各类java课程设计大作业中, 房产网站的系统架构分为前后台两部分, 最终实现在线上进行房产网站各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类房产网站相关的实体进行管理。该房产…

一个网站的诞生- MagicDict开发总结1 [首页]

能够自己拥有一个 个人网站,可能是很多人的梦想。在这个阶级固化的时代,我们需要一个梦想和目标。。。。 由于本职工作不算忙碌,自己对于动手制作网站有兴趣,所以,从去年9月底开始,萌生了制作一个个人网站的…

网站图片全自动加密_网站发布的视频如何禁止下载播放?

即便视频通过一机一码加密工具加密,还是觉得通过网盘、邮箱等给学员或用户传送加密视频太麻烦?想让学员不用下载加密视频本地存储就实现在线观看?这种情况均可以通过搭建视频类网站可实现,但需做好对网站视频加密做好安全防止盗用…

常用的40个网站制作技巧

1. οncοntextmenu"window.event.returnValuefalse" 将彻底屏蔽鼠标右键 <table border οncοntextmenureturn(false)> <td>no </table> 可用于Table 2. <body onselectstart"return false"> 取消选取、防止复制 3. οnpaste&q…

[JavaScript] Firefox 插件开发(网站编辑转发工具)

&#xff10;&#xff18;年 公司为了让网站编辑工作方便&#xff0c;做过这么一个简单转发文章的firefox插件。 功能&#xff1a;在firefox右键菜单&#xff0c;弹出调用页面把当前网页部分内容 Post 到网站中。 代码下载&#xff1a;firefox插件右键转发文章  &#xff08;…

自定义SharePoint新网站创建过程

在一个SharePoint网站的网站设置页面中&#xff0c;使用“将网站另存为模板”链接&#xff0c;管理员可以将整个网站保存为一个扩展名为.stp格式的模板。使用这个stp网站模板&#xff0c;管理员可以重复创建同样结构&#xff08;和内容&#xff09;的新网站。那么这种stp格式的…

从LiveJournal后台发展看大规模网站性能优化方法[zz]

http://blog.zhangjianfeng.com/article/743 因近期打算对公司应用架构进行调整, 其中的一些思路值得借鉴. 以下为转载内容: 一、LiveJournal发展历程 LiveJournal是99年始于校园中的项目&#xff0c;几个人出于爱好做了这样一个应用&#xff0c;以实现以下功能&#xff1a; 博…

WEB开发中两个新建模版的比较(仅针对VS2008讨论):新建网站》ASP.NET网站和新建项目》ASP.NET WEB 应用程序...

一直以来自己不是很清楚这两者之间到底有什么区别&#xff0c;只知道怎么去用&#xff0c;今天看书时又看到这个问题了&#xff0c;所以就网罗了一下大家的观点&#xff0c;并自己做了一下比较&#xff0c;再次声明&#xff0c;目前所有的比较内容都是建立在VS2008开发环境下的…

QQLIVE的电影搬到你的网站

以上是QQLIVE内的影片演示&#xff0c;打开QQLIVE播放页面&#xff0c;以让子弹飞四川话版为例&#xff0c; 播放页面地址&#xff1a;http://live.qq.com/cover/a/amjzx3jr21o7cv1.html 在播放页面空白处单击鼠标右键查看源代码&#xff0c;找到分集&#xff0c;如图中所示把 …

如何真正提高ASP.NET网站的性能

前言怎么才能让asp.net网站飞得更快&#xff0c;有更好的性能&#xff1f;——这是很多开发者常常思考的一个问题。我有时候会做大量的测试&#xff0c;或请求别人帮忙采集一些数据&#xff0c;希望能够验证网上一些专家的建议或证明自己的一些猜想。理论上讲&#xff0c;我们希…