selenium------是一款web自动化测试框架,其能模拟正常的用户操作,比如点击。但selenium并不是浏览器,没有执行js和解析html/css的能力,因此selenium需要和浏览器配合使用。
因为selenium可以模仿用户行为,因此selenium也常被用来作为爬虫解决方案。原因是随着技术的发展,网站技术变得越来越复杂,特别是动态网站技术,使用了多种反爬技术,比如请求头限制,ip限制,代码混淆,加密,接口验证等。
通过js逆向等逆向工程使得爬虫变得越来越困难,技术难度大;因此selenium配合浏览器就是一个好的选择,不管网站使用多少技术,我模拟用户的正常浏览操作行为总可以把,这样就可以直接绕过各种混淆,逆向等反爬技术。
但selenium既然是模仿正常用户的操作,那他就无法绕过一部分验证,那就是验证码或者其它客户端验证方式。
因此selenium也并不是完美的。
selenium使用起来很简单,但如果用来做爬虫需要一定的前后端开发经验,否则直接做爬虫会非常的困难。
初始化代码如下:
python
# python 代码
# 引入selenium包
from selenium.webdriver import Chrome
# 创建一个浏览器对象, url为要爬取的网站地址
driver = webdriver.Chrome(options=opt)
driver.get("url")
driver发起请求之后,就可以获取到网页代码,和真实用户操作的结果没有什么不同;然后selenium就可以通过xpath,正则表达式等方式获取到页面节点。然后模拟用户操作,比如点击,输入用户,密码等。
python
# 通过xpath语法,通过class或id等从网页中提取节点,
btn = driver.find_element(By.XPATH, '//*[@class="douyin-login__close" or contains(@class,"dy-account-close")]')
# 模拟用户点击
btn.click()
因此,selenium开发爬虫的难点不是技术问题,是经验问题,比如怎么通过xpath提到到目标节点。
最难的一点就是各种验证码,比如看图识字,输入验证数字等;最坑的就是一些滑块验证,有时会监听鼠标移动路径,但selenimu只是模拟用户点击没有办法监听鼠标移动,因此这种验证码没有什么好办法绕过。
所以,面对这种网站,最好的方式就是跳过前端页面,直接爬取其接口;但后端接口也会使用大量的反爬技术,比如用户身份验证,权限验证,加解密等。
总之,爬虫是一门技术和经验并重的工作,重要的是结果,不是过程;不论你用什么办法能拿到你想要的数据,那就是一个好的爬虫工程师,千万不要钻牛角尖。
当然,在最后提醒一下,爬虫技术是一门徘徊在法律边缘的技术,虽然法律没有禁止爬虫的存在,但如果用来爬取别人的私密数据,或者重要的企业数据,然后给企业造成损失,那么就有可能吃皇家饭。
因此,可以学习爬虫技术,但要注意爬虫技术的使用。