无法删除抓取文本之间的空格
Unable to remove spaces between scraped text
我在 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
我试图在这一行 [item.text for item in root.cssselect(".postal-address p")]
中应用 .strip()
和 .replace("\n","")
但它抛出了一个错误显示 none type object
.
顺便说一句,我不希望有任何与 regex
相关的解决方案。提前致谢。
当你执行 .replace("\n","") 时,我认为你必须转义斜线。这有时会让人感到困惑,如果不尝试,我无法告诉你需要多少次斜杠才能逃脱它,但请尝试其中之一....
.replace("\n","")
.replace("\\n","")
.replace("\\n","")
使用单引号会发生什么?
- 用逗号分隔源字符串。
- 从结果列表中的每个字符串中去除任何前导或尾随空格。
- 使用
', '
作为分隔符连接字符串。
像这样:
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]))
尝试以下解决方案,如有任何问题请告诉我:
address = [" ".join(item.text.split()).replace(" ,", ",") for item in root.cssselect(".postal-address p") if item.text]
输出:
['11525 23 AVE', 'EDMONTON, AB, T6J 4T3']
我在 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
我试图在这一行 [item.text for item in root.cssselect(".postal-address p")]
中应用 .strip()
和 .replace("\n","")
但它抛出了一个错误显示 none type object
.
顺便说一句,我不希望有任何与 regex
相关的解决方案。提前致谢。
当你执行 .replace("\n","") 时,我认为你必须转义斜线。这有时会让人感到困惑,如果不尝试,我无法告诉你需要多少次斜杠才能逃脱它,但请尝试其中之一....
.replace("\n","")
.replace("\\n","")
.replace("\\n","")
使用单引号会发生什么?
- 用逗号分隔源字符串。
- 从结果列表中的每个字符串中去除任何前导或尾随空格。
- 使用
', '
作为分隔符连接字符串。
像这样:
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]))
尝试以下解决方案,如有任何问题请告诉我:
address = [" ".join(item.text.split()).replace(" ,", ",") for item in root.cssselect(".postal-address p") if item.text]
输出:
['11525 23 AVE', 'EDMONTON, AB, T6J 4T3']