2014-01-07 39 views
1

因此,我正在執行一些嘗試在網上刮取用戶的醜聞。omegle lxml刮不工作

這是HTML代碼:

<div id="onlinecount"> 
    <strong>  
     30,000+  
    </strong>  
</div> 

現在我假定使用LXML這將是//div[@id="onlinecount"]刮中的任何文字,我想從標籤獲得的數字,但是當我嘗試刮這個,我剛剛結束了一個空表

這裏是我的相關代碼:

print "\n Grabbing users online now from",self.website 
site = requests.get(self.website) 
tree = html.fromstring(site.text) 
users = tree.xpath('//div[@id="onlinecount"]') 

注意,self.website變量只是http://www.omegle.com

任何想法我做錯了什麼?注意我可以刮除其他部分而不是在線用戶的數量。

我結束了使用從朋友那裏學到的一組不同的代碼。 下面是我感興趣的任何人的完整代碼。 http://pastebin.com/u1kTLZtJ

+0

我無法從我的位置獲取源代碼,但也許HTML代碼不是完美的XML。在這種情況下,lxml可能無法正確解析樹。在這種情況下,BeautifulSoup來拯救。只是我的兩美分:) – Cilyan

回答

1

當您使用請求python模塊向「http://www.omegle.com」發送GET請求時,我發現在site.text中沒有「onlinecount」。原因是部分得到了一個JavaScript呈現。您應該使用能夠執行javascript的庫併爲您提供在瀏覽器中呈現的最終html源代碼。一個這樣的第三方庫是Selenium http://selenium-python.readthedocs.org/。唯一的缺點是它打開了一個真正的網絡瀏覽器。

下面是一個使用硒一個附加的屏幕截圖一個工作碼和:

from selenium import webdriver 
browser = webdriver.Firefox() 
browser.get("http://www.omegle.com") 
element = browser.find_element_by_id("onlinecount") 
onlinecount = element.find_element_by_tag_name("strong") 

enter image description here

0

我已經做了一些看這個,頁面的特定部分不是XML,而是Javascript。

這裏是源(這是請求庫在你的程序返回)

 <div id="onlinecount"></div> 
     <script> 
     if (IS_MOBILE) { 
      $('sharebuttons').dispose(); 
      $('onlinecount').dispose(); 
     } 
     </script> 
     </div> 

正如你所看到的,在LXML眼裏沒有什麼,但在onlinecount DIV的腳本。

0

我同意普利文。

如果你想避免發動可見的瀏覽器,你可以使用PhantomJS 其中也有硒司機

http://phantomjs.org/

PhantomJS是一個無頭WebKit的腳本化有一個JavaScript API

而不是硒腳本,你也可以編寫PhantomJS js腳本(但我認爲你寧願留在Python env;))