Tag: 机械化 ruby

使用Nokogiri和Mechanize获取,访问和限制链接数量?

我正试图从CNN.com上抓下五个最新的故事并检索他们的链接以及每个故事的第一段。 我有这个简单的脚本: url = “http://edition.cnn.com/?refresh=1” agent = Mechanize.new agent.get(“http://edition.cnn.com/?refresh=1”).search(“//div[@id=’cnn_maintt2bul’]/div/div/ul/li[count(*)=3]/a”).each do |headline| article = headline.text link = URI.join(url, headline[:href]).to_s page = headline.click(link) paragraph1 = page.at_css(“.adtag15090+ p”).text puts “#{article}” puts “#{link}” puts “#{paragraph1}” puts “\n” end 此代码无效,因为无法识别click方法。 它会带来这个错误: cnn_scraper.rb:10:in `block in ‘: undefined method `click’ for # (NoMethodError) CNN.com上所有文章的第一段都有选择器.adtag15090+ p 。 还要注意它正在解析所有文章,但我只想要五个。 关于如何使用Nokogiri和Mechanize获得前五个及其第一段的任何想法?

机械化Ruby 1.9.3编码问题

使用以下代码(来自Mechanize站点,但在rake任务中).. namespace :ans do task :grab => :environment do a = Mechanize.new { |agent| agent.user_agent_alias = ‘Mac Safari’ } begin a.get(‘http://google.com/’) do |page| search_result = page.form_with(:name => ‘f’) do |search| search.q = ‘Hello world’ end.submit search_result.links.each do |link| puts link.text end end end end end 我收到编码错误.. rake aborted! “\x8B” from ASCII-8BIT to UTF-8 这是在使用以下内容时: Rails […]

如何通过Mechanize和Nokogiri获取数据?

我正在开发一个从http://www.screener.in/获取HTML的应用程序。 我可以输入像“Atul Auto Ltd”这样的公司名称并提交它,并从下一页中删除以下详细信息:“CMP / BV”和“CMP”。 我正在使用此代码: require ‘mechanize’ require ‘rubygems’ require ‘nokogiri’ Company_name=’Atul Auto Ltd.’ agent = Mechanize.new page = agent.get(‘http://www.screener.in/’) form = agent.page.forms[0] print agent.page.forms[0].fields agent.page.forms[0][“q”]=Company_name button = agent.page.forms[0].button_with(:value => “Search Company”) pages=agent.submit(form, button) puts pages.at(‘.//*[@id=”top”]/div[3]/div/table/tbody/tr/td[11]’) # not getting any output. 代码将我带到正确的页面,但我不知道如何查询以获取所需的数据。 我尝试了不同的东西,但没有成功。 如果可能,有人可以指向我一个很好的教程,解释如何从HTML页面刮取特定的类。 第一个“CMP / BV”的XPath是: //*[@id=”top”]/div[3]/div/table/tbody/tr/td[11] 但它没有提供任何输出。

如何在Ruby中使用mechanize执行Head请求

我可以使用Faraday(Faraday.head url)执行HEAD请求,但我在当前项目中使用Mechanize。 我想从头(文件名)中获取一个值而不下载文件。 Mechanize gem是否提供这样的选项? 我正在使用v2.0。

使用带有Mechanize的登录表单

我知道在Stackoverflow上有相似的post,但我似乎无法弄清楚我的尝试有什么问题。 # login to the site mech.get(base_URL) do |page| l = page.form_with(:action => “/site/login/”) do |f| username_field = f.field_with(:name => “LoginForm[username]”) username_field.value = userName password_field = f.field_with(:name => “LoginForm[password]”) password_field.value = password f.submit end end 这是我的错误: rb:18:in `block (2 levels) in ‘: undefined method `field_with’ for nil:NilClass (NoMethodError) 这是HTML Fields with * are required. Email […]

Ruby Mechanize:关注链接

在Ruby上的Mechanize中,我必须为每个新页面分配一个新变量。 例如: page2 = page1.link_with(:text => “Continue”).click page3 = page2.link_with(:text => “About”).click …etc 有没有办法在没有变量保持每个页面状态的情况下运行Mechanize? 喜欢 my_only_page.link_with(:text => “Continue”).click! my_only_page.link_with(:text => “About”).click!

单击Mechanize中的JavaScript链接

我有这个: Account Summary 我想点击该链接但是在使用link_to时出错。 我试过了: bot.click(page.link_with(:href => /menu_home/)) bot.click(page.link_with(:class => ‘top_level_active’)) bot.click(page.link_with(:href => /Account Summary/)) 我得到的错误是:NoMethodError:未定义的方法`[]’为nil:NilClass

Mechanize的getaddrinfo错误

我写了一个脚本,它将遍历我们数据库中的所有客户,validation他们的网站URL是否有效,并尝试在他们的主页上找到一个推特链接。 我们有超过10,000个url需要validation。 如果validation了url的一小部分,我们就开始为每个url获取getaddrinfo错误。 以下是抓取单个url的代码副本: def scrape_url(url) url_found = false twitter_name = nil begin agent = Mechanize.new do |a| a.follow_meta_refresh = true end agent.get(normalize_url(url)) do |page| url_found = true twitter_name = find_twitter_name(page) end @err < e @err << "[#{@current_record}] ERROR (#{url}): " @err << e.message @err << "\n" end [url_found, twitter_name] end 注意:我还运行了此代码的一个版本,该代码创建了一个在所有对scrape_url的调用中共享的Mechanize实例。 它以完全相同的方式失败了。 当我在EC2上运行它时,它几乎完全通过1,000个url,然后为剩余的9,000+返回此错误: getaddrinfo: […]