Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用lxml、xpath在Python中解析HTML_Python_Html_Xpath_Lxml - Fatal编程技术网

使用lxml、xpath在Python中解析HTML

使用lxml、xpath在Python中解析HTML,python,html,xpath,lxml,Python,Html,Xpath,Lxml,我正在尝试使用python和lxml和xpath解析html格式的值 这是我的html数据 <table> <tr> <td class="u"><input class="wide" name="record[13][name]" value="exampledomain1.com"></td> <td class="u"> <select name="record[13][type]"&g

我正在尝试使用python和lxml和xpath解析html格式的值

这是我的html数据

<table>
<tr>
<td class="u"><input class="wide" name="record[13][name]" value="exampledomain1.com"></td>
      <td class="u">
       <select name="record[13][type]">
         <option SELECTED value="A" >A</option>
         <option value="AAAA" >AAAA</option>
         <option value="CNAME" >CNAME</option>
         <option value="HINFO" >HINFO</option>
         <option value="MX" >MX</option>
         <option value="NAPTR" >NAPTR</option>
         <option value="NS" >NS</option>
         <option value="PTR" >PTR</option>
         <option value="SOA" >SOA</option>
         <option value="SPF" >SPF</option>
         <option value="SRV" >SRV</option>
         <option value="SSHFP" >SSHFP</option>
         <option value="TXT" >TXT</option>
         <option value="RP" >RP</option>
         <option value="URL" >URL</option>
         <option value="MBOXFW" >MBOXFW</option>
         <option value="CURL" >CURL</option>
       </select>
      </td>
      <td class="u"><input class="wide" name="record[13][content]" value='10.10.10.1'></td>

<td class="u"><input class="wide" name="record[14][name]" value="exampledomain2.com"></td>
      <td class="u">
       <select name="record[14][type]">
         <option SELECTED value="CNAME" >A</option>
         <option value="AAAA" >AAAA</option>
         <option value="CNAME" >CNAME</option>
         <option value="HINFO" >HINFO</option>
         <option value="MX" >MX</option>
         <option value="NAPTR" >NAPTR</option>
         <option value="NS" >NS</option>
         <option value="PTR" >PTR</option>
         <option value="SOA" >SOA</option>
         <option value="SPF" >SPF</option>
         <option value="SRV" >SRV</option>
         <option value="SSHFP" >SSHFP</option>
         <option value="TXT" >TXT</option>
         <option value="RP" >RP</option>
         <option value="URL" >URL</option>
         <option value="MBOXFW" >MBOXFW</option>
         <option value="CURL" >CURL</option>
       </select>
      </td>
      <td class="u"><input class="wide" name="record[14][content]" value='exampledomain1.com'></td>

<td class="u"><input class="wide" name="record[15][name]" value="exampledomain3.com"></td>
      <td class="u">
       <select name="record[15][type]">
         <option SELECTED value="A" >A</option>
         <option value="AAAA" >AAAA</option>
         <option value="CNAME" >CNAME</option>
         <option value="HINFO" >HINFO</option>
         <option value="MX" >MX</option>
         <option value="NAPTR" >NAPTR</option>
         <option value="NS" >NS</option>
         <option value="PTR" >PTR</option>
         <option value="SOA" >SOA</option>
         <option value="SPF" >SPF</option>
         <option value="SRV" >SRV</option>
         <option value="SSHFP" >SSHFP</option>
         <option value="TXT" >TXT</option>
         <option value="RP" >RP</option>
         <option value="URL" >URL</option>
         <option value="MBOXFW" >MBOXFW</option>
         <option value="CURL" >CURL</option>
       </select>
      </td>
      <td class="u"><input class="wide" name="record[15][content]" value='10.10.10.3'></td>
</tr>
</table>
这是我试过的

#!/usr/bin/python
import lxml.html
from lxml import etree

doc = lxml.html.document_fromstring("""Here whole html data""")
txt1 = doc.xpath('//*[@class="wide"]/@value')
txt2 = doc.xpath('//@SELECTED/text()')
print txt1
print txt2
但它并没有像我想要的那样工作。任何帮助都将不胜感激


谢谢大家。

我修改了返回以下内容的代码,这与您的要求非常接近:

(py26_default)[mpenning@Bucksnort ~]$ python parse.py
exampledomain1.com 10.10.10.1
exampledomain2.com exampledomain1.com
exampledomain3.com 10.10.10.3
(py26_default)[mpenning@Bucksnort ~]$
无法使用xpath检索
记录[13][type]
。。。还有其他的方法可以迭代,但我将把它作为OP的练习。注意,我在OP的问题中修复了HTML,包括
标记

import lxml.html
从lxml导入etree
从lxml.etree导入XMLParser
parser=XMLParser(ns_clean=True,recover=True)
doc=etree.fromstring(““”此处为整个html数据“”,解析器)
elem1=doc.xpath('//input[@name=“record[13][name]”)
#注意:无法使用xpath检索。。。选定的必须具有
#这样做的价值。。。
#elem2=doc.xpath('//select[@name=“record[13][type]”]/option[@SELECTED])
elem3=doc.xpath('//input[@name=“record[13][content]”)
对于idx,枚举中的val(elem1):
打印val.attrib['value'],elem3[idx].attrib['value']


A.
AAAA
CNAME
欣福
MX
NAPTR
NS
PTR
SOA
防晒因子
SRV
SSHFP
文本
反相
统一资源定位地址
MBOXFW
卷曲
A.
AAAA
CNAME
欣福
MX
NAPTR
NS
PTR
SOA
防晒因子
SRV
SSHFP
文本
反相
统一资源定位地址
MBOXFW
卷曲
A.
AAAA
CNAME
欣福
MX
NAPTR
NS
PTR
SOA
防晒因子
SRV
SSHFP
文本
反相
统一资源定位地址
MBOXFW
卷曲

在HTML报告7错误上运行“xmllint--noout”。您应该在尝试解析它之前修复它们。它如何“不按[您]想要的方式工作”?请使用BeautifulSoup。。简单易用的Mike,字段“name=“record[13]”正在为所有其他dns记录更改,我已在这段html代码中对其进行了更正'不会捕获具有不同数字的所有记录。因此,我如何在其中或范围中定义通配符。您可以使用来解决此问题谢谢您Mike,我在使用正则表达式时得到了这一点,但仍然坚持获取选定值。我指的是此代码
A
其中值为“A”,它应该将“选定值”打印为“A”“整个输出应该是
exampledomain1.com A 10.10.10.1
我已经帮了很多忙了。这个答案说明了如何解决你的问题;然而,我不能解决所有的问题,这是你工作的一部分。你需要面对挑战
(py26_default)[mpenning@Bucksnort ~]$ python parse.py
exampledomain1.com 10.10.10.1
exampledomain2.com exampledomain1.com
exampledomain3.com 10.10.10.3
(py26_default)[mpenning@Bucksnort ~]$
record_13_name = tree.xpath("//select[@name='record[13][name]']/text()")
record_13_type = tree.xpath("//select[@name='record[13][type]']/option/text()")
record_13_content = tree.xpath("//input[@name='record[13][content]']/text()")


record_14_name = tree.xpath("//select[@name='record[14][name]']/text()")
record_14_type = tree.xpath("//select[@name='record[14][type]']/option/text()")
record_14_content = tree.xpath("//input[@name='record[14][content]']/text()")


record_15_name = tree.xpath("//select[@name='record[15][name]']/text()")
record_15_type = tree.xpath("//select[@name='record[15][type]']/option/text()")
record_15_content = tree.xpath("//input[@name='record[15][content]']/text()")