Python3:编辑使用urllib获取的数据

时间:2017-04-07 23:50:27

标签: python python-3.x urllib

我用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有另一个解决方案,但我想我会尝试找到自己的方式。

2 个答案:

答案 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猜测编码类型。