版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目五
爬取动态网页通过对本章的学习,了解动态网页应用场景,理解动态网页特征,理解动态网页工作原理,理解AJAX和API,熟悉IE开发者工具,掌握JSON库的应用,掌握异步GET与POST请求。了解动态网页应用场景。理解动态网页特征。理解动态网页工作原理。理解AJAX和API。熟悉IE开发者工具。掌握JSON库的应用。掌握异步GET与POST请求。在实际过程中,常常会遇到需要爬取动态网页数据的情况。我们知道每单击一个链接,浏览器就会短暂地“白屏”一下,然后才会进入一个新的页面。不同的页面,网址也是不一样的。随着技术的不断进步,现在不少网站已经引入了异步加载技术,单击新的链接以后,几乎看不到“白屏”的现象了。而且更神奇的是,单击了链接,网页中的内容已经发生了改变,但是网址没有变。还有一些内容可以部分变化刷新。在本章中,我们学习动态网页特征、动态网页爬取的相关知识、通过典型的案例,来详细介绍爬取动态网页数据的基本思路和步骤。5.1应用场景
现在主流网站基本上都是动态网页,这些网页大多使用JavaScript展现网页内容,与静态网页不同的是,使用JavaScript时,很多内容并不会出现在HTML源代码中。例如,简书的动态网页,网址如下:/,打开页面如图5-1所示。5.2动态网页特征
首先,简单看一下动态网页的特征:从源代码的特征看,动态网页的数据不会出现在网页源代码中,而是被“藏”起来了。在浏览器地址栏输入以下网址,可以看到百度翻译,页面如图5-2所示。/translate?aldtype=16047&query=&keyfrom=baidu&smartresult=dict&lang=auto2zh#auto/zh/动态网页的特征:从网址特征看,请求新数据时(如下拉或翻页),当前网页数据内容已更新变化,而网址不会变化。在浏览器地址栏输入地址“/gallery/”,可以看到豆瓣话题广场,页面如图5-5所示。拖动右侧的下拉滚动条,话题精选动态内容会不断增加,地址栏的网址始终没有改变,一直是/gallery/。动态网页的特征:从技术特征看,常用以下4种动态网页技术。(1)CGI(2)ASP(3)PHP(4)JSP当用户请求的是一个动态网页时,服务器要做更多的工作才能把用户请求的信息发送回去,服务器一般按照以下步骤进行工作。步骤1:服务器端接受请求。步骤2:Web服务器从服务器硬盘指定的位置或内存中读取动态网页文件。步骤3:执行网页文件的程序代码,将含有程序代码的动态网页转化为标准的静态页面(如HTML)。步骤4:Web服务器将生成的静态页面代码发送给请求浏览器。5.3动态网页爬取
动态网页就是AsynchronousJavascriptAndXML(简称“AJAX”),也就是异步JavaScript和XML。动态网页在后台服务器进行少量数据交换就可以使网页实现异步更新。它是一种使用现有技术集合的“新”方法,包括HTML
或
XHTML、CSS、JavaScript、
DOM、XML、
XSLT,以及最重要的XMLHttpRequest。使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。在具体网页代码中,AJAX一般通过XMLHttpRequest对象接口发送请求,XMLHttpRequest一般被缩写为“XHR”。用户点击网络面板上漏斗形的过滤按钮,可以过滤出XHR请求,再挨个查看每个请求,通过访问路径和预览,即可找到包含信息的请求。
XMLHttpRequest对象通过responseText、responseBody、responseStream或responseXML属性获取响应信息,如表5-1所示。响应信息描述responseBody将响应信息正文以UnsignedByte数组形式返回responseStream
以ADOStream对象的形式返回响应信息responseText将响应信息作为字符串返回responseXML将响应信息格式化为XML文档格式返回[例5-1]在百度翻译中输入一个单词,查看翻译结果。代码如下:importrequestsimportjsonif__name__=='__main__':#指定urlurl='/sug'#进行UA伪装header={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/70.0.3538.25Safari/537.36Core/1.70.3775.400QQBrowser/10.6.4208.400'}#参数处理#data相当于get请求中的params,表示请求所带的参数(也是一个字典类型数据)#post请求参数处理(和get请求一致)word=input('请输入要翻译的单词:') #这样翻译单词就变成动态的了data={'kw':word}#请求发送response=requests.post(url=url,data=data,headers=header)#获取相应数据#json()方法返回的是一个对象#如果确定相应数据是json类型的,才可以使用json()方法进行对象的返回dic_obj=response.json()print(dic_obj)print('数据打印结束!')
输入单词people运行结果如下。请输入要翻译的单词:people{'errno':0,'data':[{'k':'people','v':'n.人民;人,人类;居民;种族vt.居住于,布满;使住满人,在…殖民;把动物放养在'},{'k':'People','v':'[人名]皮普尔'},{'k':'peopled','v':'vt.居住于,布满(people的过去式与过去分词形式)'},{'k':'peoples','v':'n.人民;人(people的名词复数);家人;种族'},{'k':'Peoples','v':'[人名][英格兰人姓氏]皮普尔斯取自父名,来源于People,含义是“皮普尔之子”(sonof'}]}数据打印结束!输入单词sunday
运行结果如下。请输入要翻译的单词:sunday{'errno':0,'data':[{'k':'Sunday','v':'n.星期日,星期天;每逢星期日出版的报纸;星期日报;[人名]森迪'},{'k':'Sundays','v':'adv.于每星期日n.星期天;星期日(Sunday的名词复数);每逢星期日出版的报纸;'},{'k':'Sundayrun','v':'n.长距离,星期日旅行'},{'k':'Sundaypunch','v':'n.对付敌人最厉害的一着'},{'k':'sundaypunch','v':'[体]最厉害的一击'}]}数据打印结束!请确认修改是否正确?sunday
在动态网页的网页文件中,除了有HTML外,还有一些特定功能的程序代码。通过这些代码,浏览器跟服务器可以交互,即服务器可以根据浏览器的请求生成网页内容。通俗的说就是,当我们打开动态网页时,服务器不会一次性返回所有页面内容,我们需要哪些内容,通过浏览器与服务器交互,服务器再返回对应的内容。这种加载数据的方式称为API加载数据。API(ApplicationProgrammingInterface)即应用程序编程接口,也就是网页和服务器交互的途径。具体来看,爬取动态网页数据主要可分为以下步骤。步骤1:分析网页结构,查找数据接口;步骤2:构造请求头,请求接口数据;步骤3:解析接口数据;步骤4:储存数据;如果涉及多页的数据,需要分析接口的变化规律,参看以下步骤。步骤1:分析单页网页结构,查找数据接口;步骤2:分析接口变化规律,构造接口参数;步骤3:循环请求、获取并解析数据;步骤4:储存数据。其实一般我们需要登录的页面大多都是动态页面,它们是有后台、有服务器的,我们所能看见的代码都是前端他们确认展示的。在动态网页爬取数据,返回数据多为JSON型数据类型。JSON的全称是JavaScriptObjectNotation,是一种轻量级的数据交换格式。网络之间使用HTTP方式传递数据的时候,绝大多数情况下传递的都是JSON格式的字符串。方法作用json.dumps()将Python对象编码成JSON字符串json.loads()将JSON字符串解码成Python对象json.dump()将Python对象转化成JSON格式存储到文件中json.load()将文件中的JSON格式转化成Python对象提取出来[例5-2]在Python中初始化一个字典和列表进行相互转化。代码如下:importjson
#一Python中初始化一个字典:
person_dict={
'basic_info':{'name':'张三',
'age':30,
'sex':'male'},
'work_info':{'salary':99999,
'position':'总经理',
'department':None}
}
print(person_dict)
#二字典转换为JSON格式的字符串方法
person_json=json.dumps(person_dict)
print(person_json)
#三列表转换为JSON格式的字符串
book_list=[
{'name':'三国演义','price':99.99},
{'name':'西游记','price':100},
{'name':'红楼梦','price':80},
{'name':'水浒传','price':45.99},
]
book_json=json.dumps(book_list,indent=4)
print(book_json)
#四把JSON格式的字符串转换为字典方法
person_dict={
'basic_info':{'name':'张三',
'age':30,
'sex':'male'},
'work_info':{'salary':99999,
'position':'总经理',
'department':None}
}
#字典转换为JSON格式的字符串
person_json=json.dumps(person_dict)
#把JSON格式的字符串转换为字典
person_json_dict=json.loads(person_json)
print(person_json_dict)
print(person_json_dict['basic_info']['name'])[例5-3]Ajax提取网页结果.1.打开网址如下:/kfccda/storelist/index.aspx,该页面如图5-11所示。输入关键字“重庆”查询结果如图5-12所示。.编写代码爬取该页面中的数据,代码如下。importrequestsif__name__=='__main__':#指定urlurl='/kfccda/ashx/GetStoreList.ashx?op=keyword'#动态输入查找的城市city=input('请输入您想要查找的城市:')#参数处理param={'cname':'','pid':'','keyword':city,#城市名称'pageIndex':'1',#页面'pageSize':'10',#一页显示多少数据}#进行UA伪装header={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/84.0.4147.105Safari/537.36'}#获取相应数据response=requests.post(url=url,data=param,headers=header)#这个页面是一个text,不是jsonpage_text=response.textprint(page_text)print('数据爬取成功!')
运行该例结果如下。请输入您想要查找的城市:重庆{"Table":[{"rowcount":33}],"Table1":[{"rownum":1,"storeName":"崇智","addressDetail":"重庆路1388号(沃尔玛购物广场二楼)","pro":"礼品卡","provinceName":"吉林省","cityName":"长春市"},{"rownum":2,"storeName":"解放东路","addressDetail":"重庆路1367号","pro":"Wi-Fi,礼品卡","provinceName":"吉林省","cityName":"吉林市"},{"rownum":3,"storeName":"民权","addressDetail":"重庆民权路1号","pro":"24小时,Wi-Fi,礼品卡","provinceName":"重庆市","cityName":"重庆市"},{"rownum":4,"storeName":"重庆肯德基有限公司大礼堂餐厅","addressDetail":"渝中区大溪沟街道人民路133号","pro":"Wi-Fi,点唱机,店内参观,礼品卡,手机点餐","provinceName":"重庆市","cityName":"重庆市"},{"rownum":5,"storeName":"缙麓","addressDetail":"重庆北碚区天生新村63号缙麓商都A栋1-2层","pro":"Wi-Fi,点唱机,礼品卡","provinceName":"重庆市","cityName":"重庆市"},{"rownum":6,"storeName":"雄风","addressDetail":"重庆北碚区嘉陵风情街33号1-1号一层","pro":"Wi-Fi,点唱机,店内参观,礼品卡","provinceName":"重庆市","cityName":"重庆市"},{"rownum":7,"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 集料视频课件
- 2024版设备采购合同标的为工业自动化设备3篇
- 部编版四年级语文上册第21课《古诗三首》教学设计
- 工业园区绿色低碳发展水平评价规范-地方标准格式审查稿
- 《桩基检测技术上》课件
- 《时间之窗缺口理论》课件
- 教科版小学综合实践6下(教案+课件)6 我为学校出点力 郑湘娥
- 牙龈脓肿病因介绍
- 《债法总论讲义》课件
- 《毒物与化学》课件
- 母婴产品安全监管新规解读
- 2024年物理实验操作考试(考生试题)
- 河南省洛阳市2022-2023学年九年级上学期期末数学试题
- 辽宁省大连市2022-2023学年八年级下册期末物理试卷(含答案)
- 2024年高考数学一轮复习练习卷(一)(新高考适用)(含答案)
- 2024年江苏省徐州市中考一模数学试题(含答案)
- 消防员职业技能鉴定理论考试题库(含各题型)
- 2023年高中学业水平考核美术试题
- 广东省惠州市23届高三第二次调研考地理含答案
- 2024年(学习强国)思想政治理论知识考试题库与答案
- 2024年海南省国有资本运营有限公司招聘笔试冲刺题(带答案解析)
评论
0/150
提交评论