2016-12-24 72 views
2

我目前的訓練用Python和BS4代碼和HTML選擇對象正在測試從這個網站選擇對象:http://www.metal-archives.com/lists/Python和BS4

我想包含列樂隊,國家,流派表和狀態代碼如下:

import requests 
from bs4 import BeautifulSoup 
r = requests.get('http://www.metal-archives.com/lists/A') 
soup = BeautifulSoup(r.content, 'lxml') 

print([a.text for a in soup.select('td.sorting_1 a')]) 

但沒有任何反應,沒有任何信息顯示。

我已經嘗試過很多不同的方式,比如'soup.find_all'等。當我用Chrome瀏覽網站時,表'bandListAlpha'在那裏,但是當我用Bs4解析時,什麼也沒有發生。

我想它應該是與不使整頁的「請求」的方法,但我需要如何獲得此信息的一些建議,我需要學習什麼呢?感謝你們。

回答

0

有一個金屬歸檔AJAX API,瀏覽器使用它來獲取頁面上的所需數據。有不同的方法來解決這個問題,比如,通過selenium啓動一個真正的瀏覽器,或模仿這些額外的Ajax請求自己的代碼。

但你也可以重複使用的東西已經存在在github上 - 有一個「金屬檔案」的Python API包裝稱爲metallum,您可以直接從github上安裝:

pip install git+https://github.com/lcharlick/python-metallum 

下面是使用示例代碼這個庫:

In [2]: from metallum import band_search 

In [3]: s = band_search('metallica') 

In [4]: b = s[0].get() 

In [5]: print(b.name, b.country, b.status, b.genres) 
('Metallica', 'United States', 'Active', ['Thrash Metal (early)', 'Hard Rock/Heavy/Thrash Metal (later)']) 
+0

你做得很好。隨着你的答案,我學到的代碼本身,而且,通過GitHub的Python的API的安裝。此時我正在研究這種金屬的變化。謝謝。 –

0

本頁面使用JavaScript來獲取數據,真實數據是在這個網址:

http://www.metal-archives.com/browse/ajax-letter/l/A/json/1?sEcho=1&iColumns=4&sColumns=&iDisplayStart=0&iDisplayLength=500&mDataProp_0=0&mDataProp_1=1&mDataProp_2=2&mDataProp_3=3&iSortCol_0=0&sSortDir_0=asc&iSortingCols=1&bSortable_0=true&bSortable_1=true&bSortable_2=true&bSortable_3=false&_=1482634713018 

您可以請求該URL,並得到JSON數據備份。

+1

嗷謝謝!上週我花了很多時間研究HTML結構和其他東西,因爲這是我在這個網絡報廢過程中所沒有的。 –