2017-07-18 135 views
2

我試圖從這個網站刮的價格表(買是,價格和合同提供):https://www.predictit.org/Contract/7069/Will-the-Senate-pass-the-Better-Care-Reconciliation-Act-by-July-31#prices刮表與美麗的湯

這是我的(顯然是非常初步的)代碼,現在結構只是爲了找到表:

from bs4 import BeautifulSoup 
import requests 
from lxml import html 
import json, re 

url = "https://www.predictit.org/Contract/7069/Will-the-Senate-pass-the-Better-Care-Reconciliation-Act-by-July-31#prices" 

ret = requests.get(url).text 

soup = BeautifulSoup(ret, "lxml") 

try: 
    table = soup.find('table') 
    print table 
except AttributeError as e: 
    print 'No tables found, exiting' 

的代碼查找並分析表;然而,這是錯誤的(不同標籤上的數據表https://www.predictit.org/Contract/7069/Will-the-Senate-pass-the-Better-Care-Reconciliation-Act-by-July-31#data)。

我如何解決這個錯誤,以確保代碼識別正確的表?

+0

你要哪臺?你最好的選擇是使用'soup.find_all('table')'然後遍歷返回的列表。在遍歷它時,只搜索特定元素只有你想要的表有 – TerryA

+0

@TerryA執行該代碼並且它沒有標識所需的表,只是第一個標籤上的表。 – libertyspursuit

+0

你想從第一個鏈接中得到什麼表格? – TerryA

回答

1

如@downshift評價提到的表JS使用XHR請求而產生。
因此,您可以使用Selenium或直接請求該網站的api。

使用第二個選項:

url = "https://www.predictit.org/PrivateData/GetPriceListAjax?contractId=7069" 
ret = requests.get(url).text 
soup = BeautifulSoup(ret, "lxml") 
table = soup.find('table') 
+0

謝謝你的幫助! – libertyspursuit