Scrapy框架中运用selenium的经验
相对于selenium,PhantomJs的无界面浏览器占用内存较小,在爬取数据的时候无需自动开启界面,但是可以通过设置来实现selenium的我界面抓取,具体操作:
1 from selenium import webdriver 2 # 创建chrome参数对象 3 opt = webdriver.ChromeOptions() 4 # 把chrome设置成无界面模式,不论windows还是linux都可以,自动适配对应参数 5 opt.set_headless() 6 # 创建chrome无界面对象 7 driver = webdriver.Chrome(options=opt) 8 # 访问百度 9 driver.get('https://baidu.com/') 10 #打印内容 11 print(driver.page_source) 12 同时这里的ChromeOptions()也可以设置代理来应对反爬,具体操作 13 14 from selenium import webdriver 15 chromeOptions = webdriver.ChromeOptions() 16 # 设置代理 17 chromeOptions.add_argument("--proxy-server=http://202.20.16.82:10152") 18 # 一定要注意,=两边不能有空格,不能是这样--proxy-server = http://202.20.16.82:10152 19 browser = webdriver.Chrome(chrome_options = chromeOptions) 20 # 查看本机ip,查看代理是否起作用 21 browser.get("http://httpbin.org/ip") 22 print(browser.page_source) 23 # 退出,清除浏览器缓存 24 browser.quit()
注意:这里的代理的数量,我目前只用了一个效率较高的代理,因为selenium爬虫采用的是浏览器渲染技术,本身速度就很慢。如果选择的代理IP速度较慢,就会大大增加爬取的时间。所以使用代理前需要慎重,你要知道你使用的代理是不是访问的速度快。
- selenium抓取时应对滚动加载类的界面时如何抓取?
方法一: 通过selenium模拟浏览器,然后设置浏览器高度足够长,然后延时使之能够将页面的内容都能够加载出来
1 from selenium import webdriver 2 driver = webdriver.Firefox() 3 driver.set_window_size(1000,30000) 4 driver.get(url) 5 time.sleep(5)
方法二: 通过模拟浏览器去执行js去拉动滑滚条
1 from selenium import webdriver 2 driver = webdriver.Firefox() 3 driver.get(url) 4 driver.execute_script("window.scrollBy(0,3000)") 5 time.sleep(1) 6 driver.execute_script("window.scrollBy(0,5000)") 7 time.sleep(1)
注意:这种方法你得根据加载的内容去判定下拉的位置和次数,否则会只能获取到部分内容(建议使用方法一)
浙公网安备 33010602011771号