- 浏览: 335161 次
- 性别:
- 来自: 北京
文章分类
最新评论
Firebug + Httpanalyzer + Hpricot + retry...
必要时再用Iconv,net/htttp
貌似这个组合很强大了。。
处理invalid byte sequence in UTF-8 error in ruby1.9.2
终于找到他了。。这个字符就是nbsp....ri阿
Hpricot里有这么一个东东:
同时Nokogiri里也有一个:
这是啥东东阿??
要先 require 'timeout'
必要时再用Iconv,net/htttp
貌似这个组合很强大了。。
评论
23 楼
Hooopo
2011-10-04
http://chunyemen.org/archives/557
22 楼
Hooopo
2011-08-09
最近发现很多网站返回charset是gb2312,结果里面还有gb2312字符集之外的编码。。。好可恶。
看到gb2312都当gb18030处理。。然后这个世界安静了。
也可以string.encode("UTF-8", :undef => :replace, :replace => "?", :invalid => :replace)
不过这样会丢失一些字符。但是至少不会异常。
看到gb2312都当gb18030处理。。然后这个世界安静了。
也可以string.encode("UTF-8", :undef => :replace, :replace => "?", :invalid => :replace)
不过这样会丢失一些字符。但是至少不会异常。
21 楼
Hooopo
2011-07-20
str.encode("UTF-8", :invalid => :replace, :undef => :replace, :replace => "?")
处理invalid byte sequence in UTF-8 error in ruby1.9.2
20 楼
marshluca
2010-05-08
我也推荐一个:selectorgadget,这个东西很强大。
19 楼
Hooopo
2010-04-22
fix hpricot or nokogiri stack level too deep systemstackerror bug
http://dalibornasevic.com/posts/5-ruby-stack-level-too-deep-systemstackerror
http://dalibornasevic.com/posts/5-ruby-stack-level-too-deep-systemstackerror
18 楼
Hooopo
2010-04-19
替换 o等。。
def html_unescape(s) return s unless s s.gsub(/&(\w+|#[0-9]+);/) { |match| number = case match when /&(\w+);/ Hpricot::NamedCharacters[$1] when /&#([0-9]+);/ $1.to_i end number ? ([number].pack('U') rescue match) : match } end
17 楼
Hooopo
2010-04-19
Hooopo 写道
遇到一个奇怪的字符。。
>> a.each_byte do |b| ?> p b >> end 194 160 => " " >> a.unpack("U*") => [160] >>
终于找到他了。。这个字符就是nbsp....ri阿
Hpricot里有这么一个东东:
>> Hpricot::NamedCharacters => {"yacute"=>253, "Chi"=>935, "image"=>8465, "nbsp"=>160, "there4"=>8756, "euml"=>235, "piv"=>982, "ne"=>8800, "ograve"=>242, "zwj"=>8205, "THORN"=>222, "Atilde"=>195, "igrave"=>236, "sub"=>8834, "raquo"=>187, "hearts"=>9829, "cedil"=>184, "ni"=>8715, "asymp"=>8776, "rArr"=>8658, "aring"=>229, "Uacute"=>218, "perp"=>8869, "empty"=>8709, "ndash"=>8211, "acirc"=>226, "ordf"=>170, "ccedil"=>231, "sbquo"=>8218, "sube"=>8838, "zwnj"=>8204, "uuml"=>252, "Kappa"=>922, "lArr"=>8656, "macr"=>175, "phi"=>966, "beta"=>946, "exist"=>8707, "ucirc"=>251, "sdot"=>8901, "Sigma"=>931, "alpha"=>945, "pound"=>163, "Yacute"=>221, "sum"=>8721, "ge"=>8805, "scaron"=>353, "Psi"=>936, "AElig"=>198, "ordm"=>186, "crarr"=>8629, "Oslash"=>216, "Igrave"=>204, "real"=>8476, "clubs"=>9827, "oline"=>8254, "sup"=>8835, "Beta"=>914, "delta"=>948, "nsub"=>8836, "iuml"=>239, "theta"=>952, "nu"=>957, "frac12"=>189, "Auml"=>196, "alefsym"=>8501, "Ecirc"=>202, "amp"=>38, "frac14"=>188, "circ"=>710, "sect"=>167, "Omicron"=>927, "eta"=>951, "Nu"=>925, "Scaron"=>352, "Icirc"=>206, "Ccedil"=>199, "Prime"=>8243, "hArr"=>8660, "emsp"=>8195, "oacute"=>243, "rceil"=>8969, "iacute"=>237, "oslash"=>248, "iquest"=>191, "diams"=>9830, "epsilon"=>949, "larr"=>8592, "apos"=>39, "micro"=>181, "Ouml"=>214, "yen"=>165, "dagger"=>8224, "not"=>172, "Egrave"=>200, "cent"=>162, "frasl"=>8260, "rsquo"=>8217, "omicron"=>959, "uml"=>168, "eth"=>240, "curren"=>164, "Aring"=>197, "copy"=>169, "Epsilon"=>917, "spades"=>9824, "tilde"=>732, "Oacute"=>211, "para"=>182, "minus"=>8722, "trade"=>8482, "Iacute"=>205, "lang"=>9001, "otilde"=>245, "gt"=>62, "aelig"=>230, "pi"=>960, "rsaquo"=>8250, "Acirc"=>194, "ouml"=>246, "kappa"=>954, "Rho"=>929, "lambda"=>955, "darr"=>8595, "shy"=>173, "notin"=>8713, "chi"=>967, "ETH"=>208, "Tau"=>932, "szlig"=>223, "Pi"=>928, "Gamma"=>915, "cup"=>8746, "euro"=>8364, "uArr"=>8657, "agrave"=>224, "prod"=>8719, "egrave"=>232, "Alpha"=>913, "rfloor"=>8971, "Upsilon"=>933, "rarr"=>8594, "Otilde"=>213, "lfloor"=>8970, "Uuml"=>220, "brvbar"=>166, "ocirc"=>244, "bull"=>8226, "Lambda"=>923, "mu"=>956, "Zeta"=>918, "Dagger"=>8225, "Theta"=>920, "Agrave"=>192, "ecirc"=>234, "weierp"=>8472, "upsilon"=>965, "equiv"=>8801, "lrm"=>8206, "Mu"=>924, "hellip"=>8230, "rang"=>9002, "icirc"=>238, "le"=>8804, "quot"=>34, "oplus"=>8853, "zeta"=>950, "OElig"=>338, "Phi"=>934, "rlm"=>8207, "Omega"=>937, "permil"=>8240, "upsih"=>978, "ugrave"=>249, "thinsp"=>8201, "frac34"=>190, "thorn"=>254, "psi"=>968, "auml"=>228, "ensp"=>8194, "times"=>215, "prop"=>8733, "otimes"=>8855, "supe"=>8839, "part"=>8706, "aacute"=>225, "iota"=>953, "iexcl"=>161, "lceil"=>8968, "deg"=>176, "reg"=>174, "loz"=>9674, "cap"=>8745, "cong"=>8773, "and"=>8743, "nabla"=>8711, "harr"=>8596, "Yuml"=>376, "lsquo"=>8216, "lsaquo"=>8249, "sigmaf"=>962, "gamma"=>947, "eacute"=>233, "Eta"=>919, "isin"=>8712, "acute"=>180, "Iota"=>921, "rdquo"=>8221, "ang"=>8736, "mdash"=>8212, "sigma"=>963, "fnof"=>402, "atilde"=>227, "Ucirc"=>219, "Euml"=>203, "forall"=>8704, "Iuml"=>207, "Ugrave"=>217, "Ograve"=>210, "divide"=>247, "infin"=>8734, "lt"=>60, "ntilde"=>241, "oelig"=>339, "lowast"=>8727, "ldquo"=>8220, "Delta"=>916, "int"=>8747, "Ocirc"=>212, "or"=>8744, "sup1"=>185, "Aacute"=>193, "Eacute"=>201, "xi"=>958, "sup2"=>178, "plusmn"=>177, "rho"=>961, "yuml"=>255, "tau"=>964, "sup3"=>179, "laquo"=>171, "sim"=>8764, "bdquo"=>8222, "thetasym"=>977, "prime"=>8242, "uarr"=>8593, "uacute"=>250, "dArr"=>8659, "middot"=>183, "Xi"=>926, "omega"=>969, "Ntilde"=>209, "radic"=>8730} >> Hpricot::NamedCharacters["nbsp"] => 160
同时Nokogiri里也有一个:
>> p Nokogiri::HTML::NamedCharacters["nbsp"] 160
16 楼
kaka2008
2010-04-15
hooopo,你贴一个open-url抓取网页的完整代码出来,我看看
15 楼
Hooopo
2010-04-15
获取charset
meta = ["Content-Type", "Content-type", "content-type"].map{|c| doc.at("meta[@http-equiv='#{c}']")}.compact.first content_type = meta["content"] if meta.is_a?(Hpricot::Elem) charset = content_type[/charset=([\w-]+)/i, 1]
14 楼
Hooopo
2010-04-12
13 楼
Hooopo
2010-04-12
>> a.is_binary_data? => true
这是啥东东阿??
12 楼
Hooopo
2010-04-12
遇到一个奇怪的字符。。
>> a.each_byte do |b| ?> p b >> end 194 160 => " " >> a.unpack("U*") => [160] >>
11 楼
Hooopo
2010-04-09
Segmentation fault occurs when a empty stream is passed
描述:http://github.com/hpricot/hpricot/issues#issue/6
解决办法很简单。。。避免传空流:
不用open("http://...")换成open("http://..").read
描述:http://github.com/hpricot/hpricot/issues#issue/6
解决办法很简单。。。避免传空流:
不用open("http://...")换成open("http://..").read
10 楼
kaka2008
2010-04-09
目前open-uri就够我用了,哈哈
9 楼
Hooopo
2010-04-07
Hooopo 写道
写了一个带异常处理的open...
def safe_open(url, retries = 5, sleeep = 0.42, headers = {}) begin open(url, headers).read rescue StandardError,Timeout::Error, SystemCallError, Errno::ECONNREFUSED #有些异常不是标准异常 puts $! retries -= 1 if retries > 0 sleep sleeep and retry else #TODO Logging.. #TODO 多次爬取失败后记录到日志 end end end
要先 require 'timeout'
8 楼
Hooopo
2010-04-07
fix hpricot_scan.so: undefined method `downcase' for nil:NilClass error:
http://github.com/hpricot/hpricot/issues#issue/8
1.下载hgwr's hpricot(git://github.com/hgwr/hpricot.git)
git clone git://github.com/hgwr/hpricot.git
2.卸载以前的hpricot
sudo gem uninstall hpricot
3.build gemspec
cd hpricot_path
sudo gem build hpricot.gemspec
sudo gem install hpricot-0.8.gem
http://github.com/hpricot/hpricot/issues#issue/8
1.下载hgwr's hpricot(git://github.com/hgwr/hpricot.git)
git clone git://github.com/hgwr/hpricot.git
2.卸载以前的hpricot
sudo gem uninstall hpricot
3.build gemspec
cd hpricot_path
sudo gem build hpricot.gemspec
sudo gem install hpricot-0.8.gem
7 楼
Hooopo
2010-04-03
这个gem也可以用来处理编码
http://www.iteye.com/topic/565606#1435314
http://www.iteye.com/topic/565606#1435314
6 楼
Hooopo
2010-04-03
编码处理。。
def force_utf8(html) doc = Hpricot.parse(html) begin content_type = doc.search("meta[@http-equiv='Content-Type'||'Content-type'||'content-type']").attr("content") charset = content_type[/charset=([\w-]+)/i, 1] rescue puts $! charset = "gbk" end if charset.downcase != "utf-8" html = Iconv.conv("UTF-8//IGNORE", "#{charset}//IGNORE", html).sub(/charset=[\w-]+/im, "charset=utf-8") end return html end
5 楼
Hooopo
2010-04-03
写了一个带异常处理的open...
def safe_open(url, retries = 5, sleeep = 0.42, headers = {}) begin open(url, headers).read rescue StandardError,Timeout::Error, SystemCallError, Errno::ECONNREFUSED #有些异常不是标准异常 puts $! retries -= 1 if retries > 0 sleep sleeep and retry else #TODO Logging.. #TODO 多次爬取失败后记录到日志 end end end
4 楼
Hooopo
2010-03-17
呃呃呃,目前hp已经够我用的了。。有问题再换nokogirl..
发表评论
-
新博客
2012-04-23 20:47 1734https://db-china.org -
Ruby Verbose Warning Mode
2011-10-16 14:48 2051Ruby在很多方面是一个更优雅的Perl,从Perl社区继承了 ... -
Pattern Match In Ruby
2011-10-07 01:17 2006最近看了一些Erlang,模式匹配是个好东西,简单的sum函数 ... -
Draper: View Models for Rails
2011-10-07 01:19 2268Draper是一个Ruby gem,它让Rails model ... -
Active Record batch processing in parallel processes
2011-10-07 01:20 2270Active Record 提供 find_each来分批处理 ... -
最轻量级的Ruby后台任务
2011-08-04 16:47 3860普通情况下ruby调用系统命令行的过程是堵塞的,无论是用sys ... -
test
2011-07-15 19:59 0test -
fiber
2011-06-17 09:37 0挖坑,待填。。 1.用到fiber.alive?、fiber ... -
Identity Map in Rails3.1
2011-06-12 18:29 2737Identity Map是Rails3.1的又 ... -
xx00
2011-06-06 03:40 0https://github.com/ngmoco/cache ... -
挖坑1
2011-06-06 02:17 0cache money 源码 替换memcache为redis ... -
websocket demo
2011-06-04 20:44 2054地址:https://github.com/hooopo/we ... -
ruby GC
2011-06-02 04:24 0http://blog.csdn.net/lijun84/a ... -
reduce method missing call stack with dynamic define method
2011-04-22 22:54 1592method_missing是ruby里面一个非常cool的h ... -
Autocompete with Trie
2011-04-09 04:04 1673像微薄里面用户输入一 ... -
用imagemagick和tesseract-ocr破解简单验证码
2011-04-09 01:31 18926工具:imagemagick + tesseract-ocr ... -
OAuth gem for rails,支持豆瓣,新浪微薄,腾讯微博,搜狐微博,网易微博
2011-03-26 03:13 4480地址:https://github.com/hooopo/oa ... -
用jmeter模拟amf请求进行压力测试
2010-12-16 16:56 30221.获取amf二进制包: 在本地建立proxy,端口为888 ... -
Memoization in Ruby
2010-11-14 11:42 1210这里的Memoization就是将ruby的方法或lambda ... -
整理了一下2008-2010的RubyHeroes博客列表
2010-10-07 02:26 2827Bryan Helmkamp(webrat作者)https:/ ...
相关推荐
网页抓取小工具,顾名思义,是一种用于获取网页数据的实用软件,它使得学习网站制作的初学者能够轻松地研究和分析其他网站的设计、布局以及所使用的资源。在这个数字化时代,理解并掌握如何有效地从互联网上获取信息...
本主题聚焦于利用C#进行网页抓取、数据分析以及表格和图形生成,这些都是现代数据驱动应用的重要组成部分。 首先,我们要理解网页抓取的概念。网页抓取,也称为网络爬虫或数据抓取,是指通过自动化程序从互联网上...
网页抓取,也被称为网络爬虫或数据抓取,是一种自动化技术,用于从互联网上大量收集和处理数据。这项技术通常被数据分析师、研究人员、市场营销人员以及网站管理员用来获取特定类型的信息,例如市场趋势、用户行为...
ASP.NET网页抓取技术是一种利用编程手段从互联网上获取数据并进行分析的技能,它能够帮助开发者自动收集、处理和存储网页上的信息。在ASP.NET框架下,网页抓取主要涉及HTTP请求、HTML解析和数据提取等核心概念。本文...
淘宝网页抓取分析器说明 启动方法—— 将DLL和EXE解压到同一个文件夹,直接运行Exe,打开软件。(运行环境:Windows,DotNet3.5以上环境) 功能说明—— 本软件功能强大,相对于其它网页抓取或爬虫软件的优点,不仅...
MetaSeeker是一个Web网页抓取/数据抽取/页面信息提取工具包,能够按照用户的指导,从Web页面上筛选出需要的信息,并输出含有语义结构的提取结果文件(XML文件),众所周知,Web页面显示的信息是给人阅读的,对于机器...
标题 "C++网页抓取源码及例子亲测可用" 提供了我们即将讨论的核心主题:使用C++语言进行网页内容的抓取。这通常涉及到网络编程和字符串处理,特别是对于解析HTML文档的部分。C++作为一门强大的系统级编程语言,能够...
在IT行业中,网页抓取是一项重要的技能,尤其对于数据分析、搜索引擎优化和自动化测试等领域。C#作为.NET框架下的主流编程语言,提供了丰富的库和工具来实现网页抓取。本篇文章将详细探讨C#进行网页抓取的核心知识点...
"WebSpider蓝蜘蛛网页抓取 v5.1" 是一款网页抓取软件,主要用于自动化地从互联网上搜集和下载信息。"WebSpider"可能是指该软件的名称,而"蓝蜘蛛"可能是其独特的品牌或者功能特征的象征,强调其在网络爬虫领域的特性...
网页抓取,也被称为网络爬虫或数据抓取,是一种自动化技术,用于从互联网上提取大量数据。在本例中,我们关注的标题是“网页抓取例子”,这表明我们将探讨如何实现一个简单的网页抓取程序。描述部分虽然为空,但我们...
网页抓取,也被称为网络爬虫或数据抓取,是一种自动化技术,用于从互联网上收集大量信息。在Java EE和Android开发中,网页抓取是一个重要技能,可以帮助开发者获取网站上的结构化数据,如新闻、产品信息、评论等,...
网页抓取工具是一种用于自动化收集互联网上公开信息的软件,对于数据分析、市场研究以及网站维护等领域具有极高价值。"网页抓取工具-免费使用"这一主题揭示了我们今天要讨论的核心——一款可供用户免费使用的网页...
在IT领域,网页抓取(Web Scraping)是一项重要的技术,它允许我们自动化地从互联网上提取大量数据。本教程将介绍如何使用C++语言来实现一个基础的网页抓取程序。C++作为一门强大的系统级编程语言,可以提供高效且...
java程序,能进行简单的网页抓取,及数据抓取,里面还有火车采集器的内容
Java网页抓取数据是互联网数据挖掘的一个重要领域,它允许开发者通过编程方式获取网页上的信息,从而实现自动化分析、监控或构建智能应用。在Java中,我们通常使用HTTP客户端库和HTML解析工具来实现这一目标。本文将...
Java网页抓取是一种技术,主要用于从互联网上自动提取或获取数据。这个"java网页抓取demo"项目提供了实现这一功能的实例代码。项目中的jar包是实现网页抓取的关键依赖库,包括Apache Commons Logging和HTTP Client。...
Snoopy_PHP网页抓取工具 snoopy是一个php类,用来模仿web浏览器的功能,它能完成获取网页内容和发送表单的任务。
在IT行业中,网页抓取是一项基础且重要的技能,它允许我们自动地从互联网上获取大量信息,进行数据分析、搜索引擎优化、市场研究等用途。在这个Java实现网页抓取的项目中,我们将探讨如何利用Java编程语言来抓取网页...
**OfflineExplorerPortable 网页抓取工具详解** 在互联网时代,我们经常需要保存或离线查看特定网页的内容,尤其在研究项目、整理资料或无网络环境时。这时,一款强大的网页抓取工具就显得尤为重要。`...
Java网页抓取数据是互联网开发中的一个重要技能,它允许开发者从网页中提取所需的信息,如新闻、产品数据或用户评论,以供进一步分析或利用。本主题主要涵盖以下几个关键知识点: 1. **网络请求库**:在Java中,...