2017-04-07 56 views
2

我编写了一个使用urllib获取网页中所有文章标题的程序(本例中为nytimes.com)。只有一个问题。有些标题有分号,如果打印出来会导致丑陋的“There \ xe2 \ x80 \ x99s”。所以我试图用\'替换\ xe2 \ x80 \ x99,但它似乎不起作用。我认为元组有问题。不幸的是我不能创建一个元组,导致同样的问题。Python3:编辑使用urllib获取的数据

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

你必须改变这一行:

resp_data = resp.read() 

到:

resp_data = resp.read().decode("utf8") 

工作将完成。

解说

的网站使用ut8编码,我猜,所以你必须decode返回字节为utf8字符串,可以更好地代表喜欢你打算什么都有。

PS:可以在decode()方法使用resp.read().decode()没有参数,你让Python猜测编码类型。

+0

它的工作。 Tyvm :-) –

+0

希望它能帮助你。如果满足您的需求,您可以上传和/或接受此答案。 –

+1

谢谢,我做到了。新的论坛 –

0

您正在看到字符串的repr(),因此出现了有趣的字符。如果你想要,强制这个字符串。见我的结果:

>>> print repr(n[1]) 
'There\xe2\x80\x99s' 
>>> print str(n[1]) 
There’s 

总结:包装你的N [1] STR()

+0

我已经试过了,不幸的是这并不能解决问题。尽管如此,我aprec。你的帮助意志。干杯 –