在尼泊尔语中使用网址抓取网页(非英语)

时间:2014-05-20 10:18:25

标签: python url encoding scrapy screen-scraping

我正在访问一个网站,其网页上有尼泊尔语网址,即非英文字体。如何为任何蜘蛛提供 start_urls (我为此目的使用scrapy)?那有什么编码技术吗?从浏览器直接复制粘贴的网址是否有机会?

更新 我需要进一步解析我在某个网页上获得的链接。当然,这些链接也是非英语的。 谢谢......

1 个答案:

答案 0 :(得分:1)

符合RFC 3986的网址将使用UTF-8和URL Percent Encoding进行编码。尼泊尔语使用Devanagari script,它在Unicode中完全可以表示,因此可以用UTF-8编码。

查看Nepali Wikipedia的示例。该特定URL是UTF-8和URL百分比编码的一个很好的例子:

http://ne.wikipedia.org/wiki/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A5%8D%E0%A4%AF_%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0

%E0%A4%AE转义系列是百分比编码的UTF-8字节。页面的HTML源代码应该已经编码了这些URL,但如果它们看起来像这样:

http://ne.wikipedia.org/wiki/मुख्य_पृष्ठ

您可以使用以下方法对路径部分进行编码:

import urlparse, urllib

parts = urlparse.urlsplit(u'http://ne.wikipedia.org/wiki/मुख्य_पृष्ठ')
parts = parts._replace(path=urllib.quote(parts.path.encode('utf8')))
encoded_url = parts.geturl().encode('ascii')

演示:

>>> import urlparse, urllib
>>> parts = urlparse.urlsplit(u'http://ne.wikipedia.org/wiki/मुख्य_पृष्ठ')
>>> parts = parts._replace(path=urllib.quote(parts.path.encode('utf8')))
>>> parts.geturl().encode('ascii')
'http://ne.wikipedia.org/wiki/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A5%8D%E0%A4%AF_%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0'