Использование Ruby's Anemone Gem для очистки всех адресов электронной почты с сайта
Я пытаюсь очистить все адреса электронной почты на данном сайте, используя один файл Ruby-скрипт. В нижней части файла у меня есть жестко заданный контрольный пример с URL-адресом, на котором указан адрес электронной почты, указанный на этой конкретной странице (поэтому он должен найти адрес электронной почты на первой итерации первого цикла.
По некоторым причинам, мое регулярное выражение, кажется, не соответствует:
#get_emails.rb
require 'rubygems'
require 'open-uri'
require 'nokogiri'
require 'mechanize'
require 'uri'
require 'anemone'
class GetEmails
def initialize
@urlCounter, @anemoneCounter = 0
$allUrls, $emailUrls, $emails = []
end
def has_email?(listingUrl)
hasListing = false
Anemone.crawl(listingUrl) do |anemone|
anemone.on_every_page do |page|
body_text = page.body.to_s
matchOrNil = body_text.match(/\A[^@\s]+@[^@\s]+\z/)
if matchOrNil != nil
$emailUrls[$anemoneCounter] = listingUrl
$emails[$anemoneCounter] = body_text.match
$anemoneCounter += 1
hasListing = true
else
end
end
end
return hasListing
end
end
emailGrab = GetEmails.new()
emailGrab.has_email?("http://genuinestoragesheds.com/contact/")
puts $emails[0]
2 ответа
\A
а также \z
в вашем матче начало и конец строки соответственно. Очевидно, что эта веб-страница содержит больше, чем просто строку электронной почты, иначе вы не будете тестировать регулярные выражения вообще.
Вы можете упростить это до просто /[^@\s]+@[^@\s]+/
, но вам все равно нужно очистить строку, извлекая письмо.
Итак, вот рабочая версия кода. Использует одно регулярное выражение для поиска строки, содержащей письмо, и еще три для его очистки.
#get_emails.rb
require 'rubygems'
require 'open-uri'
require 'nokogiri'
require 'mechanize'
require 'uri'
require 'anemone'
class GetEmails
def initialize
@urlCounter = 0
$anemoneCounter = 0
$allUrls = []
$emailUrls = []
$emails = []
end
def email_clean(email)
email = email.gsub(/(\w+=)/,"")
email = email.gsub(/(\w+:)/, "")
email = email.gsub!(/\A"|"\Z/, '')
return email
end
def has_email?(listingUrl)
hasListing = false
Anemone.crawl(listingUrl) do |anemone|
anemone.on_every_page do |page|
body_text = page.body.to_s
#matchOrNil = body_text.match(/\A[^@\s]+@[^@\s]+\z/)
matchOrNil = body_text.match(/[^@\s]+@[^@\s]+/)
if matchOrNil != nil
$emailUrls[$anemoneCounter] = listingUrl
$emails[$anemoneCounter] = matchOrNil
$anemoneCounter += 1
hasListing = true
else
end
end
end
return hasListing
end
end
emailGrab = GetEmails.new()
found_email = "href=\"mailto:genuinestoragesheds@gmail.com\""
puts emailGrab.email_clean(found_email)