如何使用python从html文件中自动提取数据?

时间:2017-03-09 15:28:11

标签: python html xml-parsing

我开始学习python(2.7)并希望从存储在文本文件中的html代码中提取某些信息。下面的代码只是整个HTML代码的一小部分。在完整的html文本文件中,代码结构对于所有其他公司数据也是相同的,并且这些html代码“块”位于彼此之下(如果后一个信息有帮助)。

html代码段:

    <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>
    			
                </div>
                <div class="card-content">
                    
    				
                    <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

现在我使用以下脚本提取所需信息:

from lxml import html

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

for variable in tree.xpath('/html/body/div/div'):
    company_name = variable.xpath('/html/body/div/div/div[1]/strong/text()')
    location = variable.xpath('/html/body/div/div/div[2]/table/tbody/tr[4]/td[1]/label/text()')
    website = variable.xpath('/html/body/div/div/div[2]/table/tbody/tr[8]/td[1]/a/text()')
    print(company_name, location, website)

印刷结果:

('"Liberty Associates LLC"', 'New York', 'www.liberty.edu')

到目前为止一切顺利。但是,当我使用上面的脚本来浏览整个 html文件时,结果会在一行上相互打印 。但我想在下面打印数据(html代码“blocks”),如下所示:

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

我知道我可以使用[0][1][2]等来按照我的意愿将数据下载到彼此之下,但是为所有数千个html“块手动执行此操作“实际上并不可行。

所以我的问题是:如何从html代码中“逐块”自动提取数据,并将结果打印在彼此下,如上图所示?

1 个答案:

答案 0 :(得分:0)

我认为你想要的是

print(company_name, location, website,'\n')