1

いくつかのデータを取得するページにアクセスするには、リンクのテキストではなく、divクラスを介していくつかの要素をクリックするのに助けが必要です。

  • http://www.salatomatic.com/b/United-States+125のページから始めて、リンクのテキストを使用せずにdivクラスで各州の名前をクリックするにはどうすればよいですか?
  • http://www.salatomatic.com/b/Alabama+7などの州をクリックした後、リンクのテキストではなく、再びdivクラスで州内の地域をクリックする必要があります。
  • 地域内、www [dot] salatomatic [dot] com / c / Birmingham + 12、各アイテム(この例では11のモスク)をクリックしてループします。
  • アイテム/モスク内で、アドレス(モスクのタイトルの下の上部)をスクレイプして、データベースに保存/作成する必要があります。

更新:

私は今これを持っています:

require 'nokogiri'
require 'open-uri'
require 'mechanize'

agent = Mechanize.new

page = agent.get("http://www.salatomatic.com/b/United-States+125")    


#loops through all state links
page.search('.subtitleLink a').map{|a| page.uri.merge a[:href]}.each do |uri|
  page2 = agent.get uri

        #loops through all regions in each state
        page2.search('.subtitleLink a').map{|a| page2.uri.merge a[:href]}.each do |uri|
            page3 = agent.get uri

            #loops through all places in each region
            page3.search('.subtitleLink a').map{|a| page3.uri.merge a[:href]}.each do |uri|
             page4 = agent.get uri

                      #I'm able to grab the title of the place but not sure how to get the address b/c there is no div around it.
                       puts page4.at('.titleBM')

                      #I'm guessing I would use some regex/xpath here to get the address, but how would that work?

                      #This is the structure of the title/address in HTML:

                      <td width="100%"><div class="titleBM">BIS Hoover Crescent Islamic Center </div>2524 Hackberry Lane, Hoover, AL 35226</td> This is the listing page: http://www.salatomatic.com/d/Hoover+12446+BIS-Hoover-Crescent-Islamic-Center

            end
        end             
end
4

2 に答える 2

1

a[:href]ただし、最初に'が絶対URLに変換されていることを確認することが重要です。したがって、多分:

page.search('.subtitleLink a').map{|a| page.uri.merge a[:href]}.each do |uri|
  page2 = agent.get uri
end
于 2013-03-18T10:42:58.420 に答える
0

米国および地域のページについては、次のことができます。

agent = Mechanize.new
page = agent.get('http://www.salatomatic.com/b/United-States+125')
page.search("#header a").each { |a| ... }

ここでブロック内に対応するリンクを見つけてクリックできます:

page.link_with(text: a.text).click

または、機械化して、hrefでページをロードするように依頼します。

region_page = agent.get a[:href]

地域内でも同じことができます。

page.search(".tabTitle a").each ...

タブ(レストラン、市場、学校など)など

page.search(".subtitleLink a").each ...

これらのものを見つける方法は?SelectorGadgetなどのブックマークレットを試して、HTMLソースコードを調べ、関心のあるリンクの一般的な親/クラスを見つけてください。

@pguardiarioが提案したようにhrefによるページの取得を更新

于 2013-03-18T09:51:51.590 に答える