Python爬虫自学笔记(三)动态网页爬取

7 篇文章 7 订阅
订阅专栏

现在很多网站用的是动态网页加载技术,这时候用前面的request库和BS4库就不能解决问题了,需要用新的办法。

打开网页,按F12或者右键弹出菜单里选择“检查”,右侧会打开开发者工具。

这里有一排菜单,最左边的是Element,显示的是网页的源代码,如果在这里能直接找到所需要爬取的内容,就说明这是静态页面,可以用 request库和BeautifulSoup4库的工具爬取所需内容。如果这里找不到所需内容,那么就是动态页面。这时候往右面看Network菜单。

Network的功能是:记录在当前页面上发生的所有请求。现在看上去好像空空如也的样子,这是因为Network记录的是实时网络请求。现在网页都已经加载完成,所以不会有东西。

右侧勾选框Preserve log,它的作用是“保留请求日志”。如果不点击这个,当发生页面跳转的时候,记录就会被清空。所以,我们在爬取一些会发生跳转的网页时,会点亮它。

然后刷新页面,这时候就会跳出来很多记录。

找到这个页面的第0个请求:search.html,然后点击它,我们来查看它的Response(官方翻译叫“响应”,你可以理解为服务器对浏览器这个请求的回应内容,即请求的结果)。

下面第1行,是对请求进行分类查看。我们最常用的是:ALL(查看全部)/XHR(仅查看XHR)/Doc(Document,第0个请求一般在这里),有时候也会看看:Img(仅查看图片)/Media(仅查看媒体文件)/Other(其他)。最后,JS和CSS,则是前端代码,负责发起请求和页面实现;Font是文字的字体;而理解WS和Manifest,需要网络编程的知识,倘若不是专门做这个,不需要了解。

Network中,有一类非常重要的请求叫做XHR(当你把鼠标在XHR上悬停,你可以看到它的完整表述是XHR and Fetch)

AJAX技术在工作的时候,会创建一个XHR(或是Fetch)对象,然后利用XHR对象来实现,服务器和浏览器之间传输数据。在这里,XHRFetch并没有本质区别,只是Fetch出现得比XHR更晚一些,所以对一些开发人员来说会更好用,但作用都是一样的。

在XHR列表中,找到带有我们所需要数据的一个(这个要靠经验了,可以一个个点开看,也可以观察英文名)

点开XHR,看到如下列表

从左往右分别是:Headers:标头(请求信息)、Preview:预览、Response:响应、Cookies:Cookies、Timing:时间。

点开Headers

General里的Requests URL就是我们应该去访问的链接。如果在浏览器中打开这个链接,就会得到一个类似字典的数据结构,它是JSON数据。

json数据可以跨平台,跨语言工作。jsonXHR之间的关系:XHR用于传输数据,它能传输很多种数据,json是被传输的一种数据格式。

我们用requests库的json方法可以解析这一数据。

# 引用requests库
import requests
# 调用get方法,下载这个字典
res = requests.get(url)
# 使用json()方法,将response对象,转为列表/字典
json = res.json()
#遍历字典,获取所需资料
for i in json:
    for j in i:
        print(j)

带参数请求

每个url都由两部分组成。前半部分大多形如:https://xx.xx.xxx/xxx/xxx

后半部分,多形如:xx=xx&xx=xxx&xxxxx=xx&……

两部分使用?来连接。举例豆瓣网址,前半部分就是: 搜索:

后半部分则是:q=%E6%B5%B7%E8%BE%B9%E7%9A%84%E5%8D%A1%E5%A4%AB%E5%8D%A1

它们的中间使用了?来隔开。

这前半部分是我们所请求的地址,它告诉服务器,我想访问这里。而后半部分,就是我们的请求所附带的参数,它会告诉服务器,我们想要什么样的数据。

这参数的结构,会和字典很像,有键有值,键值用=连接;每组键值之间,使用&来连接。

就像豆瓣。我们请求的地址是 搜索:    而我们的请求所附带的参数是“海边的卡夫卡”:q=%E6%B5%B7%E8%BE%B9%E7%9A%84%E5%8D%A1%E5%A4%AB%E5%8D%A1(那段你看不懂的代码,它是“海边的卡夫卡”使用utf-8编码的结果)。

requests模块里的requests.get()提供了一个参数叫params,可以让我们用字典的形式,把参数传进去。

我们可以把Query String Parameters里的内容,直接复制下来,封装为一个字典,传递给params。只是有一点要特别注意:要给他们打引号,让它们变字符串。

通过改变params里的参数,可以找到自己想要的页面,如有的翻页会写成 "page= ",有的人名、作品名等等都能找到相应的参数,需要仔细分析

请求头 Request Headers

每一个请求,都会有一个Request Headers,我们把它称作请求头。它里面会有一些关于该请求的基本信息,比如:这个请求是从什么设备什么浏览器上发出?这个请求是从哪个页面跳转而来?

如上图,user-agent(中文:用户代理)会记录你电脑的信息和浏览器版本(如我的,就是windows10的64位操作系统,使用谷歌浏览器)。

origin(中文:源头)和referer(中文:引用来源)则记录了这个请求,最初的起源是来自哪个页面。它们的区别是referer会比origin携带的信息更多些。

如果我们想告知服务器,我们不是爬虫,而是一个正常的浏览器,就要去修改user-agent。倘若不修改,那么这里的默认值就会是Python,会被服务器认出来。

有趣的是,像百度的爬虫,它的user-agent就会是Baiduspider,谷歌的也会是Googlebot……如是种种。

Requests模块允许我们去修改Headers的值。

如此,只需要封装一个字典就好了。和写params非常相像。

而修改originreferer也和此类似,一并作为字典写入headers就好。就像这样:

headers = {
    'origin':'https://china.nba.com',
    # 请求来源
    'referer':'https://china.nba.com',
    # 请求来源,携带的信息比“origin”更丰富
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
    # 标记了请求从什么设备,什么浏览器上发出
    }
最后分享一个案例,爬取NBA网站上现役球员的资料


import requests,openpyxl

wb=openpyxl.Workbook()
sheet=wb.active
sheet.title='NBA现役球员'
sheet['A1']='姓名'
sheet['B1']='国籍'
sheet['C1']='身高'
sheet['D1']='体重'
sheet['E1']='场上位置'
sheet['F1']='所属球队'
sheet['G1']='出道年份'
sheet['H1']='来源'

url = 'https://china.nba.com/static/data/league/playerlist.json'

headers = {
    'origin':'https://china.nba.com',
    # 请求来源,本案例中其实是不需要加这个参数的,只是为了演示
    'referer':'https://china.nba.com',
    # 请求来源,携带的信息比“origin”更丰富,本案例中其实是不需要加这个参数的,只是为了演示
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
    # 标记了请求从什么设备,什么浏览器上发出
    }

    
res = requests.get(url,headers=headers)
playerlist=res.json()

players=playerlist['payload']['players']
print(len(players))

for player in players:
    #print('姓名:'+player['playerProfile']['displayName'])
    #print('国籍:'+player['playerProfile']['country'])
    #print('身高:'+player['playerProfile']['height'])
    #print('体重:'+player['playerProfile']['weight'])
    #print('位置:'+player['playerProfile']['position'])
    #print('球队:'+player['teamProfile']['city']+player['teamProfile']['displayAbbr'])
    #print('出道:'+player['playerProfile']['draftYear'])
    #print('来源:'+player['playerProfile']['schoolType'])
    #print()
    name=player['playerProfile']['displayName']
    country=player['playerProfile']['country']
    high=player['playerProfile']['height']
    weight=player['playerProfile']['weight']
    position=player['playerProfile']['position']
    team=player['teamProfile']['city']+player['teamProfile']['displayAbbr']
    draftYear=player['playerProfile']['draftYear']
    laiyuan=player['playerProfile']['schoolType']
    sheet.append([name,country,high,weight,position,team,draftYear,laiyuan])
wb.save('NBA现役球员.xlsx')

Python轻松实现动态网页爬虫(附详细源码)!
爬遍所有网站
05-22 1万+
AJAX动态加载网页 一 什么是动态网页 J哥一向注重理论与实践相结合,知其然也要知其所以然,才能以不变应万变。 所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。——来源百度百科 动态网页具有减少工作量、内容更新快、可完成功能多等特点,被很...
python爬取动态网页_Python 抓取动态网页内容方案详解
weixin_39819661的博客
11-20 497
Python实现常规的静态网页抓取时,往往是用urllib2来获取整个HTML页面,然后从HTML文件中逐字查找对应的关键字。如下所示:import urllib2url="http://mm.taobao.com/json/request_top_list.htm?type=0&page=1"up=urllib2.urlopen(url)#打开目标页面,存入变量upcont=up.read()...
Python动态网页爬取
Kali与编程
03-14 2435
一、动态网页概述随着互联网技术的发展,动态网页逐渐成为了互联网上最为流行的网页类型之一。相比于静态网页动态网页具有更加丰富和交互性的内容,可以根据用户的需求和交互行为实时生成和更新内容,大大提高了用户的使用体验和网站的互动性。动态网页通常采用动态HTML(Dynamic HTML)技术,通过JavaScript、AJAX等技术实现网页动态效果和交互功能。动态网页通常包括两种类型。
Python实战——轻松实现动态网页爬虫(附详细源码)
最新发布
2301_78217634的博客
07-30 2753
【点击这里】
python爬虫实战 scrapy+selenium爬取动态网页
栀子枝头盛的博客
04-16 6120
使用scrapy对接selenium完成对动态网站的爬取
Python爬虫动态网页抓取(万科更新时间)
bring_coco的博客
04-28 1万+
爬取的页面分为静态页面和动态页面,静态的页面爬取很常见,就如豆瓣top250的爬取,展示的内容都在HTML源代码中。而动态页面,很多内容不会出现在HTML源代码中,例如使用JavaScript时,很可能出现这种情况。豆瓣Top250页面标题https://movie.douban.com/top250?F12—>检查(选择触不可及),可以看到源码定位到触不可及标题这里。在右键打开源码。
python爬虫爬取动态网页内容
04-27
python爬虫爬取动态生成的DOM节点渲染数据结果,该方式不是直接拿到接口进行解析,而是XHR中看不到数据,检查网页又能看到,普通爬虫爬取下来的结果是看不到爬取到的这个数据所在的div的。
python爬取动态页面
js010111的博客
12-05 4816
一、动态页面 概述:在页面中执行某些动作,如翻页、点击等,页面的url不变,对这种类型的页面爬取。 原理:动态页面的数据的获取主要有两种(就我目前了解到的), (1)网页先将数据请求放在某个<script></script>中,分页展示; (2)页面通过ajax请求获取数据。 二、方法 如何判断是哪种? (1)打开控制台的网络部分,: (2)再次触发事件,比如说点击下一页,观察是否接收新的数据包 (3)出现的话就是原理的第二种方式,查看数据包的详细信息: (4)
Python爬虫爬取动态网页
热门推荐
Maoning Guan的博客
05-01 8万+
系统环境:操作系统:Windows8.1专业版 64bit Python:anaconda、Python2.7 Python modules:requests、random、jsonBackground:对于静态网页,我们只需要把网页地址栏中的url传到get请求中就可以轻松地获取到网页数据。但是,我们经常会遇到直接把网页地址栏中的url传到get请求中无法直接获...
Python爬取动态网站实战
白帽阿叁的博客
12-12 6286
在之前的推文中,我们介绍了如何爬取一个简单的静态网站——「[Python爬取静态网站」,但是在实际过程中,常常会遇到需要爬取动态网站数据的情况。在本文中,我们也将通过一个比较简单的案例,来介绍爬取动态网站数据的基本思路和步骤。
Python 项目爬虫自学
01-01
这个分享包涵了我开发的Python爬虫工具项目,主要用于合法爬取某些网页信息。以下是主要内容: 源代码:包括Python代码和相关脚本。这些代码展示了如何使用Python进行网页抓取、解析和数据提取。 项目文件:除了...
自学Python爬虫路上的实战笔记,由浅到深逐步深入学习Python 爬虫.zip
02-21
自学Python爬虫的过程中,你将遇到一系列的概念、技术和实践应用。这本实战笔记将带你逐步探索这个领域,从基础知识到高级技巧,帮助你构建强大的网络数据获取能力。以下是根据标题和描述提炼出的一些关键知识点:...
爬虫入门-自学笔记,java和python示例
06-26
#### Python爬虫示例 下面是一个简单的Python爬虫示例,该示例展示了如何使用`requests`和`BeautifulSoup`来抓取网站上的文本内容: ```python # 导入必要的库 import requests from bs4 import BeautifulSoup...
python爬虫爬取股票信息
2401_83641533的博客
04-21 747
进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**
python网络爬虫——自学笔记1.用requests库爬取图片
m0_70705805的博客
05-09 3648
1.requests库的安装 rrequests库是公认的python的一个一个非常优秀的第方库,下载方法也很简单 只需Win+R打开控制台命令窗口,输入pip install requests后回车等待安装成功即可 如下图 安装好后我们就可以使用request库的方法来获取网页上的一些资源 2.下面介绍用request库的request.get()方法获取网页的图片资源 首先,我们要打开想要下载的图片所在网页,比如在必应中搜索天空的图片,打开后,右键复制图片的地址,即url,注意,要右键
如何使用Python抓取动态网站数据
飞蚁的博客
07-19 663
在这篇文章中,我们详细介绍了如何使用Python抓取动态网站数据。我们从准备工作开始,逐步讲解了Selenium的使用方法,并通过实际案例展示了如何抓取YouTube和Hacker News上的数据。我们还介绍了一些高级技巧,如处理动态加载的数据和使用代理服务器。通过这篇文章,读者可以掌握使用Python抓取动态网站数据的基本技能,并应用于自己的项目中。
4.2-python爬虫动态网页数据爬取
Nosimper的博客
08-23 784
系列文章目录 第一章:网络请求 1、爬虫前奏 2、http协议和chrome 3、urllib库 文章目录系列文章目录前言一、什么是AJAX二、获取ajax数据的方式、Selenium+chromedriver获取动态数据四、安装Selenium和chromedriver五、快速入门六、selenium常用操作1、关闭页面2、定位元素3、 操作表单元素4、行为链5、Cookie操作6、页面等待7、切换页面8、设置代理ip9、WebElement元素七、通过 selenium 爬取 拉钩 网页面req
python爬虫动态网页爬取
06-06
Python爬虫可以使用Selenium和BeautifulSoup结合的方式来爬取动态网页。 1. 安装Selenium和BeautifulSoup库: ``` pip install selenium pip install beautifulsoup4 ``` 2. 下载浏览器驱动,例如Chrome驱动,并将其添加到环境变量中。 3. 使用Selenium模拟浏览器打开网页并获取动态内容: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get("https://example.com") dynamic_content = driver.find_element_by_id("dynamic-content").text driver.quit() ``` 4. 使用BeautifulSoup解析动态内容: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(dynamic_content, 'html.parser') # 进行数据提取 ``` 注意事项: - 爬取动态网页需要模拟浏览器行为,因此速度可能比静态网页慢。 - 爬取动态网页需要耗费较多的系统资源,因此需要注意内存和CPU的使用情况。 - 爬取动态网页需要处理浏览器弹窗、验证码等问题,需要使用Selenium提供的方法进行处理。
写文章

热门文章

  • Python-Tkinter图形化界面设计(详细教程 ) 66057
  • Yolov5自学笔记之一--从入门到入狱,功能强大不要乱用(实现yolov5的基本功能使用流程及训练自己的数据集) 15134
  • Python爬虫自学笔记(三)动态网页爬取 14425
  • Yolov5自学笔记之二--在游戏中实时推理并应用(实例:哈利波特手游跳舞小游戏中自动按圈圈) 13880
  • 调戏chatGPT(二)下围棋 8303

分类专栏

  • python基础自学笔记 29篇
  • Python应用 2篇
  • JS逆向 2篇
  • Python爬虫 7篇
  • chatGPT 3篇
  • Django 14篇
  • 收藏转载 4篇
  • AI自学笔记 16篇

最新评论

  • pytorch自学笔记

    阿尔法羊: 我是纯自学的,不过现在资信发达,B站上教学视频CSDN上各种资料多的是,慢慢啃吧表情包主要是要有兴趣,坚持下去

  • pytorch自学笔记

    lymtics~kiku: 想问一下博主之前学pytorch是参考了哪些资料,小白入门有推荐吗

  • Yolov5自学笔记之一--从入门到入狱,功能强大不要乱用(实现yolov5的基本功能使用流程及训练自己的数据集)

    阿尔法羊: 可以用time模块计时啊,每隔一分钟检测一次,time.sleep(60),如果两次都检测到了同一辆车停在线外就判定违章。也可以每秒检测一次,如果帧率为25就是连续60*25=1500帧都检测到这辆车停在线外就判定它违停。

  • Yolov5自学笔记之一--从入门到入狱,功能强大不要乱用(实现yolov5的基本功能使用流程及训练自己的数据集)

    Y................: 大佬,我想问一下怎么把时间加进去,比如车辆违停监测,就是车子在停车线外面超过一分钟就算违停要怎么搞呢表情包

  • <学习笔记>从零开始自学Python-之-web应用框架Django( 十四)上线部署(阿里云+Nginx+uwsgi+MySQL)

    ��张若怀: 我创建虚拟环境,没有文件夹出来是怎么回事啊?

最新文章

  • 从零开始自学Python-之-常用库篇(十四)python的异步编程库asyncio
  • <学习笔记>从零开始自学Python-之-实用库篇(一)-pyscript
  • <Python实际应用>用yolov9实现垃圾检测
2024年6篇
2023年9篇
2022年21篇
2021年25篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家标准玻璃钢雕塑多少钱一平方东胜玻璃钢景观雕塑陕西玻璃钢雕塑销售河南玻璃钢卡通雕塑奶牛厂家玻璃钢雕塑人物定制哪家好郑州河源玻璃钢卡通雕塑浙江周年庆典商场美陈价钱梅州玻璃钢卡通雕塑销售厂家玻璃钢大树雕塑安装江门定制玻璃钢卡通雕塑白银玻璃钢卡通雕塑价格北京大型商场创意商业美陈经验商场美陈花鸟市场上饶玻璃钢门头雕塑济南玻璃钢美陈雕塑做玻璃钢花盆咋样大庆玻璃钢雕塑定做玻璃钢雕塑运输安装流程伊川玻璃钢雕塑费用浙江动物玻璃钢雕塑定做价格泉州买玻璃钢雕塑在哪里最多商场广场美陈道厂家选哪家福建商场主题创意商业美陈思路昆明市玻璃钢造型雕塑徐州睢宁玻璃钢雕塑报价明细表洛阳玻璃钢浮雕雕塑厂家电话长宁区商场开业美陈商场 美陈 消防南昌人物玻璃钢雕塑制作深圳公园主题玻璃钢卡通雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化