Tag: web crawler

从相对路径解析绝​​对路径

我正在制作一个网络爬虫,我正试图找出一种方法来找出相对路径的绝对路径。 我带了2个测试站点。 一个在ROR和一个使用Pyro CMS制作。 在后者中,我发现了带有“index.php”链接的href标签。 所以,如果我当前正在http://example.com/xyz抓取,那么我的抓取工具会追加并将其http://example.com/xyz/index.php 。 但问题是,我应该追加到root,即它应该是http://example.com/index.php 。 因此,如果我抓取http://example.com/xyz/index.php ,我会找到另一个“index.php”,它会再次附加。 在ROR中,如果相对路径以’/’开头,我可以很容易地知道它是一个根站点。 我可以处理index.php的情况,但如果我手动开始执行它,可能需要处理很多规则。 我确信有一种更简单的方法可以完成这项工作。

神秘的铁轨错误几乎没有任何痕迹

我们遇到一个爬虫的奇怪问题。 有时它会在某些请求上抛出Rails FATAL错误,但跟踪非常有限并且看起来像这样 [2014-07-01 18:16:37] FATAL Rails : ArgumentError (invalid %-encoding (c ^ FK+ 9u$_ t Kl ΥE! =k \ ̕* ߚ>c+ CR! 2 D (5 xq#!` 4 p |8 IE :+ H^9`^ # Vo{ > =[z )): lib/locale_middleware.rb:14:in `call’ 爬虫用户代理是 Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html) 我们可以要求它停止通过robots.txt抓取我们,但是如果可能的话,最好处理根本原因并且不会因为这些请求而失败500。 我们也无法真正重现这种请求,因此任何有关如何生成类似请求的建议都会有很大帮助。 我们在Ubuntu 12.04上使用Rails 3.2.19,Unicorn。 这是我们的locale_middleware.rb

在缓存中找不到元素 – 自从在Selenium Ruby Web驱动程序中查找以来页面可能已更改?

我正在尝试编写一个爬虫程序,它从加载的页面中抓取所有链接,并将所有请求和响应标题以及响应正文记录在某些文件中,例如XML或txt。 我在新浏览器窗口中打开第一个加载页面的所有链接,所以我不会收到此错误: Element not found in the cache – perhaps the page has changed since it was looked up 我想知道什么是另一种方式来发出请求并从所有链接接收响应,然后找到输入元素并从所有打开的窗口提交按钮。 我可以在某种程度上做到这一点,除非打开的窗口在右上角的http://www.testfire.net上有一个常见的站点搜索框。 我想要做的是我想省略这样的常用框,以便我可以使用webdriver的i.send_keys “value”方法填充其他输入值并且不会出现此错误错误:在缓存中找不到元素 – 也许页面有因为它被抬起而改变了。 检测和区分每个打开的窗口的输入标记的方法是什么,以便在网站的大多数页面上出现的常见输入标记中不会重复填充值。 我的代码如下: require ‘rubygems’ require ‘selenium-webdriver’ require ‘timeout’ class Clicker def open_new_window(url) @driver = Selenium::WebDriver.for :firefox @url = @driver.get ” http://test.acunetix.com ” @link = Array.new(@driver.find_elements(:tag_name, “a”)) @windows = Array.new(@driver.window_handles()) @link.each […]

如何使用Nokogiri在两个HTML注释之间抓取HTML?

我有一些HTML页面,其中要提取的内容用下面的HTML注释标记。 ….. some text Some more elements … 我正在使用Nokogiri并尝试在和 comments之间提取HTML。 我想提取这两个HTML注释之间的完整元素: some text Some more elements 我可以使用这个字符回调获得纯文本版本: class TextExtractor < Nokogiri::XML::SAX::Document def initialize @interesting = false @text = "" @html = "" end def comment(string) case string.strip # strip leading and trailing whitespaces when /^begin content/ # match starting comment @interesting = true when /^end […]

是否有适用于PHP或Ruby的Web爬虫库?

是否有适用于PHP或Ruby的Web爬虫库? 一个可以首先深度或宽度优先的库…并且即使在使用href =“../ relative_path.html”和基本URL时也处理链接。

Ruby + Anemone Web Crawler:正则表达式匹配以一系列数字结尾的URL

假设我正在尝试抓取一个网站,跳过一个像这样结束的页面: http://HIDDENWEBSITE.com/anonimize/index.php?page=press_and_news&subpage=20060117 我目前正在使用Ruby中的Anemone gem来构建爬虫。 我使用的是skip_links_like方法,但我的模式似乎永远不匹配。 我试图使其尽可能通用,因此它不依赖于子页面而只是=2105925 (数字)。 我试过/=\d+$/和/\?.*\d+$/ /=\d+$/但它似乎没有用。 这类似于跳过带有扩展名pdf的网页,来自在Anemone中抓取的zip,但我不能用数字而不是扩展来使其值得。 此外,在http://regexpal.com/上使用pattern =\d+$将成功匹配http://misc.com/test/index.php?page=news&subpage=20060118 编辑: 这是我的全部代码。 我想知道是否有人能够确切地看到错误。 require ‘anemone’ … Anemone.crawl(url, :depth_limit => 3, :obey_robots_txt => true) do |anemone| anemone.skip_links_like /\?.*\d+$/ anemone.on_every_page do |page| pURL = page.url.to_s puts “Now checking: ” + pURL bestGuess[pURL] = match_freq( manList, page.doc.inner_text ) puts “Successfully checked” end end 我的输出是这样的: … Now […]

DRY使用nokogiri搜索网站的每个页面

我想搜索网站的每个页面。 我的想法是找到保留在域内的页面上的所有链接,访问它们并重复。 我必须采取措施,不再重复努力。 所以它很容易开始: page = ‘http://example.com’ nf = Nokogiri::HTML(open(page)) links = nf.xpath ‘//a’ #find all links on current page main_links = links.map{|l| l[‘href’] if l[‘href’] =~ /^\//}.compact.uniq “main_links”现在是活动页面中以“/”开头的链接数组(仅应为当前域上的链接)。 从这里我可以将这些链接提供给上面类似的代码,但我不知道确保我不重复自己的最佳方法。 我想我在访问时会开始收集所有访问过的链接: main_links.each do |ml| visited_links = [] #new array of what is visted np = Nokogiri::HTML(open(page + ml)) #load the first main_link visted_links.push(ml) #push the […]

如何以编程方式获取已爬网页面的快照(在Ruby中)?

以编程方式拍摄网页快照的最佳解决方案是什么? 情况是这样的:我想抓住一堆网页并定期拍摄它们的缩略图,比如每隔几个月说一次,而不必手动去每一个。 我还希望能够获取可能完全是Flash / Flex的网站的jpg / png快照,所以我必须等到它加载以某种方式拍摄快照。 如果对我可以生成的缩略图数量没有限制(在合理范围内,比方说每天1000),那就太好了。 任何想法如何在Ruby中做到这一点? 看起来非常艰难。 浏览器要执行此操作:Safari或Firefox,最好是Safari。 非常感谢。

是否可以使用Ruby和Nokogiri插入JavaScript引擎?

我正在编写一个应用程序来抓取一些网站并从中抓取数据。 我正在使用Ruby,Curl和Nokogiri来做这件事。 在大多数情况下,它很简单,我只需要ping一个URL并解析HTML数据。 设置完美无缺。 但是,在某些情况下,网站会根据某些单选按钮上的用户输入检索数据。 这会调用一些JavaScript从服务器获取更多数据。 生成的URL和发布的数据由JavaScript代码确定。 是否可以使用: 一个JavaScript库以及这个设置,它能够确定在我的HTML页面中执行JavaScript吗? 除了使用不同的库之外,还有一些集成或HTML和JS库进行通信的方式吗? 例如,如果单击一个按钮,Nokogiri需要调用JavaScript,然后JavaScript需要更新Nokogiri。 如果我的方法看起来不是最好的,那么你的建议是使用Ruby在Web上构建一个crawler + scraper。 编辑:使用therubyrace看起来像第1点是可能的,因为它在你的代码中嵌入了V8引擎,但有2个替代吗?

cron crawler使用Ruby中的Google API将数据插入Google电子表格的授权问题

我的项目是抓取某些网络数据,并在每天早上9点将它们放入我的Google电子表格中。 它必须获得读写权限的授权。 这就是为什么下面的代码位于顶部。 # Google API CLIENT_ID = blah blah CLIENT_SECRET = blah blah OAUTH_SCOPE = blah blah REDIRECT_URI = blah blah # Authorization_code def get_authorization_code client = Google::APIClient.new client.authorization.client_id = CLIENT_ID client.authorization.client_secret = CLIENT_SECRET client.authorization.scope = OAUTH_SCOPE client.authorization.redirect_uri = REDIRECT_URI uri = client.authorization.authorization_uri Launchy.open(uri) # Exchange authorization code for access token $stdout.write “Enter authorization […]