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速度较慢,就会大大增加爬取的时间。所以使用代理前需要慎重,你要知道你使用的代理是不是访问的速度快。

  1. 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)

注意:这种方法你得根据加载的内容去判定下拉的位置和次数,否则会只能获取到部分内容(建议使用方法一)

posted @ 2021-02-25 22:48  超级爱度假  阅读(184)  评论(0)    收藏  举报