1,动态数据加载的概念
1.1, 什么是动态数据加载
1.2, 动态数据加载跟爬虫有啥关系
requests模块
----》它们在发起请求爬取数据的过程中,不能够执行js代码
scrapy 框架
1.3,用到一个---->selenium是一个web端自动化测试框架
2,selenium的介绍
selenium是一个web端自动化测试框架,程序员可以通过代码来控制浏览器,比如说打开网页,关闭浏览器,点击一下,比如说拖动,向下滚动,向左右滚动
作用:帮助抓取动态加载的数据,避免反爬
3,安装与配置
安装:
1,pip install selenium
2,驱动程序:下载
2.1,查看浏览器的版本
2.2,选择相对应版本
4,selenium的相关的API
#编码流程
from selenium import webdriver
browser = webdriver.Chrome('./chromedriver.exe')
browser.get('https://www.baidu.com/')
#如何获取网页的元素
browser.find_element_by_id('id值') 根据id值定位节点
browser.find_element_by_name('name值') 根据name值定位节点
browser.find_element_by_class_name() 根据节点class属性定位节点
browser.find_element_by_xpath() 根据xpath定位节点
browser.find_element_by_css_selector() css选择器
browser.find_element_by_link_text() 根据超文本定位
browser.find_element_by_partial_link_text() 根据超链接文本的一部分定位
#节点交互的操作
aa.send_keys("抖动") #输入操作
aa.clear() #清空
bb.click() #点击
quit() #退出浏览器
#获取网页的源码
browser.page_source -->字符串-->xpath解析
#执行js的脚本
js='window.scrollTo(0,document.body.scrollHeight)' #滚动到一定的高度
js="alert('啥也不是')" #弹窗
browser.execute_script(js) #执行js
#子页面的跳转:
注意: selenium 默认是父级页面
switch_to_frame('frameid')
switch_to_default_conent()
#防检测
from seleniun.webdriver.chrome.options import Options
options=Options()
options.add_experimental_option('excludeSwitches',['enable-automation'])
#无头浏览器
5.八大定位小练习
from selenium import webdriver
import time
# 创建一个驱动
db=webdriver.Chrome()
db.get("https://www.baidu.com")
db.maximize_window() # 最大化窗口
# # 1.id
# db.find_element_by_id("kw").send_keys("123")
# time.sleep(2)
# # 2.class
# db.find_element_by_class_name("s_ipt").send_keys("123")
# time.sleep(2)
# # 3.xpath
# db.find_element_by_xpath("//*[@id='kw']").send_keys("123")
# # 4.css
# db.find_element_by_xpath("//*[@id='kw']").send_keys("123")
# time.sleep(2)
# #5.link
# db.find_element_by_link_text("新闻").click()
# time.sleep(2)
# # 6.partial_link
# db.find_element_by_partial_link_text("新").click()
# time.sleep(2)
# # 7.tag标签唯一或者该标签在子元素的第一个 https://cn.bing.com
# db.find_element_by_tag_name("input").send_keys("123")
# time.sleep(2)
# #8.name
# db.find_element_by_name("wd").send_keys("qwe")
# # 9.clear清除
# kk=db.find_element_by_name("wd")
# kk.send_keys("qwe")
# kk.clear()
# # 窗口自动化切换
# print("------",db.window_handles) #打印标识
# print('kkkkkk',db.current_url) #打印地址
# db.find_element_by_link_text("hao123").click()
# db.switch_to.window(db.window_handles[1])
# print("------",db.window_handles) #打印标识
# print('kkkkkk2',db.current_url) #打印地址
# db.close() #关闭第一个
# # 弹框处理
# db.find_element_by_id("s-usersetting-top").click()
# time.sleep(2)
# db.find_element_by_class_name("setpref").click()
# time.sleep(1)
# db.find_element_by_id("nr_3").click()
# time.sleep(1)
# db.find_element_by_link_text("保存设置").click()
# time.sleep(1)
下拉框