无法删除拼写文本

时间:2017-10-18 11:10:33

标签: python python-3.x web-scraping lxml.html

我在python中编写了一个脚本来从一些html元素中删除一些文本。该脚本现在可以解析它。然而,问题是结果看起来很奇怪,它们之间有一堆空格。我该如何解决?任何帮助将受到高度赞赏。

这是应该从中删除文本的html元素:

html="""
<div class="postal-address">
        <p>11525 23 AVE</p>


        <p>EDMONTON,
        AB
        ,
        T6J 4T3
        </p>

        <p><a rel="nofollow" href="mailto:info@something.com">info@something.com</a></p>
        <p><a rel="nofollow" href="http://www.something.org" target="_blank">Visit our Web Site</a></p>
    </div>
"""

这是我正在尝试的脚本:

from lxml.html import fromstring

root = fromstring(html)
address = [item.text for item in root.cssselect(".postal-address p")]
print(address)

结果我有:

11525 23 AVE, EDMONTON,\n        AB\n        ,\n        T6J 4T3\n

预期结果:

11525 23 AVE EDMONTON, AB, T6J 4T3

我尝试在此行.strip()中应用.replace("\n","")[item.text for item in root.cssselect(".postal-address p")],但它显示错误none type object

顺便说一句,我不希望有任何与regex相关的解决方案。提前谢谢。

3 个答案:

答案 0 :(得分:1)

尝试以下解决方案,如有任何问题,请与我联系:

address = [" ".join(item.text.split()).replace(" ,", ",") for item in root.cssselect(".postal-address p") if item.text]

输出:

['11525 23 AVE', 'EDMONTON, AB, T6J 4T3']

答案 1 :(得分:0)

当你做.replace(&#34; \ n&#34;,&#34;&#34;)我认为你必须逃避斜线。这有时会令人困惑,如果没有尝试,我无法告诉你需要多少次slasshes才能逃脱它,但尝试其中一种.......

.replace("\\n","")
.replace("\\\n","")
.replace("\\\\n","")

使用单引号会发生什么?

答案 2 :(得分:0)

  1. 在逗号上拆分源字符串。
  2. 从结果列表中的每个字符串中删除任何前导或尾随空格。
  3. 使用', '作为分隔符加入字符串。
  4. 像这样:

    src = '11525 23 AVE, EDMONTON,\n        AB\n        ,\n        T6J 4T3\n'
    print(', '.join([s.strip() for s in src.split(',')]))
    

    <强>输出

    11525 23 AVE, EDMONTON, AB, T6J 4T3
    

    如果您已经有一个字符串列表,那就更容易了:

    address = [
        '11525 23 AVE', 
        ' EDMONTON', 
        '\n        AB\n        ', 
        '\n        T6J 4T3\n'
    ]
    
    print(', '.join([s.strip() for s in address]))