在调用str()时,如何防止python添加空格字符?我有一个使用urllib.request的屏幕抓取器/网络爬虫。我在我的内容上调用str()。 这是我的代码。
req = urllib.request.Request(national_url, headers={'User-Agent' : "Magic Browser"})
con = urllib.request.urlopen( req )
#grab html
html = con.read()
my_str = str(html)
问题是我使用正则表达式解析这个html的某些模式,而str添加了所有的空格字符,如\ n和\ t。
我的问题是如何阻止str()函数添加这些额外的字符文字。
修改
我之前在我编写的python 2.7脚本中使用了urllib2。我把它带到了一台新电脑,但在这台电脑上开始使用python 3.6。这些正则表达式不再有效。当我将con.read()传递给此函数时,我收到错误。我将con.read()包装在str()的调用中,如上所示,我在3.6中注意到,con.read()函数添加了一大堆\ t和 个n。我的问题是我如何使我的表达式工作,或禁止所有“charater文字”,也称为'\ t \ n'(我会承认我可能对这些字符使用了错误的术语)。
这在Python 2.7中有效。我切换到了python 3.6。
def parse_html_doc(str='', poke_id = 0):
if len(str) > 0:
poke = MyClass()
poke.dex_num = re.search('\d+(?=<\/strong>)', str).group(0)
poke.name = re.search('[A-Za-z]+(?=<\/h1>)', str).group(0)
poke.hp = re.search('\d+', re.search('<th>HP<\/th>\s+<td class="num">\d+<\/td>', str).group(0)).group(0)
poke.atk = re.search('\d+', re.search('<th>Attack<\/th>\s+<td class="num">\d+<\/td>', str).group(0)).group(0)
poke.bdef = re.search('\d+', re.search('<th>Defense<\/th>\s+<td class="num">\d+<\/td>', str).group(0)).group(0)
poke.spatk = re.search('\d+', re.search('<th>Sp\. Atk<\/th>\s+<td class="num">\d+<\/td>', str).group(0)).group(0)
poke.spatk = re.search('\d+', re.search('<th>Sp\. Def<\/th>\s+<td class="num">\d+<\/td>', str).group(0)).group(0)
poke.spd = re.search('\d+', re.search('<th>Speed<\/th>\s+<td class="num">\d+<\/td>', str).group(0)).group(0)
poke.des = re.search('<p>.*<\/p>', str).group(0).replace('"', '""')
poke.id = poke_id
return poke
答案 0 :(得分:1)
str()
不创建这些字符,它们已经存在。
如果您想在字符串的开头和结尾删除\n
和whitespace
,那么您可以使用
s = '\n bla 123\n 1235\n ...\n'
result = s.strip()
print(result)
> 'bla 123\n 1235\n ...'
答案 1 :(得分:0)
看起来你想这样做:
eq = urllib.request.Request(national_url, headers={'User-Agent' : "Magic Browser"})
con = urllib.request.urlopen( req )
#grab html
html = con.read()
my_str = str(html.replace("\n", "")
my_str = my_str.replace("\t", "")
这应删除字符串中的所有空格字符。