2015-09-02 6 views
0

Я пытаюсь извлечь таблицу с этого сайта: personal.vanguard.comпитон: разбор таблицы с помощью BeautifulSoup

Я пытаюсь получить «Holdings» и «Рыночная стоимость» колонны.

Я попробовал этот запрос, но не повезло:

from bs4 import BeautifulSoup 
import urllib2 
soup = BeautifulSoup(urllib2.urlopen('https://personal.vanguard.com/us/FundsAllHoldings?FundId=0970&FundIntExt=INT&tableName=Equity&tableIndex=0').read()) 
print(soup.prettify()) 

print soup('tbody') 

table = soup.find("tbody", { "class" : "Holding" }) 

print table 
for row in table.findAll("tr"): 
    cells = row.findAll("td") 
+0

Зачем стоит [excel]? – pnuts

ответ

0

Вы можете выбрать все строки, используя это выражение:

soup.select('tbody tr') 

Затем для каждой строки можно извлечь все столбцы:

[tr('td') for tr in soup.select('tbody tr')] 

# Example output (note the first empty row): 
[[], 
[<td align="left">zulily Inc. Class A</td>, 
    <td>965,202</td>, 
    <td class="nr">$12,750,318</td>], 
[<td align="left">xG Technology Inc.</td>, 
    <td>34,385</td>, 
    <td class="nr">$57,767</td>], 
[<td align="left">vTv Therapeutics Inc. Class A</td>, 
    <td>80,223</td>, 
    <td class="nr">$802,230</td>], 
[<td align="left">salesforce.com inc</td>, 
    <td>11,014,606</td>, 
    <td class="nr">$807,370,620</td>], 
[<td align="left">pSivida Corp.</td>, 
    <td>447,326</td>, 
    <td class="nr">$1,816,144</td>], 
[<td align="left">lululemon athletica Inc.</td>, 
    <td>1,737,050</td>, 
    <td class="nr">$109,190,963</td>]] 

Все, что вам нужно, это отфильтровать необходимые столбцы.

0
from bs4 import BeautifulSoup 
import urllib2 
url = 'https://personal.vanguard.com/us/FundsAllHoldings?FundId=0970&FundIntExt=INT&tableName=Equity&tableIndex=0' 
soup = BeautifulSoup(urllib2.urlopen(url)) 
table = soup.find("tbody", { "class" : "right" }) 
for row in table.findAll("tr"): 
    cells = row.findAll("td") 
    if len(cells) > 0: # skip first row 
     holding = cells[0] 
     mv = cells[2] 
     print holding, mv 
Смежные вопросы