使用 BeautifulSoup 删除换行符 (\n)
Removing newlines (\n) with BeautifulSoup
我正在用 BS4 解析 HTML 页面:
import re
import codecs
import MySQLdb
from bs4 import BeautifulSoup
soup = BeautifulSoup(open("sprt.htm"), from_encoding='utf-8')
sprt = [[0 for x in range(3)] for x in range(300)]
i = 0
for para in soup.find_all('p'):
if para.strong is not None:
sprt[i][0] = para.strong.get_text()
sprt[i][1] = para.get_text()
sprt[i][1] = re.sub(re.escape(sprt[i][0]), "", sprt[i][1], re.UNICODE)
sprt[i][2] = sprt[i][1]
sprt[i][2] = re.sub(r".+[\.\?][\s\S\n]", "", sprt[i][1], re.S)
sprt[i][2] = re.sub(r".+Panel", "Panel", sprt[i][2], re.S)
sprt[i][1] = re.sub(re.escape(sprt[i][2]), "", sprt[i][1])
i += 1
x = 0
我正在解析的页面充满了像 3:
这样的段落
<p><strong>Name name. </strong>The Visual Politics of Play: On The Signifying Practices of Digital Games. Panel Proposal (2p)</p>
<p><strong>Name name and Name name. </strong>Pain, Art and Communication. Panel Proposal (2p)</p>
<p><strong>Name name, Name name and Name name. </strong>Waves of Technology: The Hidden Ideologies of Cognitive Neuroscience and the future production of the Iconic. Panel Proposal (2p)</p>
在最后一段之前解析工作正常:
<p><strong>Name name, Name name and Name name. </strong>Waves of Technology: The Hidden Ideologies of Cognitive Neuroscience and the future production of the Iconic. Panel Proposal (2p)</p>
我在数组的最后一个槽中找到的是这样的:
[u'Name name, Name name\xa0and Name name.\xa0', u'Waves\n of Technology: The Hidden Ideologies of Cognitive Neuroscience and the \nfuture production of the Iconic.\xa0Panel Proposal (2p)', u'Waves\n of Technology: The Hidden Ideologies of Cognitive Neuroscience and the \nfuture production of the Iconic.\xa0Panel Proposal (2p)']
有两个换行符(\n
)出现在奇怪的地方(Waves
之后和future
之前)。它们总是出现在相同的位置,而不是随机出现。
我以为是段落太长的问题,但有些较长的段落没有 \n
出现。
我尝试通过以下方式删除它们:
sprt[i][2] = re.sub("\n", "", sprt[i][1], re.U, re.S)
但是没有用。
换行是因为我在某处犯了错误吗?有办法去除它们吗?
sprt[i][2] = re.sub(r"\n", "", sprt[i][1], re.U, re.S)
^^
你可以试试raw
模式。
我怀疑换行符实际上出现在源 Html 文件中。我尝试使用您的段落重现您的错误,但在我实际在源文件中插入新行之前我没有得到任何 \n
。这也可以解释为什么其他较长的段落不会发生这种情况:它们在 html 源文件中根本没有任何实际的换行符。
话虽如此,如果我添加您的 re.sub
行,我确实会删除换行符。 (不过我在 sprt[i][2]
中得到了它,当然不是 sprt[i][1]
- 有没有可能你找错地方了?)
我正在用 BS4 解析 HTML 页面:
import re
import codecs
import MySQLdb
from bs4 import BeautifulSoup
soup = BeautifulSoup(open("sprt.htm"), from_encoding='utf-8')
sprt = [[0 for x in range(3)] for x in range(300)]
i = 0
for para in soup.find_all('p'):
if para.strong is not None:
sprt[i][0] = para.strong.get_text()
sprt[i][1] = para.get_text()
sprt[i][1] = re.sub(re.escape(sprt[i][0]), "", sprt[i][1], re.UNICODE)
sprt[i][2] = sprt[i][1]
sprt[i][2] = re.sub(r".+[\.\?][\s\S\n]", "", sprt[i][1], re.S)
sprt[i][2] = re.sub(r".+Panel", "Panel", sprt[i][2], re.S)
sprt[i][1] = re.sub(re.escape(sprt[i][2]), "", sprt[i][1])
i += 1
x = 0
我正在解析的页面充满了像 3:
这样的段落<p><strong>Name name. </strong>The Visual Politics of Play: On The Signifying Practices of Digital Games. Panel Proposal (2p)</p>
<p><strong>Name name and Name name. </strong>Pain, Art and Communication. Panel Proposal (2p)</p>
<p><strong>Name name, Name name and Name name. </strong>Waves of Technology: The Hidden Ideologies of Cognitive Neuroscience and the future production of the Iconic. Panel Proposal (2p)</p>
在最后一段之前解析工作正常:
<p><strong>Name name, Name name and Name name. </strong>Waves of Technology: The Hidden Ideologies of Cognitive Neuroscience and the future production of the Iconic. Panel Proposal (2p)</p>
我在数组的最后一个槽中找到的是这样的:
[u'Name name, Name name\xa0and Name name.\xa0', u'Waves\n of Technology: The Hidden Ideologies of Cognitive Neuroscience and the \nfuture production of the Iconic.\xa0Panel Proposal (2p)', u'Waves\n of Technology: The Hidden Ideologies of Cognitive Neuroscience and the \nfuture production of the Iconic.\xa0Panel Proposal (2p)']
有两个换行符(\n
)出现在奇怪的地方(Waves
之后和future
之前)。它们总是出现在相同的位置,而不是随机出现。
我以为是段落太长的问题,但有些较长的段落没有 \n
出现。
我尝试通过以下方式删除它们:
sprt[i][2] = re.sub("\n", "", sprt[i][1], re.U, re.S)
但是没有用。
换行是因为我在某处犯了错误吗?有办法去除它们吗?
sprt[i][2] = re.sub(r"\n", "", sprt[i][1], re.U, re.S)
^^
你可以试试raw
模式。
我怀疑换行符实际上出现在源 Html 文件中。我尝试使用您的段落重现您的错误,但在我实际在源文件中插入新行之前我没有得到任何 \n
。这也可以解释为什么其他较长的段落不会发生这种情况:它们在 html 源文件中根本没有任何实际的换行符。
话虽如此,如果我添加您的 re.sub
行,我确实会删除换行符。 (不过我在 sprt[i][2]
中得到了它,当然不是 sprt[i][1]
- 有没有可能你找错地方了?)