用尼泊尔语(非英语)刮取网页的URL。

问题描述 投票:0回答:2

我正在浏览一个网站,该网站的网页上有尼泊尔语(即非英文字体)的网址。我如何给 start_urls 为任何蜘蛛(我是用scrapy做的)? 有什么编码技术吗?还有从浏览器中直接复制粘贴URLs有机会吗?

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

python url encoding scrapy screen-scraping
2个回答
1
投票

符合以下条件的URL RFC 3986 将使用UTF-8和 URL 百分比 编码. 尼泊尔人使用的是 德瓦那加里文,在Unicode中完全可以表示,因此可以用UTF-8编码。

请看一下 尼泊尔语维基百科 的例子。该特定的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源代码应该已经对这些URLs进行了编码,但如果它们看起来像这样。

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')

Demo:

>>> 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'
© www.soinside.com 2019 - 2024. All rights reserved.