Ruby on rails Nokogiri和Mechanize帮助(通过div类和scraping导航到页面)

Ruby on rails Nokogiri和Mechanize帮助(通过div类和scraping导航到页面),ruby-on-rails,ruby,ruby-on-rails-3,nokogiri,mechanize,Ruby On Rails,Ruby,Ruby On Rails 3,Nokogiri,Mechanize,我需要帮助通过div类单击一些元素,而不是通过链接文本,以进入页面来获取一些数据 从页面开始,如何单击每个州的名称而不使用链接文本,而是按div类 例如,在单击一个州之后,我需要再次单击该州的一个地区,按div类,而不是按链接的文本 在一个区域内,www[dot]salatomatic[dot]com/c/Birmingham+12,我想循环浏览,点击每个项目(本例中为11座清真寺) 在项目/清真寺内部,我需要刮取地址(在清真寺标题下的顶部)并将其存储/创建到我的数据库中 更新: 我现在有:

我需要帮助通过div类单击一些元素,而不是通过链接文本,以进入页面来获取一些数据

  • 从页面开始,如何单击每个州的名称而不使用链接文本,而是按div类
  • 例如,在单击一个州之后,我需要再次单击该州的一个地区,按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
需要“nokogiri”
需要“打开uri”
需要“机械化”
agent=Mechanize.new
page=agent.get(“http://www.salatomatic.com/b/United-States+125")    
#循环通过所有状态链接
page.search('.subtitleLink a').map{| a | page.uri.merge a[:href]}.each do | uri|
page2=agent.get uri
#循环遍历每个状态中的所有区域
page2.search('.subtitleLink a').map{a | page2.uri.merge a[:href]}.each do | uri|
page3=agent.get uri
#循环遍历每个区域中的所有位置
page3.search('.subtitleLink a').map{a | page3.uri.merge a[:href]}.each do | uri|
page4=agent.get uri
#我能抓住这个地方的标题,但不知道如何获得地址b/c,周围没有div。
将第4页置于(“.titleBM”)
#我猜我会在这里使用一些regex/xpath来获取地址,但是这是如何工作的呢?
#这是HTML中标题/地址的结构:
BIS胡佛新月会伊斯兰中心2524胡佛市哈克贝利巷,邮编:35226这是列表页面:http://www.salatomatic.com/d/Hoover+12446+BIS胡佛新月会伊斯兰中心
结束
结束
结束

对于美国和地区的页面,您可以执行以下操作:

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
或要求mechanize通过href加载页面:

region_page = agent.get a[:href]
在区域内,你也可以这样做,只需像

page.search(".tabTitle a").each ...
用于标签(餐厅、市场、学校等)等

如何找到这些东西?尝试使用SelectorGadget或类似的书签,深入HTML源代码,找到您感兴趣的链接的常见父/类


更新了href的获取页面,如@pguardiario建议的

有关美国和地区的页面,您可以执行以下操作:

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
或要求mechanize通过href加载页面:

region_page = agent.get a[:href]
在区域内,你也可以这样做,只需像

page.search(".tabTitle a").each ...
用于标签(餐厅、市场、学校等)等

如何找到这些东西?尝试使用SelectorGadget或类似的书签,深入HTML源代码,找到您感兴趣的链接的常见父/类


根据href@pguardiario的建议更新了getting page(获取页面)

但必须确保首先将
a[:href]
转换为绝对URL。 因此,也许:

page.search('.subtitleLink a').map{|a| page.uri.merge a[:href]}.each do |uri|
  page2 = agent.get uri
end

但首先要确保将
a[:href]
转换为绝对URL,这一点很重要。 因此,也许:

page.search('.subtitleLink a').map{|a| page.uri.merge a[:href]}.each do |uri|
  page2 = agent.get uri
end

我个人喜欢Chrome的元素面板。对于以下URL,请简单地尝试:
agent.get a[:href]
谢谢各位,我想我的思路是对的。我已经用更新编辑了我的帖子,还有一个问题。我个人喜欢Chrome的元素面板。对于以下URL,请简单地尝试:
agent.get a[:href]
谢谢各位,我想我的思路是对的。我已经用最新的内容编辑了我的帖子,还有一个问题。谢谢!这有助于我在更新的帖子中导航到一页又一页,但我仍然需要找出如何提取地址b/c它周围没有直接的div…请查看我上面的更新以了解更多详细信息。看起来像:
page4.at('.titleBM')。next.text
感谢您帮助我获得了地址,现在只需要知道如何用ReEX解析并存储在DB中:)如果它们都是美国地址,那么它是直接的,否则考虑GECOCODEYUP,例如美国地址:“Tucson东部901大街,AZ 85719”,我想把街道变成1个变量,城市1变量,状态1变量和ZIPCODE成1个变量。你能详细说明一下吗?:)谢谢这有助于我在更新的帖子中导航到一页又一页,但我仍然需要找出如何提取地址b/c它周围没有直接的div…请查看我上面的更新以了解更多详细信息。看起来像:
page4.at('.titleBM')。next.text
感谢您帮助我获得了地址,现在只需要知道如何用ReEX解析并存储在DB中:)如果它们都是美国地址,那么它是直接的,否则考虑GECOCODEYUP,例如美国地址:“Tucson东部901大街,AZ 85719”,我想把街道变成1个变量,城市1变量,状态1变量和ZIPCODE成1个变量。你能详细说明一下吗?:)