使用lxml的Python 2.7
我有一些恼人的html看起来像这样:
<td>
<b>"John"
</b>
<br>
"123 Main st.
"
<br>
"New York
"
<b>
"Sally"
</b>
<br>
"101 California St.
"
<br>
"San Francisco
"
</td>
所以基本上它是一个td,里面有很多东西。我正在尝试编译名称及其地址的列表或字典。
到目前为止,我已经完成了使用tree.xpath('//td/b')
命名节点的列表。因此,假设我当前在John的b
节点上。
我正在尝试获取当前节点之后但下一个whatever.xpath('string()')
节点之前的所有内容(Sally)的b
。我尝试了很多不同的xpath查询,但似乎无法正确解决。特别是,每当我在没有and
括号的表达式中使用[]
运算符时,它都会返回布尔值,而不是满足条件的所有节点的列表。有人可以帮忙吗?
python大神给出的解决方案
这应该工作:
from lxml import etree
p = etree.HTMLParser()
html = open(r'./test.html','r')
data = html.read()
tree = etree.fromstring(data, p)
my_dict = {}
for b in tree.iter('b'):
br = b.getnext().tail.replace('\n', '')
my_dict[b.text.replace('\n', '')] = br
print my_dict
此代码打印:
{'"John"': '"123 Main st."', '"Sally"': '"101 California St."'}
(您可能要删除引号!)
除了使用xpath之外,您还可以使用lxml的解析器之一来轻松浏览HTML。解析器会将HTML文档转换为“ etree”,您可以使用提供的方法进行导航。 lxml模块提供了一种称为iter()
的方法,该方法允许您传递标记名称并使用该名称接收树中的所有元素。在您的情况下,如果使用它来获取所有<b>
元素,则可以手动导航到<br>
元素并检索其尾部文本,其中包含所需的信息。您可以在lxml.etree tutorial.的“元素包含文本”标题中找到有关此信息
我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…
查找字符串中的行数 - python我正在创建一个python电影播放器/制作器,我想在多行字符串中找到行数。我想知道是否有任何内置函数或可以编写代码的函数来做到这一点:x = """ line1 line2 """ getLines(x) python大神给出的解决方案 如果换行符是'\n',则nlines …
字符串文字中的正斜杠表现异常 - python为什么S1和S2在撇号位置方面表现不同?S1="1/282/03/10" S2="4/107/03/10" R1="".join({"N\'" ,S1,"\'" }) R2="".join({"N\'…
Python pytz时区函数返回的时区为9分钟 - python由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…
Python sqlite3数据库已锁定 - python我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…