转自:自由爸爸,iceblue iceblue,王阳阳javascript
详细内容请参考:Selenium-Python中文文档html
python有许多库可让咱们很方便地编写网络爬虫,爬取某些页面,得到有价值的信息!但许多时候,爬虫取到的页面仅仅是一个静态的页面,即网页 的源代码,就像在浏览器上的“查看网页源代码”同样。一些动态的东西如javascript脚本执行后所产生的信息,是抓取不到的,这里暂且先给出这么一 些方案,可用于python爬取js执行后输出的信息。java
js脚本是经过浏览器来执行并返回信息的,因此,抓取js执行后的页面,一个最直接的方式就是用python模拟浏览器的行为。WebKit 是一个开源的浏览器引擎,python提供了许多库能够调用这个引擎,dryscrape即是其中之一,它调用webkit引擎来处理包含js等的网页!python
1 import dryscrape 2 # 使用dryscrape库 动态抓取页面 3 def get_url_dynamic(url): 4 session_req=dryscrape.Session() 5 session_req.visit(url) #请求页面 6 response=session_req.body() #网页的文本 7 #print(response) 8 return response 9 get_text_line(get_url_dynamic(url)) #将输出一条文本
这里对于其他包含js的网页也是适用的!虽然能够知足抓取动态页面的要求,但缺点仍是很明显的:慢!太慢了,其实想想也合理,python调用 webkit请求页面,并且等页面加载完,载入js文件,让js执行,将执行后的页面返回,慢一点也是应该的!除外还有不少库能够调用 webkit:PythonWebkit,PyWebKitGit,Pygt(能够用它写个浏览器),pyjamas等等,据说它们也能够实现相同的功 能!git
selenium是一个web测试框架,它容许调用本地的浏览器引擎发送网页请求,因此,它一样能够实现抓取页面的要求。
# 使用 selenium webdriver 可行,但会实时打开浏览器窗口github
1 def get_url_dynamic2(url): 2 driver=webdriver.Firefox() #调用本地的火狐浏览器,Chrom 甚至 Ie 也能够的 3 driver.get(url) #请求页面,会打开一个浏览器窗口 4 html_text=driver.page_source 5 driver.quit() 6 #print html_text 7 return html_text 8 get_text_line(get_url_dynamic2(url)) #将输出一条文本
这也不失为一条临时的解决方案!与selenium相似的框架还有一个windmill,感受稍复杂一些,就再也不赘述!web
在Ubuntu上安装能够直接使用pip install selenium。因为如下缘由:chrome
1. 运行报错:浏览器
driver = webdriver.chrome()网络
TypeError: 'module' object is not callable
解决方案:浏览器的名称须要大写Chrome和Firefox,Ie
2. 经过
1 content = driver.find_element_by_class_name('content')
来定位元素时,该方法返回的是FirefoxWebElement,想要获取包含的值时,能够经过
1 value = content.text