从html检索尾文本 - python

使用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.的“元素包含文本”标题中找到有关此信息

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式: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…