2017-03-08 136 views
0

我是新來的蟒蛇,我有一個HTML文本文件,我想刮python 2.7。如何使用python從HTML頁面提取特定數據?

下面的代碼只是一個公司的信息的例子。在完整的HTML文本文件中,所有其他公司的代碼結構都相同,並且位於彼此之下(如果後者信息有幫助)。

所以基本上,我想提取某些信息(如公司名稱,地址,電話號碼和網站)按時間順序,以便將數據分配到正確的組織,這樣的事情:

Liberty Associates LLC | New York | +1 973-344-8300 | www.liberty.edu 
Company B    | Los Angeles | +1 213-802-1770 | perchla.com 

對不起,如果我不夠簡潔,但有關如何啓動腳本以及它應該是什麼樣子的任何建議將是非常有益的!

代碼:

<body><div class="tab_content-wrapper noPrint"><div class="tab_content_card"> 
 
      <div class="card-header"> 
 
       <strong title="" d.="" kon.="" nl="">"Liberty Associates LLC"</strong> 
 
       <span class="tel" title="Phone contacts">Phone contacts</span> 
 
\t \t \t 
 
      </div> 
 
      <div class="card-content"> 
 
       
 
\t \t \t \t 
 
       <table> 
 
        <tbody> 
 
         <tr> 
 
          <td colspan="4"> 
 
           
 
           <label class="downdrill-sbi" title="Industry: Immigration">Industry: Immigration</label> 
 
          </td> 
 
         </tr> 
 
         <tr> 
 
          <td width="20">&nbsp;</td> 
 
          <td width="245">&nbsp;</td> 
 
          <td width="50">&nbsp;</td> 
 
          <td width="80">&nbsp;</td> 
 
         </tr> 
 
         <tr> 
 
          <td colspan="2"> 
 
59 Wall St</td> 
 
          <td></td> 
 
          <td></td> 
 
         </tr> 
 
         <tr> 
 
          <td colspan="2">NJ 07105&nbsp;&nbsp; 
 
           
 
           <label class="downdrill-sbi" title="New York">New York</label> 
 
          </td> 
 
          <td></td> 
 
          <td></td> 
 
         </tr> 
 
         <tr> 
 
          <td>&nbsp;</td> 
 
          <td>&nbsp;</td> 
 
          <td>&nbsp;</td> 
 
          <td>&nbsp;</td> 
 
         </tr> 
 
         <tr><td>Phone:</td><td>+1 973-344-8300</td><td>Firm Nr:</td><td>KL4568TL</td></tr> 
 
         <tr><td>Fax:</td><td>+1 973-344-8300</td><td colspan="2"></td></tr> 
 
         <tr> 
 
          <td colspan="2"> <a href="http://www.liberty.edu/" target="_blank">www.liberty.edu</a> </td> 
 
          <td>Active:</td> 
 
          <td>Yes</td> 
 
         </tr> 
 
        </tbody> 
 
       </table> 
 
      </div> 
 
      
 

 
     </div></div></body>

它是如何看起來像在網頁上:

enter image description here

編輯:

因此,與ajputnam的幫助下,我現在得到這樣的:

from lxml import html  

str = open('test_html.txt', 'r').read() 
tree = html.fromstring(str) 

name = tree.xpath("/html/body/div/div/div[1]/strong/text()") 
place = tree.xpath("/html/body/div/div/div[2]/table/tbody/tr[4]/td[1]/label/text()") 
phone = tree.xpath("/html/body/div/div/div[2]/table/tbody/tr[6]/td[2]/text()") 
url = tree.xpath("/html/body/div/div/div[2]/table/tbody/tr[8]/td[1]/a/text()") 

print(name, place, phone, url) 

打印:

(['"Liberty Associates LLC"'], ['New York'], ['+1 973-344-8300'], ['www.liberty.edu']) 

然而,當我嘗試對整個HTML文件代碼(與一個以上的企業數據)我得到所有匹配的變量都是正確的。我該如何正確使用[0]來獲得結構化這樣的數據?:

Liberty Associates LLC | New York | +1 973-344-8300 | www.liberty.edu 
Company B    | Los Angeles | +1 213-802-1770 | perchla.com 
+0

讀它是如何看待網頁? –

+0

@Radical Fanatic請參閱我的更新後文章 – jakeT888

回答

1

首先你需要從頁面的HTML。你可以使用庫這樣的請求來做到這一點。

from lxml import html 
import requests 

page = requests.get('url') 
tree = html.fromstring(page.content) 

然後你可以使用選擇器訪問「樹」中的東西。

prices = tree.xpath('//span[@class="item-price"]/text()') 

或者你可以只是正常解析字符串。

看到:HTML scrapping

從文件

from lxml import html 

# read html as string from file 
str = open('file.html', 'r').read() 
tree = html.fromstring(str) 

company = tree.xpath('//div[@class="card-header"]/strong/text()') 
print company 
+0

感謝您的回覆。不幸的是我沒有網頁/網址。我只將HTML代碼保存在硬盤上的txt文件中。 – jakeT888

+0

哦,更容易。只需將該文件作爲字符串讀取,即可使用相同的步驟。 – ajputnam

+0

此方法是否也「循環」,因此它在第一個HTML「塊」完成時也會抓取其他公司數據? – jakeT888

相關問題