Ruby 在Mechanize中进行迭代以抓取页面
我希望使用Mechanize自动化一个过程来抓取一些网页并保存信息 这一页是 我希望遍历Ruby 在Mechanize中进行迭代以抓取页面,ruby,web-crawler,nokogiri,mechanize,Ruby,Web Crawler,Nokogiri,Mechanize,我希望使用Mechanize自动化一个过程来抓取一些网页并保存信息 这一页是 我希望遍历ulid=“looks”并在该迭代中单击looks中的每个用户。所以元素看起来像这样: <a href="/luciamouet" data-page-track="user name click" data-track="user name click | byline" target="_blank" title="Lucia Mouet">Lucia M.</a> 您拥有构建详
ulid=“looks”
并在该迭代中单击looks中的每个用户。所以元素看起来像这样:
<a href="/luciamouet" data-page-track="user name click" data-track="user name click | byline" target="_blank" title="Lucia Mouet">Lucia M.</a>
您拥有构建详细页面URL的一切。抓取相对URL(我称之为路径)附加基本URL并发出新请求
require 'mechanize'
agent = Mechanize.new
agent.pluggable_parser.default = Mechanize::Page
base = 'http://lookbook.nu'
page = agent.get(base + '/north-america')
detail_pages = page.search("//div[contains(@class, 'look_meta_container')]/p/a[1]/@href").map(&:text)
# ["/user/1069907-Veronica-P", "/elliott_alexzander", "/neno", "/skirtsofurban", "/tovogueorbust", "/dthutt", "/ryapie", "/lovebetweentheracks", "/lonleyboy", "/bobbyraffin", "/tsangtastic", "/user/737385-Katia-H"]
detail_pages.each do |path|
page = agent.get(base + path)
name = page.search("//div[@id='userheader']//h1/a").text
fans = page.search("//span[contains(text(), 'Fans')]/../span[1]").text
puts name + " have " + fans + " fans"
end
=>
注意:为了得到
Mechanize::Page
响应,我使用了#pluggable_解析器。通常你不需要它,但他们没有正确设置内容类型。与其像@radubogdan建议的那样乱用base+path,不如使用page.uri:
page.search('#looks h1 a').each do |a|
url = page.uri.merge a[:href]
page2 = agent.get url
puts page2.title
end
除非您使用的是非常旧的Ruby版本,否则您不需要要求“rubygems”
。您不需要要求“nokogiri”
,因为它已经是Mechanize的依赖项。另外,您可能不需要要求“openuri”
,因为Mechanize提供了自己的获取页面的机制。是的,这对我来说很清楚,但我发现初学者很困惑。很好,你提出了这个,但是你可以在一个注释中这样做。我可以在一个注释中放5行代码?那会很混乱。
Veronica P have 26,044 fans
Elliott Alexzander have 3,409 fans
Neno Neno have 15,304 fans
Laura P have 975 fans
Alexandra G. have 620 fans
Dayeanne Hutton have 336 fans
Mariah Alysz have 288 fans
Lina Dinh have 11,675 fans
Talal Amine have 882 fans
Bobby Raffin have 72,469 fans
Jenny Tsang have 8,909 fans
Katia H. have 282 fans
page.search('#looks h1 a').each do |a|
url = page.uri.merge a[:href]
page2 = agent.get url
puts page2.title
end