相对于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速度较慢,就会大大增加爬取的时间。所以使用代理前需要慎重,你要知道你使用的代理是不是访问的速度快。
- 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)
注意:这种方法你得根据加载的内容去判定下拉的位置和次数,否则会只能获取到部分内容(建议使用方法一)
三种等待方式 https://blog.csdn.net/cyjs1988/article/details/76033180