我正在使用urllib从网站获取一串html,并且需要将html文档中的每个单词放入一个列表中。
这是我到目前为止的代码。我一直在收到错误。我也复制了下面的错误。
import urllib.request
url = input("Please enter a URL: ")
z=urllib.request.urlopen(url)
z=str(z.read())
removeSpecialChars = str.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")
words = removeSpecialChars.split()
print ("Words list: ", words[0:20])
这是错误。
Please enter a URL: http://simleyfootball.com
Traceback (most recent call last):
File "C:\Users\jeremy.KLUG\My Documents\LiClipse Workspace\Python Project 2\Module2.py", line 7, in <module>
removeSpecialChars = str.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")
TypeError: replace() takes at least 2 arguments (1 given)
答案 0 :(得分:35)
一种方法是使用re.sub,这是我的首选方式。
import re
my_str = "hey th~!ere"
my_new_string = re.sub('[^a-zA-Z0-9 \n\.]', '', my_str)
print my_new_string
<强>输出:强>
hey there
另一种方法是使用re.escape:
import string
import re
my_str = "hey th~!ere"
chars = re.escape(string.punctuation)
print re.sub(r'['+chars+']', '',my_str)
<强>输出:强>
hey there
关于PEP-8参数的python中参数样式的一个小提示应该是remove_special_chars
而不是removeSpecialChars
此外,如果您想要保持空格,只需将[^a-zA-Z0-9 \n\.]
更改为[^a-zA-Z0-9\n\.]
答案 1 :(得分:20)
str.replace是你想要做的错误的功能(除了它被错误地使用)。您希望用空格替换集合中的任何字符,而不是用单个空格替换整个集合(后者是替换的)。您可以像这样使用翻译:
removeSpecialChars = z.translate ({ord(c): " " for c in "!@#$%^&*()[]{};:,./<>?\|`~-=_+"})
这会创建一个映射,将特殊字符列表中的每个字符映射到一个空格,然后在字符串上调用translate(),用空格替换特殊字符集中的每个字符。
答案 2 :(得分:3)
您需要在replace
而非z
上致电str
,因为您要替换字符串变量z
中的字符
removeSpecialChars = z.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")
但这不起作用,因为替换查找子字符串,您很可能需要使用带有re
函数的正则表达式模块sub
:
import re
removeSpecialChars = re.sub("[!@#$%^&*()[]{};:,./<>?\|`~-=_+]", " ", z)
不要忘记[]
,这表示这是一组要替换的字符。
答案 3 :(得分:2)
replace对特定字符串进行操作,因此您需要像这样调用它
removeSpecialChars = z.replace("!@#$%^&*()[]{};:,./<>?\|`~-=_+", " ")
但这可能不是您所需要的,因为这将查找包含相同顺序的所有字符的单个字符串。 Danny Michaud指出,你可以用正则表达式做到这一点。
作为附注,您可能希望查找BeautifulSoup,这是一个用于解析凌乱的HTML格式文本的库,就像您通常从scaping网站获得的那样。
答案 4 :(得分:0)
您可以使用所需的字符替换特殊字符,如下所示
import string
specialCharacterText = "H#y #@w @re &*)?"
inCharSet = "!@#$%^&*()[]{};:,./<>?\|`~-=_+\""
outCharSet = " " #corresponding characters in inCharSet to be replaced
splCharReplaceList = string.maketrans(inCharSet, outCharSet)
splCharFreeString = specialCharacterText.translate(splCharReplaceList)