从字符串中删除长短划线

时间:2017-03-17 11:49:06

标签: python beautifulsoup

我正在尝试从网站上阅读html内容到Python来分析那里的文本,并决定它们属于哪个类别。我有一个长短划线的问题,因为当我尝试使用它们时它们会进入NoneType。我尝试过在这个网站上提出的几个修复程序,但没有一个有效。

from bs4 import BeautifulSoup
import re
import urllib.request
response = urllib.request.urlopen('website-im-opening')
content = response.read().decode('utf-8')
#this does not work
content = content.translate({0x2014: None})
content = re.sub(u'\u2014','',content)
#This is other part of code
htmlcontent = BeautifulSoup(content,"html.parser")

for cont in htmlcontent.select('p'):
    if cont.has_attr('class') == False:
        print(cont.strip()) #Returns an error as text contains long dash

任何想法如何从字符串中过滤掉长短划线才能使用其他文本?我可以用短划线替换它或完全移除,它们对我来说并不重要。

谢谢!

2 个答案:

答案 0 :(得分:1)

你应该在使用bs4解压缩之后清理数据:

  1. BS4会转换一些HTML实体,你不需要自己动手。
  2. BS4将为您的
  3. 解码文档

    ```

    response = urllib.request.urlopen('website-im-opening')
    
    content = response.read()
    
    htmlcontent = BeautifulSoup(content,"html.parser")
    
    for cont in htmlcontent.find_all('p', class_=False):
    
        print(p.text)
    

    ```

答案 1 :(得分:0)

这样的事情会为你做这个工作吗?

# will only work if dashes are at either end
>>> a = '—asasas—'
>>> a.strip('\xe2\x80\x94')
'asasas'

它只是删除了长短划线 可以改为使用:

# can replace '[long-dash]' with '' to remove instead
>>> a = '—asasas—'
>>> a.replace('\xe2\x80\x94', '[long-dash]')
'[long-dash]asasas[long-dash]'
如果你想知道它们在哪里,那么会发生什么?