selenium的简介
1.动态HTML技术了解
1.1爬虫和反爬虫的斗争
- 爬虫建议
- 尽量减少请求次数
- 保存获取到的HTML,供查错和重复使用
- 关注网站的所有类型的页面
- Html5页面
- APP
- 多伪装
- 代理IP
- 随机请求头
- 利用多线程分布式
- 在不被发现的情况下我们尽可能的提高速度
1.2 ajax基本介绍
动态了解HTML技术
- JS
- 是网络上最常用的脚本语言,它可以收集用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页
- jQuery
- jQuery是一个快速、简介的JavaScript框架,封装了JavaScript常用的功能代码
- ajax
- ajax可以使用网页实现异步更新,可以在不重新加载整个网页的情况下,对网页的某部分进行更新
- 获取ajax数据的方式
- 1.直接分析ajax调用的接口。然后通过代码请求这个接口。
- 2.使用Selenium+chromedriver模拟浏览器行为获取数据
方式 | 缺点 | 优点 |
---|---|---|
分析接口 | 直接可以请求到数据。不需要做一些解析工作。代码量少,性能高 | 分析接口比较复杂,特别是一些通过js混淆的接口,要有一定的js功底。容易被发现是爬虫 |
selenium | 直接模拟浏览器的行为。浏览器能请求到的,使用selenium也能请求到。爬虫更稳定。 | 代码量多。性能相对较低 |
2.selenium+chromedriver获取动态数据
2.1selenium 介绍
- selenium是一个web的自动化测试工具,最初是为网站自动化测试而开发的,selenium可以直接运行在浏览器上,它支持所有主流的浏览器,可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏
- chromedriver是一个驱动Chrome浏览器的驱动程序,使用他才可以驱动浏览器。当然针对不同的浏览器有不同的driver。以下列出了不同浏览器及其对应的driver:
- 下载chromedriver
- 百度搜索:淘宝镜像(https://npm.taobao.org/)
- 安装总结:https://www.jianshu.com/p/a383e8970135
- 安装Selenium:pip install selenium
2.2selenium的使用
1.selenium的基本操作
# 导入selenium库
from selenium import webdriver
# 实例化浏览器(根据浏览器的不同webdriver.“ ”里的会有变化)
driver = webdriver.Chrome("") # 括号内需要将驱动器的路径写入
# 向网址发送请求
driver.get(url)
- driver.webdriver.Chrome( ) 如果将驱动器chromedrive,放入python环境的文件夹这里可以就不用写东西更省事。
# 窗口最大化
driver.maximize_window()
# 窗口最小化
driver.minimize_window()
# 退出当前窗口
driver.close()
# 退出浏览器
driver.quit()
2.selenium操作表单元素
# 通过开发者工具通过id找到元素
inputTag = driver.find_element_by_id("kw")
inputTag.send_key("长城")# 发送数据
# 找到“百度一下”进行点击
driver.find_element_by_id("su").click()
# 获取到页面源码
driver.page_source()
# 获取cookie
driver.get_cookies()
# 获取当前的url
driver.current_url()
3.方法拓展
# 方法扩展,此方法不常用,但需要了解,防止看到有人用时一脸懵
from selenium.webdriver.common.by import By
#通过find_element_by_id id查找
driver.find_element_by_id('kw').send_keys('python')
#扩展方法
driver.find_element(By.ID,'kw').send_keys('python')
# find_element_by_name 名字查找
driver.find_element_by_name('wd').send_keys('动物')
driver.find_element(By.NAME,'wd').send_keys('动物')
# 通过find_element_by_class_name 类名查找
driver.find_element_by_class_name('s_ipt').send_keys('美食')
driver.find_element(By.CLASS_NAME,'s_ipt').send_keys('美食')
#最不常用的方法,通过find_element_by_tag_name 标签名查找
driver.find_element_by_tag_name('div').send_keys('被子')
driver.find_element(By.TAG_NAME,'').send_keys('被子')
# 最常用的方法,通过find_element_by_xpath 根据xpath语法获得元素
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('杯子')
driver.find_element(By.XPATH,'//*[@id="kw"]').send_keys('杯子')
- 注意:(其他方法也是)
# element后面多个“ s ”在筛选数据时,结果会呈现为列表形式
driver.find_elements_by_xpath()