【问题标题】:Python3: Editing data acquired with urllibPython3:编辑使用 urllib 获取的数据
【发布时间】:2017-04-07 23:50:27
【问题描述】:

我用 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("\xe2\x80\x99","'"))

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

【问题讨论】:

    标签: python python-3.x urllib


    【解决方案1】:

    你必须改变这一行:

    resp_data = resp.read()
    

    到:

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

    然后工作就完成了。

    说明

    我猜该网站正在使用ut8 编码,因此您必须将返回的字节decode 转换为utf8 字符串,该字符串可以更好地表示为您想要的。

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

    【讨论】:

    • 希望对您有所帮助。如果它满足您的需求,您可以投票和/或接受此答案。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我已经尝试过了,不幸的是这并不能解决问题。尽管如此,我还是觉得。你的帮助意愿。干杯
    猜你喜欢
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    相关资源
    最近更新 更多