Comment puis-je extraire toutes les URL d'un fichier texte brut dans Ruby?Comment extraire des URL à partir du texte
J'ai essayé certaines bibliothèques mais elles échouent dans certains cas. Quelle est la meilleure façon?
Comment puis-je extraire toutes les URL d'un fichier texte brut dans Ruby?Comment extraire des URL à partir du texte
J'ai essayé certaines bibliothèques mais elles échouent dans certains cas. Quelle est la meilleure façon?
Quels cas ont échoué?
Selon la bibliothèque regexpert, vous pouvez utiliser
regexp = /(^$)|(^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$)/ix
puis effectuez une scan
sur le texte.
EDIT: On dirait que l'expression rationnelle prend en charge la chaîne vide. Il suffit de retirer la première (^$)
et vous avez terminé
Intéressant comment cette expression régulière échoue quand l'URL est une adresse IP – NullUserException
Yep. J'ai effectivement voté sur votre réponse à cause du "et l'ajuster en fonction de vos besoins". Il échoue également lorsqu'il présente un utilisateur @ mot de passe, ou en utilisant autre que https ?, ou toute autre situation étrange. Vous ne voudrez probablement pas lire http://tools.ietf.org/html/rfc3986 pour commencer -_- – Chubas
Il échoue comme ci-dessus. Je demande ici juste pourquoi je suis incapable de "et l'ajuster selon vos besoins". – tapioco123
Vous pouvez utiliser regex et .scan()
string.scan(/(https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w\/_\.]*(\?\S+)?)?)?)/)
Vous pouvez commencer avec cette expression régulière et l'adapter en fonction de vos besoins.
Si vous aimez utiliser ce qui est déjà prévu pour vous dans Ruby:
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]"]
En savoir plus: http://railsapi.com/doc/ruby-v1.8/classes/URI.html#M004495
Il échoue sur le texte avec ":" http: //blog.apptamers.com/post/48613650042/uri-extrait-incorrect-en-ruby-1-9-3 –
'URI.extract (yourString,/http (s)? | mailto /)' – titibouboul
Il ya de toute façon pour extraire des URL sans schéma? comme www.example.com –
Je l'ai utilisé twitter-text petit bijou
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"
edit: explication
Pour ceux qui ont des problèmes d'analyse des URI via des réponses JSON ou en utilisant un outil de grattage comme Nokogiri ou Mechanize, cette solution a fonctionné pour moi.
Si votre entrée ressemble à ceci:
"http://i.imgur.com/c31IkbM.gifv;http://i.imgur.com/c31IkbM.gifvhttp://i.imgur.com/c31IkbM.gifv"
-à-dire les URL ne sont pas nécessairement avoir un espace blanc autour d'eux, peut être délimité par un séparateur, ou ne pas avoir delimiter entre eux du tout, vous pouvez utiliser le approche suivante:
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
Espérons que ça aide!
Quelles bibliothèques avez-vous essayées, et en quoi échouent-elles? – Zaz
Lorsque vous posez une question comme celle-ci, nous nous attendons à voir votre tentative de résoudre le problème. Nous sommes heureux de vous aider à corriger votre code, mais nous demander d'écrire du code pour vous est hors sujet. Veuillez lire "[ask]" et "[mcve]". –