2016-03-02 50 views
-2

我想在底部湊這個頁面的持股表,讓每列中的信息:https://www.sec.gov/Archives/edgar/data/1412093/000114036111027807/0001140361-11-027807.txt如何在文本文件中解析表格?

我到目前爲止是這樣的:

from bs4 import BeautifulSoup 
import urllib2 
import datetime 
import sys 

def scrape(url): 
    htmlfile = urllib2.urlopen(url) 
    htmltext = htmlfile.read() 
    bs = BeautifulSoup(htmltext) 
    tables =bs.find_all('table') 
    for table in tables: 
     print table 

if __name__ == '__main__': 
    url = 'https://www.sec.gov/Archives/edgar/data/1412093/000114036111027807/0001140361-11-027807.txt' 
    scrape(url) 

然而,這隻能讓我看到桌子,而我似乎無法進一步逐行解析它。 任何幫助,這將不勝感激,謝謝!

+0

那麼,你知道如何找到表,所以下一步找到行... – davidism

回答

0

問題是,這不是一個HTML表,而是一個空間分隔的列集,你將不得不進行不同的解析。下面是使用splitlines()表分成行和split()分割成列的很幼稚,但工作液:

import urllib2 

from bs4 import BeautifulSoup 

def scrape(url): 
    htmlfile = urllib2.urlopen(url) 
    htmltext = htmlfile.read() 
    bs = BeautifulSoup(htmltext, "html.parser") 

    data = bs.find('table').get_text().splitlines()[10:] 
    for line in data: 
     print([item for item in line.split()]) 

if __name__ == '__main__': 
    url = 'https://www.sec.gov/Archives/edgar/data/1412093/000114036111027807/0001140361-11-027807.txt' 
    scrape(url) 

打印:

['ADVENTRX', 'PHARMAMACEUTICALS', 'INC', 'COM', 'NEW', '00764X202', '289', '138,377', 'SH', 'SOLE', 'N/A', '138,377'] 
['AMGEN', 'INC', 'COM', '31162100', '54,519', '1,020,000', 'SH', 'SOLE', 'N/A', '1,020,000'] 
... 
['SOUTHERN', 'UN', 'CO', 'NEW', 'COM', '844030106', '5,328', '186,154', 'SH', 'SOLE', 'N/A', '186,154'] 
['TAKE-TWO', 'INTERACTIVE', 'SOFTWAR', 'COM', '874054109', '151,310', '9,844,502', 'SH', 'SOLE', 'N/A', '9,844,502'] 

最不可靠的是,[10:]片。我要離開這個讓你改進。

+0

謝謝,這是有幫助的。無論如何要按列拆分?我對分離空間的擔憂是,公司名稱等一些信息被拆分爲多個字符串,每個公司都有不同的長度名稱。我看到有標籤,但可以根據這些標籤進行拆分嗎?或者讓每個列在單獨的列表中? – user3628240

+0

你可以做一些類似的事情,找到表格,拿起列頂部的破折號。對這些數據進行計數並使用它來分割其餘數據,從開始和結束剝離空白區域,並且最終得到您想要的結果。 – bmcculley