首先我是个技术小白,工作的经验也不到一年的时间,但是却在这一年的时间里让我深深体会到了面对问题时对解决的问题的感悟。话不多说,总结一句话就是:这是我的第一篇技术博客,希望大家在阅读的同时能给予一些建议,共同学习进步。
我们平时写爬虫的代码就是想着构造请求获取响应,但是这只是一般的网站能够让你获取到你想要的数据,面对访问量大、数据宝贵的情况下,你可能就比较失望了。因为正常的发送请求获取到的数据往往是js加密后的数据,所以面对这类的网站,如其研究怎么解密,倒不如直接换一种方案解决,说到这里有经验的人直接就想到了selenium,嗯没错我说的就是selenium,但是我所说的是我工作中真正运用的,所以不同于其他的纯技术类的博客,接下来我就开始详细说一下我对selenium的理解和运用。
1.什么是selenium?
就是能够模拟浏览器发送请求获取响应,响应的数据就是浏览器上人眼看到的数据(所见即所得),再运用Xpath(这里的语法可以参考官方的用法)来抓取页面上的数据,因为加载的页面数据是没有加密的,所以直接就能获取。
2.PhantomJs无界面的浏览器
相对于selenium,PhantomJs的无界面浏览器占用内存较小,在爬取数据的时候无需自动开启界面,但是可以通过设置来实现selenium的我界面抓取,具体操作:
from selenium import webdriver
# 创建chrome参数对象
opt = webdriver.ChromeOptions()
# 把chrome设置成无界面模式,不论windows还是linux都可以,自动适配对应参数
opt.set_headless()
# 创建chrome无界面对象
driver = webdriver.Chrome(options=opt)
# 访问百度
driver.get('https://baidu.com/')
#打印内容
print(driver.page_source)
同时这里的ChromeOptions()也可以设置代理来应对反爬,具体操作
from selenium import webdriver
chromeOptions = webdriver.ChromeOptions()
# 设置代理
chromeOptions.add_argument("--proxy-server=http://202.20.16.82:10152")
# 一定要注意,=两边不能有空格,不能是这样--proxy-server = http://202.20.16.82:10152
browser = webdriver.Chrome(chrome_options = chromeOptions)
# 查看本机ip,查看代理是否起作用
browser.get("http://httpbin.org/ip")
print(browser.page_source)
# 退出,清除浏览器缓存
browser.quit()
注意:这里的代理的数量,我目前只用了一个效率较高的代理,因为selenium爬虫采用的是浏览器渲染技术,本身速度就很慢。如果选择的代理IP速度较慢,就会大大增加爬取的时间。所以使用代理前需要慎重,你要知道你使用的代理是不是访问的速度快。
3. selenium抓取时应对滚动加载类的界面时如何抓取?
方法一: 通过selenium模拟浏览器,然后设置浏览器高度足够长,然后延时使之能够将页面的内容都能够加载出来
from selenium import webdriver
driver = webdriver.Firefox()
driver.set_window_size(1000,30000)
driver.get(url)
time.sleep(5)
方法二: 通过模拟浏览器去执行js去拉动滑滚条
from selenium import webdriver
driver = webdriver.Firefox()
driver.get(url)
driver.execute_script("window.scrollBy(0,3000)")
time.sleep(1)
driver.execute_script("window.scrollBy(0,5000)")
time.sleep(1)
注意:这种方法你得根据加载的内容去判定下拉的位置和次数,否则会只能获取到部分内容(建议使用方法一)
4. selenium中三种页面加载等待
我这里就不多说因为我看了一位博主写的比较生动形象了,点击此处可以参考一下,相信你能一目了然的。
关于selenium就暂时讲到这里,后面关于selenium的知识点还会继续更新,学无止境,一起共勉吧 !