Python爬虫学习3-动态网页抓取基础
由于静态网页和动态网页在原理上存在差异,因此在学习使用Python爬取动态网页内容时需要先学习动态网页的基本概念并理解其与静态网页的差异。
动态网页技术的基本原理
AJAX技术
即异步JavaScript和XML,通过后台与Server端的少量数据交换使网页实现异步更新,AJAX技术可以在不重新加载整个网页的情况下对网页进行部分更新。
AJAX技术节省了网页重复内容的下载并节省了流量,因此得到了广泛应用。
↓AJAX技术的应用
使用AJAX技术动态标识的内容(如网页评论等)在HTML文件中以一段JavaScript代码进行表示。
·爬取AJAX加载的动态网页方式
①浏览器审查元素解析地址
②使用Selenium模拟浏览器抓取
浏览器审查元素解析真实地址
使用浏览器的检查元素
①在指定的网页下打开浏览器的“检查元素”功能窗口视图
②选择网络子选项卡,并刷新网页——此时网络选项卡会显示从网络Server中获得的全部文件(此过程即“抓包”,在获取的全部文件数据中筛选出目标文件即可)
③通常这些数据以json文件格式获取,选择网络中的XHR子选项卡,并继续筛选得到目标文件数据的URL
④定义link为目标URL,使用新建的request对象爬取目标内容
⑤使用json库解析数据,并进一步提取出目标数据
——使用json.loads() 转换数据为json格式(注意r.text不能直接转换为json.load,需要使用一步中间转换过程)
——使用json的数据结构提取列表comment_list,并使用for循环提取文本并输出信息打印到控制台
<代码展示>
①浏览器解析真实地址,并使用requests爬取信息并输出r.text
import requests
link = """https://api-zero.livere.com/v1/comments/list?callback=jQuery112406453811568012512_1611903863418&limit=10&repSeq=4272904&requestPath=/v1/comments/list&consumerSeq=1020&livereSeq=28583&smartloginSeq=5154&code=ce14917d979b4014a8194adf&_=1611903863420"""
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
r = requests.get(link, headers= headers)
print (r.text)
②解析真实地址,并使用json转化数据进行初步解析,循环输出评论内容:
import requests
import json
link = """https://api-zero.livere.com/v1/comments/list?callback=jQuery112406453811568012512_1611903863418&limit=10&repSeq=4272904&requestPath=/v1/comments/list&consumerSeq=1020&livereSeq=28583&smartloginSeq=5154&code=ce14917d979b4014a8194adf&_=1611903863420"""
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
r = requests.get(link, headers= headers)
# 获取 json 的 string
json_string = r.text
json_string = json_string[json_string.find('{'):-2]
json_data = json.loads(json_string)
comment_list = json_data['results']['parents']
for eachone in comment_list:
message = eachone['content']
print (message)
URL中的重要变量
通过解析真实地址可发现,URL中存在一些重要变量类型:
①limit:每个网页目标内容的最大值
(示例中每页评论显示的最大数量)
②offset:每页中目标内容在总序列中的顺位
(示例中为用户评论占总数的序列,修改offset值可实现脚本换页抓取)
关于Selenium方法实现模拟浏览器抓取的方式将在下一部分的笔记中说明。