以前我使用mechanize 进行解析,但现在我正在解析使用javscript 并且mechanize 不支持它的网站,所以我使用了selenium。我必须从该网站获取有关公司的信息,但只有在单击 javascript 链接后才能获取信息。我用 selenium 做的,我的解析器点击 javascript,然后收集信息,这里出现问题。如您所知,我需要将收集到的信息保存到数据库中,只有当信息存储在变量中(例如地址=..、电话=..、电子邮件=..等)时,我才能正确执行此操作。我使用 SelectorGadget 选择必要的信息,selenium 收集信息 ( driver.find_element(:css, ..)
,但所有公司的信息都位于单个选择器中 (.p2 div
) 并且我不能将位置保存为单个变量、另一个变量中的电话等。所以我的问题是 - 是否可以划分此文本并保存在变量中?
说明过程的照片:
i.imgur.com/J5dcGZD.png
i.imgur.com/MaBWICZ.png
i.imgur.com/ZDNXhLt.png
带有部分 html 的照片:http: //i.imgur.com/NUa1X97.png
这是该站点的示例页面。该网站是俄语的,因此请通过 Google 翻译器进行翻译
解析器本身(将每个公司的一堆文本保存到联系人变量):
require 'rubygems'
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :firefox
driver.get "http://www.ypag.ru/cat/komp249/page3880.html"
loop do
driver.find_elements(:css, ".p2 div a").each {|link| link.click}
driver.find_elements(:css, ".p3 a, .firm , .p2 div").each {
|n,r,c|
name = n
region = r
contacts = c
print name.text.center(100)
puts region
puts contacts
}
link = driver.find_element(:xpath, "/html/body/table[5]/tbody/tr/td/a[2]" )[:href]
break if link == "http://www.ypag.ru/cat/komp249/page3780.html"
driver.get "#{link}"
end