Python 关于如何使用lxml从html输出解析数据的简单示例

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>

我正在将一些使用正则表达式将内容从html输出提取到libxml2的python脚本转换为libxml2,但由于我是从这开始的,因此需要一些帮助

如何使用lxml从下面示例的“工作目录”、“包/更新”和“Java数据模型”中提取值

<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数据模型”)
的内容。我编辑了这篇文章来表达我的意思。谢谢,非常感谢!你救了我一天=)