Справка по Ruby Regex - PullRequest
       10

Справка по Ruby Regex

1 голос
/ 07 февраля 2009

Я хочу извлечь с сайта ссылки на домашние сайты участников. Похоже на это

<a href="http://www.ptop.se" target="_blank">

Я проверил с этим сайтом

http://www.rubular.com/

<a href="(.*?)" target="_blank">

Выводится http://www.ptop.se,

А вот и код

    require 'open-uri'
    url = "http://itproffs.se/forumv2/showprofile.aspx?memid=2683"
    open(url) { |page| content = page.read()
    links = content.scan(/<a href="(.*?)" target="_blank">/)
    links.each {|link| puts #{link} 
    }
    }

если вы запустите это, это не сработает. почему бы и нет?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2009

Я бы посоветовал вам использовать одну из хороших библиотек разбора HTML / XML в ruby, например, Hpricot или Nokogiri .

Если вам нужно войти на сайт, вас может заинтересовать такая библиотека, как WWW :: Mechanize .

Пример кода:

require "open-uri"
require "hpricot"
require "nokogiri"

url = "http://itproffs.se/forumv2"

# Using Hpricot 
doc = Hpricot(open(url))
doc.search("//a[@target='_blank']").each { |user| puts "found #{user.inner_html}" }

# Using Nokogiri
doc = Nokogiri::HTML(open(url))
doc.xpath("//a[@target='_blank']").each { |user| puts "found #{user.text}" }
1 голос
/ 31 марта 2009

Несколько проблем с вашим кодом

  1. Я не знаю, что вы имеете в виду, используя

    {ссылка}. Но если вы хотите добавить символ '#' к ссылке, убедитесь, что

    Вы заключаете это в кавычки. т.е. "# {Ссылка}"
  2. String.scan принимает блок. Используй это перебрать спички.
  3. Страница, к которой вы пытаетесь получить доступ не возвращает ссылки, которые В любом случае регулярное выражение будет соответствовать.

Вот что будет работать:

require 'open-uri'
url = "http://itproffs.se/forumv2/"
open(url) do |page|
    content = page.read()
    content.scan(/<a href="(.*?)" target="_blank">/) do |match|
            match.each { |link| puts link}
        end
end

Есть лучшие способы сделать это, я уверен. Но это должно сработать.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...