【问题标题】:Difference between attributes and style tags in lxmllxml中属性和样式标签的区别
【发布时间】:2009-09-29 03:41:44
【问题描述】:

在使用 BeautifulSoup 之后,我正在尝试学习 lxml。但是,总的来说,我不是一个强大的程序员。

我在一些源代码 html 中有以下代码:

<p style="font-family:times;text-align:justify"><font size="2"><b><i> The reasons to eat pickles include:  </i></b></font></p>

因为文本是粗体的,所以我想拉出该文本。我似乎无法区分该特定行是粗体的。

当我今晚开始这项工作时,我正在处理一个在样式属性中包含粗体字的文档,如下所示:

<p style="font-style:italic;font-weight:bold;margin:0pt 0pt 6.0pt;text-indent:0pt;"><b><i><font size="2" face="Times New Roman" style="font-size:10.0pt;">The reason I like tomatoes include:</font></i></b></p>

我应该说我正在处理的文档是我在行中阅读的一个片段,将这些行连接在一起,然后使用 html.fromstring 函数

txtFile=open(r'c:\myfile.htm','r').readlines()
strHTM=''.join(txtFile)
newHTM=html.fromstring(strHTM)

所以我上面的第一行 htm 代码是 newHTM[19]

嗯,这似乎让我更接近了

newHTM.cssselect('b')

我还没有完全理解,但这里是解决方案:

for each in newHTM:
    if each.cssselect('b')
        each.text_content()

【问题讨论】:

    标签: python lxml


    【解决方案1】:

    使用 CSS API 确实不是正确的方法。如果要查找所有 b 元素,请执行

    strHTM=open(r'c:\myfile.htm','r').read() # no need to split it into lines first
    newHTM=html.fromString(strHTM)
    bELements = newHTM.findall('b')
    for b in bElements:
        print b.text_content()
    

    【讨论】:

    • 这是我开始的地方,但它不起作用。据我所知,这是因为 newHTM 是一个类,但现在我迷路了。我不知道为什么我决定在 newHTM 中对每一个都进行操作,但这是关键。
    • 我错了,因为 newHTM 和 newHTM 中的 each 都是相同类型的对象,所以不是这样
    • 好吧,我会编辑,但我不能 fromString sb fromstring 并且您的列表名称不同。但是当我在我的 htm 片段上运行此代码时,bElements 的长度为 0。
    猜你喜欢
    • 2022-07-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    相关资源
    最近更新 更多