Wie extrahiere ich alle URLs aus einer Nur-Text-Datei in Ruby?So extrahieren Sie URLs aus dem Text
Ich habe versucht, einige Bibliotheken, aber sie scheitern in einigen Fällen. Was ist der beste Weg?
Wie extrahiere ich alle URLs aus einer Nur-Text-Datei in Ruby?So extrahieren Sie URLs aus dem Text
Ich habe versucht, einige Bibliotheken, aber sie scheitern in einigen Fällen. Was ist der beste Weg?
Welche Fälle versagen?
Nach der Bibliothek regexpert können Sie
regexp = /(^$)|(^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$)/ix
verwenden und dann eine scan
auf den Text durchzuführen.
EDIT: Scheint wie die Regexp die leere Zeichenfolge unterstützt. Entfernen Sie einfach die anfängliche (^$)
und Sie
Interessant, wie diese Regex schlägt fehl, wenn die URL eine IP-Adresse ist – NullUserException
Ja. Ich habe Ihre Antwort wegen der "Abstimmung und Abstimmung auf Ihre Bedürfnisse" gewählt. Es scheitert auch, wenn ein Benutzer @ Passwort, oder andere als https ?, oder eine andere seltsame Situation. Sie würden wahrscheinlich nicht http://tools.ietf.org/html/rfc3986 lesen wollen, um loszulegen -_- – Chubas
Es schlägt wie oben. Ich frage hier, warum ich nicht in der Lage bin "und es nach Ihren Bedürfnissen anzupassen". – tapioco123
Sie regex verwenden können und .scan()
string.scan(/(https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w\/_\.]*(\?\S+)?)?)?)/)
können Sie mit dieser Regex loszulegen und passen sie nach Ihren Bedürfnissen.
Wenn Sie fertig wie mit, was bereits für Sie in Ruby zur Verfügung gestellt hat:
require "uri"
URI.extract("text here http://foo.example.org/bla and here mailto:[email protected] and here also.")
# => ["http://foo.example.org/bla", "mailto:[email protected]"]
Lesen Sie mehr: http://railsapi.com/doc/ruby-v1.8/classes/URI.html#M004495
Es schlägt auf Text mit ":" http: //blog.apptamers fehl.com/post/48613650042/uri-extract-incorrect-in-ruby-1-9-3 –
'URI.extract (IhreString,/http (s)? | mailto /)' – titibouboul
Gibt es trotzdem, URLs ohne Schema zu extrahieren? wie www.example.com –
Ich habe verwendet twitter-text gem
require "twitter-text"
class UrlParser
include Twitter::Extractor
end
urls = UrlParser.new.extract_urls("http://stackoverflow.com")
puts urls.inspect
require 'uri'
foo = #<URI::HTTP:0x007f91c76ebad0 URL:http://foobar/00u0u_gKHnmtWe0Jk_600x450.jpg>
foo.to_s
=> "http://foobar/00u0u_gKHnmtWe0Jk_600x450.jpg"
bearbeiten: Erklärung
Für diejenigen, die Probleme haben, URIs durch JSON-Antworten zu analysieren oder ein Scraping-Tool wie Nokogiri oder Mechanize zu verwenden, funktionierte diese Lösung für mich.
Wenn Sie Ihre Eingabe in etwa so aussieht:
"http://i.imgur.com/c31IkbM.gifv;http://i.imgur.com/c31IkbM.gifvhttp://i.imgur.com/c31IkbM.gifv"
dh URLs müssen nicht weißen Raum um sie herum haben, können durch ein beliebiges Trennzeichen begrenzt werden, oder haben keine Trennzeichen zwischen ihnen überhaupt, können Sie mit dem folgender ansatz:
def process_images(raw_input)
return [] if raw_input.nil?
urls = raw_input.split('http')
urls.shift
urls.map { |url| "http#{url}".strip.split(/[\s\,\;]/)[0] }
end
Hoffe es hilft!
Welche Bibliotheken haben Sie ausprobiert und auf welche Weise scheitern sie? – Zaz
Wenn Sie eine solche Frage stellen, erwarten wir, dass Sie versuchen, das Problem zu lösen. Wir helfen Ihnen gerne dabei, Ihren Code zu reparieren, aber uns zu bitten, Code für Sie zu schreiben, gehört nicht zum Thema. Bitte lesen Sie "[fragen]" und "[mcve]". –