0

私は Ruby を初めて使用し、最初のスクリプト作成の割り当てで、GoDaddy から DNS リストの要素を取得するための Web スクレイピング スクリプトを作成するように依頼されました。

リンクのスクレイピングに問題があり、リンクをたどる必要があります。以下の「GoToSecondaryDNS」js要素からリンクを取得する必要があります。Mechanize と Nokogiri を使用しています。

<td class="listCellBorder" align="left" style="width:170px;">
          <div style="padding-left:4px;">
            <div id="gvZones21divDynamicDNS"></div>
            <div id="gvZones21divMasterSlave" cicode="41022" onclick="GoToSecondaryDNS('iwanttoscrapethislink.com',0)" class="listFeatureButton secondaryDNSNoPremium" onmouseover="ShowSecondaryDNSAd(this, event);" onmouseout="HideAdInList(event);"></div>
            <div id="gvZones21divDNSSec" cicode="41023" class="listFeatureButton DNSSECButtonNoPremium" onmouseover="ShowDNSSecAd(this, event);" onmouseout="HideAdInList(event);" onclick="UpgradeLinkActionByID('gvZones21divDNSSec'); return false;" useClick="true" clickObj="aDNSSecUpgradeClicker"></div>
            <div id="gvZones21divVanityNS" onclick="GoToVanityNS('iwanttoscrapethislink.com',0)" class="listFeatureButton vanityNameserversNoPremium" onmouseover="ShowVanityNSAd(this, event);" onmouseout="HideAdInList(event);"></div>
            <div style="clear:both;"></div>
          </div>
        </td>

リンク 'iwanttoscrapethislink.com' をスクレイピングし、onclick を操作してリンクをたどり、次のページのコンテンツを Ruby でスクレイピングするにはどうすればよいですか?

これまでのところ、コードを簡単に開始できます。

require 'rubygems'
require 'mechanize'
require 'open-uri'




def get_godaddy_data(url)


      web_agent = Mechanize.new

      result = nil

      ### login to GoDaddy admin


      page = web_agent.get('https://dns.godaddy.com/Default.aspx?sa=')

      ## there is only one form and it is the first form on thepage
      form = page.forms.first
      form.username = 'blank'
      form.password = 'blank'

      ## form.submit
      web_agent.submit(form, form.buttons.first)

     site_name = page.css('div.gvZones21divMasterSlave onclick td')  
      ### export dns zone data

      page = web_agent.get('https://dns.godaddy.com/ZoneFile.aspx?zone=' + site_name + '&zoneType=0&refer=dcc')
      form = page.forms[3]
      web_agent.submit(form, form.buttons.first).save(uri.host + 'scrape.txt')

       ## end

    end 

    ### read export file
    ##return File.open(uri.host + 'scrape.txt', 'rb') { |file| file.read }
  end


  def scrape_dns(url)

  site_name = page.css('div.gvZones21divMasterSlave onclick td') 
  LIST_URL = "https://dns.godaddy.com/ZoneFile.aspx?zone=" + site_name + '&zoneType=0&refer=dcc"
  page = Nokogiri::HTML(open(LIST_URL))

#not sure how to scrape onclick urls and then how to click through to continue scraping on the second page for each individual DNS

end
4

1 に答える 1

1

onclickNokogiri は JavaScript エンジンではないため、「 」と対話することはできません。

コンテンツを抽出し、それを後続の Web 要求の URL として使用できます。doc解析された HTML が含まれていると仮定します。

doc.at('div[onclick^="GoToSecondaryDNS"]')['onclick']

パラメータの値が表示されonclickます。^=は「で始まる単語を見つける」を意味するため、パラメーターを使用して他の<div>タグを除外しonclick、次を返します。

"GoToSecondaryDNS('iwanttoscrapethislink.com',0)"

単純な正規表現を使用する[/'(.+)'/,1]と、ホスト名が取得されます。

doc.at('div[onclick^="GoToSecondaryDNS"]')['onclick'][/'(.+)'/,1]
=> "iwanttoscrapethislink.com"

Mechanize の内部の Nokogiri ドキュメントにアクセスする方法や、新しい URL を作成する方法など、残りの部分はあなたに任せます。

于 2012-08-13T18:44:43.267 に答える