2016-04-08 26 views
2

通常的片段創建湯每當我使用Beautifulsoup提取數據的簡單Beautiflsoup隨着頁面源代碼

soup = BeautifulSoup(driver.page_source, "html5lib") 

容易。任務完成。

但我正在處理一個網站,它有一個lot的數據。它已經加載,所以我不需要擔心加載時間,但我認爲真正的殺手是讓我的find_all通過頁面源代碼,我不需要看。

我知道我可以通過導航到課堂等來製作湯,從而縮小我尋找的數據的範圍。這是可行的,但速度很慢。實際上,即使用page_source創建湯也相當緩慢。

我試過在

湯= BeautifulSoup(driver.find_element_by_class_name( '盒子'), 「html5lib」)

但沒有成功的變化。是否有可能做這樣的事情沒有拳頭看所有的源代碼?我想在某種形式下,它仍然需要加載源代碼才能找到我想要查看的類。但是下載後更小的湯可能會更快地瀏覽。

我會很感激任何能指引我朝這個方向發展的人。

TL; DR我從page_source的湯是巨大的需要時間來通過硒通過我可以限制我的湯到某個類名或什麼東西在導航之前。

回答

2

當然,這也正是SoupStrainer約爲:

SoupStrainer類允許你選擇哪一個輸入文檔的各個部分進行解析。

例如,如果你想BeautifulSoup來解析其box類元素:

from bs4 import BeautifulSoup, SoupStrainer 

only_box = SoupStrainer(class_="box") 
BeautifulSoup(driver.page_source, "html5lib", parse_only=only_box) 

作爲一個側面說明,如果速度真的很重要,可考慮改用從html5liblxml.html解析器:

​​
+0

啊完美!你不知道你今晚過得好多了。我會給lxml一個去,但它往往會錯過html5lib似乎拿起的東西。 – PoweredByCoffee