Früher habe ich mit Pythons ** Beautiful Soup ** gekratzt, aber ich habe es versucht, weil es mit einer Bibliothek namens ** Nokogiri ** sogar in Ruby realisiert werden kann.
Zunächst aus dem fertigen Code und dem fertigen Produkt
scraping.rb
require 'nokogiri'
require 'open-uri'
require "csv"
require "byebug"
url_base = "https://news.yahoo.co.jp/"
def get_categories(url)
html = open(url)
doc = Nokogiri::HTML.parse(html)
categories = doc.css(".yjnHeader_sub_cat li a")
categories.map do |category|
cat_name = category.text
cat = category[:href]
end
end
@cat_list = get_categories(url_base)
@infos = []
@cat_list.each do |cat|
url = "#{url_base + cat}"
html = open(url)
doc = Nokogiri::HTML.parse(html)
titles = doc.css(".topicsListItem a")
i = 1
titles.each do |title|
@infos << [i,title.text]
i += 1
end
end
CSV.open("result.csv", "w") do |csv|
@infos.each do |info|
csv << info
puts "-------------------------------"
puts info
end
end
Ich werde jeden von ihnen erklären.
require 'nokogiri'
require 'open-uri'
require "csv"
require "byebug"
Dieses Mal werde ich ** Nokogiri und Open-Uri ** und ** CSV ** für die CSV-Speicherung verwenden.
Nokogiri ist eine Ruby-Bibliothek, die HTML- und XML-Code analysiert und mit Selektoren extrahiert. Da der Selektor zusätzlich zu ** css ** durch ** xpath ** angegeben werden kann, kann das Scraping auch auf Seiten mit komplizierten Strukturen reibungslos durchgeführt werden.
Dieses Mal erhalten wir die Titel der einzelnen Themen und fügen sie schließlich in einer CSV-Datei zusammen.
Die Themenseite scheint über den Link (ein Tag) in der Li der Klasse ** yjnHeader_sub ** verbunden zu sein.
url_base = "https://news.yahoo.co.jp/"
def get_categories(url)
html = open(url)
#Holen Sie sich den HTML-Code der URL durch Parse gelesen
doc = Nokogiri::HTML.parse(html)
#Verwenden Sie den CSS-Selektor, um alle a-Tags abzurufen, die mit der vorherigen Kategorie verbunden sind
categories = doc.css(".yjnHeader_sub_cat li a")
categories.map do |category|
#Inhalt von href aus dem erworbenen Tag(Verknüpfte URL)Nehmen Sie eins nach dem anderen heraus und kehren Sie zurück
cat = category[:href]
end
end
#@cat_Ich werde die erhaltenen Links als Liste zusammenfassen
@cat_list = get_categories(url_base)
Wir erhalten den Titel für jedes Thema über den Link, den wir zuvor erhalten haben.
@infos = []
@cat_list.each do |cat|
#Die URL der Themenseite ist die ursprüngliche URL+Wegen der abgerufenen URL
url = "#{url_base + cat}"
html = open(url)
doc = Nokogiri::HTML.parse(html)
titles = doc.css(".topicsListItem a")
i = 1
titles.each do |title|
#Speichern Sie Themennummern und Titel als Satz für die Kompilierung in CSV
@infos << [i,title.text]
i += 1
end
end
Speichern Sie den zuletzt zusammengefassten Titel in CSV.
#Verwenden der CSV-Bibliothek"result.csv"Neu erstellt
CSV.open("result.csv", "w") do |csv|
@infos.each do |info|
#Die als Protokolle verwendeten Elemente werden ausgegeben, während sie zu csv hinzugefügt werden.
csv << info
puts "-------------------------------"
puts info
end
end
Wenn es jedoch so bleibt, wie es ist, werden die Zeichen wahrscheinlich verstümmelt. Speichern Sie es daher erneut mit einer Stückliste. (Ursprünglich ist es richtig, dies beim Speichern von CSV zu tun, aber es hat nicht funktioniert, deshalb habe ich mich hier darum gekümmert.)
Öffnen Sie "result.csv" mit ** Notepad ** und wählen Sie Überschreiben.
Wählen Sie zu diesem Zeitpunkt ** UTF-8 (mit Stückliste) ** und speichern Sie erneut.
Wenn Sie csv erneut öffnen, werden die verstümmelten Zeichen aufgelöst.
Ich denke, es gibt noch viele Punkte, die noch erreicht werden müssen. Wenn Sie also Vorschläge haben, würde ich mich freuen, wenn Sie einen Kommentar abgeben könnten.
Recommended Posts