在python中抓取页面时保留非拉丁字符

2024-10-01 00:27:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个程序,可以抓取一个页面,解析其中的任何链接,然后下载链接到的页面(听起来像爬虫,但不是),并将每个页面保存在一个单独的文件中。用于保存的文件名是页面url的一部分。例如,如果我找到www.foobar.com/foo,我会下载页面并将其保存在一个名为foo.xml文件. 在

稍后,我需要遍历所有这些文件并重新下载它们,使用文件名作为url的最后一部分。(所有页面都来自一个站点。)

它工作得很好,直到我在url中遇到一个非拉丁字符。这个网站使用utf-8,所以当我下载原始页面并对其进行解码时,它可以正常工作。但是当我试图使用解码后的url来下载相应的页面时,它不起作用,因为,我认为,编码是错误的。我尝试过在文件名上使用.encode()来更改它,但它没有更改任何内容。在

我知道这一定很简单,这是我没有正确理解编码问题的结果,但我已经为此绞尽脑汁很久了。我已经读了乔尔斯波尔斯基的编码介绍好几次,但我还是不太清楚该怎么做。有人能帮我吗?在

非常感谢, bsg公司

这里有一些代码。我没有发现任何错误;但是当我尝试使用页面名称作为url的一部分下载页面时,我被告知该页面不存在。当然没有——没有abc/x54这样的页面。在

澄清一下:我下载了一个页面的html,其中包含一个指向www.foobar.com/Mehmet例如,它显示为Mehmet_Kenanşar%C5%9Far。当我试图下载页面时www.foobar.com/Mehmet_Kenan_Dalba%C5%9Far,页面为空白。我怎么保持www.foobar.com/Mehmet凯南·达尔巴·阿尔在我需要的时候把它送回现场?在

try:
    params = urllib.urlencode({'title': 'Foo', 'action': 'submit'})
    req = urllib2.Request(url='foobar.com',data=params, headers=headers)
    f = urllib2.urlopen(req)

    encoding = f.headers.getparam('charset')

    temp = f.read() .decode(encoding)

    #lots of code to parse out the links

    for line in links:
    try:
        pagename = line
        pagename = pagename.replace('\n', '')
        print pagename

        newpagename = pagename.replace(':', '_')
        newpagename = newpagename.replace('/', '_')
        final = os.path.join(fullpath, newpagename)
        print final
        final = final.encode('utf-8')
        print final

         ##only download the page if it hasn't already been downloaded
        if not os.path.exists(final + ".xml"):
                print "doesn't exist"
                save = open(final + ".xml", 'w')
                save.write(f.read())
                save.close()

Tags: 文件comurl编码文件名www页面xml
2条回答

{你可以用urlib代替。在

假设你得到了网址“www.foobar.com/Mehmet_Kenan_Dalba%C5%9Far,然后将其作为参数传递给请求,如下所示:

import requests
r=requests.get("www.foobar.com/Mehmet_Kenan_Dalba%C5%9Far")

现在可以使用r.text获取内容。在

如果您有一个url,例如代码为'%C5',并希望获得带有实际字符\xC5的url,请在该url上调用urllib.unquote()。在

相关问题 更多 >