[搬運自個人CSDN博客] python抓取javascript動態生成HTML內容的實踐

<注:CSDN博客在美國訪問特別卡,因此轉移到cnblogs來發文章>javascript

本實驗在Ubuntu14.04上完成。使用的瀏覽器是火狐(Firefox 33.0),python版本是2.7.6。html

你們都知道用urllib配合正則表達式抓取靜態HTML的內容很方便,可是若是網頁中有javascript動態生成的內容,urllib就無能爲力了。java

此時咱們要藉助一個額外的工具:selenium。它的工做原理是操縱(火狐)瀏覽器瀏覽目標網頁,等待網頁中的javascript所有執行完畢後再對HTML源碼進行操做。整個過程就好像是人工操做瀏覽器轉到目標網址查看源代碼同樣。python

從selenium的官網下載selenium-server-standalone-2.44.0.jar。爲了你們方便我已經傳到了網盤上。下載後設置一下文件的權限:git

$ chmod 664 selenium-server-standalone-2.44.0.jar正則表達式

而後,安裝python的selenium工具包:api

$ pip install -U selenium瀏覽器

準備工做就緒了,下面開始測試一下這套系統。首先運行起selenium的server:工具

$ sudo java -jar selenium-server-standalone-2.44.0.jar 測試

注意,整個命令會在輸出了幾行信息後就不動了。這不是卡死,而是server已經作好準備,等待python腳本的調用。因此這個窗口就不要動了。

開個新窗口執行python腳本:

$ python skk.py

skk.py的內容以下:

 1 #!/usr/bin/python
 2 from selenium import selenium
 3 
 4 def selenium_init(browser,url,para):
 5     sel = selenium('localhost', 4444, browser, url)
 6     sel.start()
 7     sel.open(para)
 8     sel.set_timeout(60000)
 9     sel.window_focus()
10     #sel.window_maximize()
11     return sel     
12 
13 if __name__ =="__main__" :
14     browser='*firefox'
15     html=''
16     sel1=selenium_init(browser,'http://music.baidu.com','/top')
17     try:
18         html=sel1.get_html_source()
19     finally:
20         sel1.stop()
21         print html

在腳本執行的過程當中,火狐瀏覽器會彈出來跳動一番,就好像人工操做瀏覽器看網頁同樣。不要理它,最後瀏覽器窗口會自動關掉。

腳本最終打印出http://music.baidu.com/top的HTML源碼,存在字符串變量html中。讀者能夠繼續用正則表達式從「html」中獲取數據。

關於selenium的python接口的更多用法,能夠參考官方文檔:http://selenium.googlecode.com/git/docs/api/py/api.html

相關文章
相關標籤/搜索