我开始学习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"> </td>
<td width="245"> </td>
<td width="50"> </td>
<td width="80"> </td>
</tr>
<tr>
<td colspan="2">
59 Wall St</td>
<td></td>
<td></td>
</tr>
<tr>
<td colspan="2">NJ 07105
<label class="downdrill-sbi" title="New York">New York</label>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </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>
现在我使用以下脚本提取所需信息:
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代码中“逐块”自动提取数据,并将结果打印在彼此下,如上图所示?
答案 0 :(得分:0)
我认为你想要的是
print(company_name, location, website,'\n')