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



我用urllib编写了一个程序,可以从网页中获取所有文章标题(在本例中为 nytimes.com(。只有一个问题。某些标题有一个分号,如果打印,则会导致丑陋的"There\xe2\x80\x99s"。所以我试图用 ' 替换 \xe2\x80\x99,但它似乎不起作用。我认为元组有问题。不幸的是,我无法创建元组,这会导致同样的问题。

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("xe2x80x99","'"))

我尝试从元组创建字符串变量,但没有任何效果。我知道BeautifulSoup还有另一种解决方案,但我想我会尝试找到自己的方式。

你必须改变这一行:

resp_data = resp.read()

自:

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

工作将完成。

说明

正如我猜测的那样,该网站正在使用ut8编码,因此您必须将返回的字节decode为一个utf8字符串,该字符串可以更好地表示,就像您打算的那样。

PS:您可以在decode()方法中使用不带参数的resp.read().decode()Python猜测编码类型。

你看到的是字符串的 repr((,因此是有趣的字符。如果需要,请将其强制为字符串。查看我的结果:

>>> print repr(n[1])
'Therexe2x80x99s'
>>> print str(n[1])
There’s

总结:将你的 n[1] 包裹在 str(( 中

最新更新