【问题标题】:Scraping a webpage with URL in Nepali (Non-English)抓取带有尼泊尔语 URL 的网页(非英语)
【发布时间】:2014-05-20 10:18:24
【问题描述】:

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

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

【问题讨论】:

  • 哪个版本的 Python?您是否真的尝试过复制和粘贴网址?
  • 2.7 版。是的,我尝试过复制粘贴,但它似乎不起作用。但我不确定。我也更新了我的问题。谢谢
  • URL 以 UTF8 编码,例如参见 Url decode UTF-8 in Python。您的尼泊尔语网址也不例外。
  • 对我来说,几乎总是@MartijnPieters。 :-) 谢谢。我会调查的。
  • 现在在将获得的链接分配给 item['link'] 时,我得到以下信息: 'Request' object does not support item assignment 与非英语网址有什么关系吗? @jonrsharpe

标签: python url encoding scrapy screen-scraping


【解决方案1】:

符合RFC 3986 的URL 将使用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'

【讨论】:

  • 谢谢@मर्तिजं पिएटेर्स :-)
  • 现在在将获得的链接分配给 item['link'] 时,我得到以下信息:'Request' object does not support item assignment 与非英语网址有什么关系吗?
  • @Nabin:抱歉,我不知道 scrapy 内部是如何工作的。然而,这是一个完全不同的问题。如果 Stack Overflow 上没有针对该问题的重复项,请随时提出有关该问题的新问题。
  • @Nabin - 根据 Martijn 的建议,我建议创建一个新问题并添加 scrapy 标签。请包括您的完整蜘蛛代码和您尝试抓取的网站的 URL,以帮助调试问题。 :)
猜你喜欢
  • 1970-01-01
  • 2016-11-06
  • 2015-10-07
  • 1970-01-01
  • 2013-08-14
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多