动态数据加载
1.什么是动态数据加载
2.动态数据加载跟爬虫有啥关系:
requests模块
scrapy框架---> 他们在发起请求爬取数据的过程中, 不能够执行JS代码
3.用到一个东西 --> selenium是一个web端自动化测试框架,
selenium的介绍
selenium是一个web端自动化测试框架, 程序员可以通过代码来控制浏览器, 比如说打开网页, 关闭浏览器, 点击一下, 比如说拖动, 向下滚动, 向左右滚动
作用: 帮助抓取动态加载的数据, 避免反爬
1.安装模块:
selenium
pip install selenium
2.Chrome浏览器驱动下载链接: http://chromedriver.storage.googleapis.com/index.html
1.在Chrome浏览器获取版本信息,进入链接下载
2.进入下载与自己系统匹配的版本
3.将chrome驱动配置到环境变量中,这样使用的时候,不用每次都填写chrome的驱动位置
4.下载完成以后到 Program files 文件下,在新建一个名为 chromedriver 的文件,将下载的 chromedriver.exe 复制进去, 并复制路径
5.在我的电脑-->高级-->环境变量-->path编辑-->新建将复制的路径添加
3.简单实践
import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com/')
# 获取百度输入框
input_tag = browser.find_element_by_id('kw')
# 在输入框输入内容
input_tag.send_keys('黑洞')
time.sleep(1)
# 点击'百度一下'
click_button = browser.find_element_by_id('su')
click_button.click()
time.sleep(5)
4.selenium相关的简单操作
# 如何获取网页的元素
find_element_by_id('idvalue'): 根据节点的id属性值定位节点
find_element_by_name(): 根据节点的name属性值定位节点
find_element_by_class_name(): 根据节点的class属性值来进行定位
find_element_by_xpath(): 根据xpath定位节点
find_element_by_css_selector(): css 选择器
find_element_by_link_text(): 根据超链接文本定位
find_element_by_partial_link_text(): 根据超链接文本的一部分定位
# 节点交互的操作:
1.输入内容: send_keys()
2.清空内容: clear()
3.点击操作: click()
4.退出浏览器: quit()
# 获取网页源码
browser.page_source --> 字符串 --> xpath解析
# 执行js脚本
js = 'window.scrollTo(0, document.body.scrollHeight)' # 滚动一瓶的高度
browser.execute_script(js)
js = "alert('你好!!!!')"
# 防检测:
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_experimental_option('excludeSwitches', ['enable-automation'])