我正在一個項目中,我需要抓取幾個網站,並從中收集不同類型的信息。像文字,鏈接,圖像等信息刮HTML和JavaScript
我正在使用Python。我已經在HTML頁面上爲此嘗試了BeautifulSoup,並且它可以工作,但是當解析包含大量JavaScript的站點時,我被卡住了,因爲這些文件中的大部分信息都存儲在<script>
標記中。
任何想法如何做到這一點?
我正在一個項目中,我需要抓取幾個網站,並從中收集不同類型的信息。像文字,鏈接,圖像等信息刮HTML和JavaScript
我正在使用Python。我已經在HTML頁面上爲此嘗試了BeautifulSoup,並且它可以工作,但是當解析包含大量JavaScript的站點時,我被卡住了,因爲這些文件中的大部分信息都存儲在<script>
標記中。
任何想法如何做到這一點?
首先,從頁面中刪除和解析JS並不是微不足道的。但是,如果您使用無頭網絡客戶端,它可以大大簡化,它將像常規瀏覽器一樣爲您解析所有內容。
唯一的區別是它的主界面不是GUI/HMI,而是一個API。
這方面的一個例子是Ghost.py - 一個用python編寫的webkit web客戶端。
當然還有其他的選擇。您可以將Qt的QWebKit用於相同的目的,如this example所示。
你可以找到一個更完整的無頭瀏覽器列表here。
我能夠得到鬼的工作和加載頁面,但我應該做什麼,使整個網頁從它。該文檔描述了一個get_page函數,但即使在代碼本身中也不存在。 – user1934948
如果在頁面加載中涉及大量JavaScript動態加載,事情會變得更加複雜。
基本上,你有3種方式從網站抓取數據:
而且看看Scrapy網絡刮框架 - 它不處理AJAX調用過,但這的確是在基於web的最佳工具刮過的世界我曾經與之合作過。
也看到這些資源:
希望有所幫助。
爲了幫助您開始使用硒和BeautifulSoup:
安裝與NPM phantomjs(節點包管理器):
apt-get install nodejs
npm install phantomjs
安裝硒:
pip install selenium
,並得到類似的結果頁面這個,並像往常一樣用beautifulSoup解析:
from BeautifulSoup4 import BeautifulSoup as bs
from selenium import webdriver
client = webdriver.PhantomJS()
client.get("http://foo")
soup = bs(client.page_source)
一個非常快速的方法是通過所有的標籤進行迭代,並得到textContent
這是JS代碼片段:
page =""; var all = document.getElementsByTagName("*"); for (tag of all) page = page + tag.textContent;
或硒/蟒蛇:
import selenium
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://ranprieur.com")
pagetext = driver.execute_script('page =""; var all = document.getElementsByTagName("*"); for (tag of all) page = page + tag.textContent; return page;')
和另一個資源:http://stackoverflow.com/questions/22624255/how-to-scrape-search-results-if-returned-in-javascript-using-python/22630026#22630026 – Ehvince
作爲一方請注意,硒比Ghost輕得多。 – Ehvince