python抓取动态网页(分析Ajax访问服务器的方式来获取Ajax数据的应用 )
优采云 发布时间: 2022-03-21 01:18python抓取动态网页(分析Ajax访问服务器的方式来获取Ajax数据的应用
)
如上所述,我们可以通过分析 Ajax 访问服务器的方式来获取 Ajax 数据。Ajax 也是一种动态呈现的页面。因此,动态页面也可以被爬取。
文章目录
硒
Selenium 是用于 Web 应用程序测试的工具。Selenium 测试直接在浏览器中运行,就像真正的用户一样。支持的浏览器包括 IE (7, 8, 9, 10, 11), Mozilla Firefox, Safari, Google Chrome, Opera等。该工具的主要功能包括: 测试与浏览器的兼容性 - 测试看看你的应用程序是否可以在不同的浏览器和操作系统上正常工作测试系统功能-创建回归测试以验证软件功能和用户需求支持自动记录动作和自动生成.Net、Java、Perl等不同语言的测试脚本。总之,Selenium 可以模拟用户操作浏览器,因此它也可以提取动态页面。
安装硒
在cmd中输入:
pip install selenium
同时下载对应版本浏览器的驱动。
Chrome:点击下载
火狐:点击下载
IE:点击下载
下载后解压到python安装目录下的脚本中。
Selenium 基本使用方法来声明浏览器对象
Selenium 支持很多浏览器,我们首先需要让系统知道你使用的是什么浏览器,我们可以通过以下方式对其进行初始化:
from selenium import webdriver
browser = webdriver.Chrome()
browser = webdriver.Firefox()
browser = webdriver.Edge()
browser = webdriver.PhantomJS()
browser = webdriver.Sarari()
之后,我们就可以使用调用浏览器对象来执行各种动作来模拟浏览器操作
访问页面
我们使用 get() 方法来请求一个网页,只需传入 URL。这里我们访问百度页面并打印出源代码:
from selenium import webdriver
browser = webdriver.Chrome()
browser.get(‘https://www.baidu.com’)
print(browser.page_source)
browser.close()
查找节点
find_element_by_id()
find_element_by_name()
find_element_by_xpath()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_tag_name()
find_element_by_class_name()
find_element_by_css_selector()
还有一个通用的方法:
find_element()
这个方法比上面的方法更灵活,需要传入两个参数,搜索方法By和值:
from selenium import webdriver
from selenium webdriver.common.by import By
#...
input_first = browser.find_element(BY.ID, 'q')
#...
find_elements_by_id()
find_elements_by_name()
find_elements_by_xpath()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_tag_name()
find_elements_by_class_name()
find_elements_by_css_selector()
也可以使用
find_elements()
我不会在这里详细介绍。
节点交互
Selenium 最重要的是它可以与浏览器交互。常用的有:输入文本的send_key()方法;用于清除文本的 clear() 方法;用于单击按钮的 click() 方法。一个例子如下:
#...
brower.find_elements_by_id('StudentId')[0].send_keys(StudentId) # 填入学号
brower.find_elements_by_id('Name')[0].send_keys(Password) # 填入密码
brower.find_elements_by_id('codeInput')[0].send_keys(
brower.find_elements_by_id('code-box')[0].text) # 填入验证码
brower.find_elements_by_id('Submit')[0].click() # 提交登录表单
brower.find_elements_by_id('platfrom2')[0].click() # 选择健康填报
brower.find_elements_by_id('ckCLS')[0].click()
try:
brower.find_element_by_class_name('save_form').click() # 提交
time.sleep(3)
brower.close() # 关闭浏览器
#...
更多操作请参考官方文档中的交互动作介绍:
获取节点信息
from selenium import webdriver
browser = webdriver.Chrome()
url = 'https://www.zhihu.com/explore'
browser.get(url)
input = browser.find_element_by_class_name('zu-top-add-question')
print(input.id)
print(input.location)
print(input.tag_naem)
print(input.size)