我用urllib编写了一个程序,它从网页上获取所有文章标题(在本例中为nytimes.com)。只有一个问题。有些标题有分号,如果打印出来会导致丑陋的“There \ xe2 \ x80 \ x99s”。所以我试图用\'替换\ xe2 \ x80 \ x99但它似乎不起作用。我认为Tuples存在问题。不幸的是,我无法创建一个元组,导致同样的问题。
import urllib.request
import urllib.parse
import re
url = 'https://www.nytimes.com/'
headers = {}
headers['User-Agent'] = 'Mozilla/5.0 (X11; Linux i686)'
req = urllib.request.Request(url, headers = headers)
resp = urllib.request.urlopen(req)
resp_data = resp.read()
par = re.findall(r'story-heading"><a href="(.*?)">(.*?)</a>',str(resp_data))
for n in par:
print(n[1])
print(n[1].replace("\xe2\x80\x99","'"))
我尝试从元组创建字符串变量,但没有任何工作。我知道BeautifulSoup有另一个解决方案,但我想我会尝试找到自己的方式。
答案 0 :(得分:0)
你正在看到字符串的repr(),因此有趣的字符。如果你愿意,可以将其强制转换为字符串。看我的结果:
>>> print repr(n[1])
'There\xe2\x80\x99s'
>>> print str(n[1])
There’s
总结:将你的n [1]包装在str()
中答案 1 :(得分:0)
你必须改变这一行:
resp_data = resp.read()
为:
resp_data = resp.read().decode("utf8")
工作将完成。
<强>阐释强>:
网站正在使用ut8
编码,正如我猜测的那样,您必须将decode
返回的字节转换为utf8
字符串,这可以更好地表示为您想要的有
PS:您可以在resp.read().decode()
方法中使用decode()
而不使用参数,并让Python
猜测编码类型。