爬虫工具Botasaurus简介
一、Botasaurus概述
Botasaurus是一个类似于selenium的爬虫工具,使用python语言编写,项目源地址为:https://github.com/omkarcloud/botasaurus。
目前该项目受到关注度较少,只有1.2k的star,远低于selenium,但是经实际测试:botasaurus在隐藏机器人标识方面优于selenium,测试时分别使用selenium与botasaurus访问自动化工具检测网站,前者会被网站识别出是机器人,而后者则会被判断为真人操作。
二、Botasaurus安装
安装有两种方式,一种为下载源项目到本地,通过项目中的setup.py安装,另一种为通过pip下载安装。pip下载安装命令如下:
pip install botasaurus
与selenium不同,Botasaurus不需要单独下载chromedriver,而是已在内部集成。
三、Botasaurus获取页面html文件
示例代码如下:
from botasaurus.browser import browser, Driver
@browser()
def get_html_botasaurus(driver: Driver, data, metadata):
driver.get(data)
html_txt = driver.page_html
html_path = 'page.html'
with open(html_path, 'w', encoding = 'gbk', errors = 'replace') as f:
f.write(html_txt)
Botasaurus使用装饰器函数,对打开的浏览器进行一些参数配置,在编写和调用函数时相对于selenium较为复杂一些。
四、控制不加载图片与css
Botasaurus内部提供参数设置接口,能够设置打开浏览器后不加载页面的图片与css样式文件,提高页面加载速度,设置接口在装饰器函数中,如下:
from botasaurus.browser import browser, Driver
@browser(block_images_and_css = True)
def get_html_botasaurus(driver: Driver, data, metadata):
driver.get(data)
html_txt = driver.page_html
html_path = 'page.html'
with open(html_path, 'w', encoding = 'gbk', errors = 'replace') as f:
f.write(html_txt)
五、获取网站cookie
有时需要获取网站为浏览器客户端设置的cookie,用以配合requests等下载工具使用,示例代码如下:
from botasaurus.browser import browser, Driver
@browser(block_images_and_css = True)
def get_cookie(driver: Driver, data, metadata):
driver.get(data)
cookiedictList = driver.get_cookies()
for cookiedict in cookiedictList:
print(cookiedict)
六、查找页面元素与实现元素点击、输入
Botasaurus查找元素的语法与JavaScript查找元素的语法非常相似,可以根据元素标签名称、class、id等属性查找元素。此外,可以在查找函数中直接设置查找的等待时间,而不必在查找函数之前调用等待函数,这一点优于selenium。
查找单个元素时,如找不到会返回None,查找多个元素时,查找不到会返回空列表。
示例代码如下:
from botasaurus.browser import browser, Driver
@browser(block_images_and_css = True)
def get_element_of_html(driver: Driver, data, metadata):
driver.get(data)
title_element = driver.select('title', wait = 6)#查找页面title元素,等待时间为6秒
title_txt = title_element.text#获取title元素文本
div_element = driver.select("div.class01.class02", wait = 6)#查找类名为class01 class02的单个div元素
div_elements = driver.select_all("div.class01.class02", wait = 6)#查找类名为class01 class02的所有div元素
input_element = driver.select("input#id01", wait = 6)#查找id名为id01的单个input元素
input_element.type("abcd")#向input元素输入框输入abcd
a_element = div_element.select('a', wait = 6)#在div元素内部查找a元素
a_id = a_element.get_attribute("id")#获取a元素的id名称
a_element.click()#点击a元素
七、执行js代码
Botasaurus支持执行js代码,一些操作可以通过js代码实现,示例代码如下:
from botasaurus.browser import browser, Driver
@browser(block_images_and_css = True)
def run_jsCode(driver: Driver, data, metadata):
driver.get(data)
reload_js = 'location.reload()'
driver.run_js(reload_js)#实现页面重载