Python 关于如何使用lxml从html输出解析数据的简单示例
我正在将一些使用正则表达式将内容从html输出提取到libxml2的python脚本转换为libxml2,但由于我是从这开始的,因此需要一些帮助 如何使用lxml从下面示例的“工作目录”、“包/更新”和“Java数据模型”中提取值Python 关于如何使用lxml从html输出解析数据的简单示例,python,html,parsing,lxml,Python,Html,Parsing,Lxml,我正在将一些使用正则表达式将内容从html输出提取到libxml2的python脚本转换为libxml2,但由于我是从这开始的,因此需要一些帮助 如何使用lxml从下面示例的“工作目录”、“包/更新”和“Java数据模型”中提取值 <tr> <script>writeTD("row");</script> <td class="oddrow"><nobr>Working Dir</nobr></td>
<tr>
<script>writeTD("row");</script>
<td class="oddrow"><nobr>Working Dir</nobr></td>
<script>writeTD("rowdata-l");</script>
<td class="oddrowdata-l">/serves/test_servers</td>
</tr>
<script>swapRows();</script>
<tr>
<script>writeTD("row");</script>
<td class="evenrow"><nobr>Packages/Updates</nobr></td>
<script>writeTD("rowdata-l");</script>
<td class="evenrowdata-l"><a href="updates.dsp">View</a></td>
</tr>
<script>swapRows();</script>
<tr>
<script>writeTD("row");</script>
<td class="oddrow"><nobr>Java Data Model</nobr></td>
<script>writeTD("rowdata-l");</script>
<td class="oddrowdata-l">64-bit</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
书面形式(“row”);
工作目录
书面形式(“rowdata-l”);
/服务/测试服务器
swapRows();
书面形式(“row”);
软件包/更新
书面形式(“rowdata-l”);
swapRows();
书面形式(“row”);
Java数据模型
书面形式(“rowdata-l”);
64位
提前感谢。使用您发布为
内容的HTML
import lxml.html as LH
doc = LH.fromstring(content)
tds = (td.text_content() for td in doc.xpath('//td'))
for td, val in zip(*[tds]*2):
if td in ("Working Dir", "Java Data Model"):
print(td,val)
屈服
('Working Dir', '/serves/test_servers')
('Java Data Model', '64-bit')
这条生产线完成了大部分工作:
tds = (td.text_content() for td in doc.xpath('//td'))
它使用xpath()
方法来搜索所有
标记。它使用text\u content()
方法提取相关文本
zip(*[tds]*2)
是成对迭代tds
:
for td, val in zip(*[tds]*2):
print(td,val)
请注意,这假设标签和值交替跟随。此解决方案非常有效!非常感谢,但是现在,我怎么能做选择性提取呢?例如,如果我只想提取“工作目录”和“Java数据模型”?您可以使用类似于if-td-in(“工作目录”,“Java数据模型”)
的内容。我编辑了这篇文章来表达我的意思。谢谢,非常感谢!你救了我一天=)