Hier sind einige Web-Scraping-Techniken. Erhalten Sie die wichtigsten Neuigkeiten von Yahoo! Japan mit GAS, VBA, PHP bzw. Python. Zusammenfassend ist GAS + Spreadsheet einfacher zu verwenden und wird empfohlen.
GAS + Spreadsheet
Wenn Sie ein Google-Konto haben, müssen Sie keine Umgebung vorbereiten und können es regelmäßig mit dem GAS-Trigger ausführen.
Es gibt Leistungsprobleme bei der Ausführung in großem Maßstab. Aus Sicherheitsgründen ist der Umgang mit wichtigen Daten etwas streng.
gas.js
function yahoo() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('yahoo');
//Geben Sie den zu schreibenden Blattnamen an
var getUrl = 'https://www.yahoo.co.jp/';
//Geben Sie die Zielseite an
var content = UrlFetchApp.fetch(getUrl).getContentText('UTF-8');
var content = content.replace(/\r?\n/g, '');
var data = content.match(/<div class="_2jjSS8r_I9Zd6O9NFJtDN-" aria-label="Wichtige Neuigkeiten">(.*?)<\/div><div>/);
//Inhaltsblock festlegen
var data = data[0];
var URLs = data.match(/<a class="yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt" href="(.*?)"/g);
//URL-Gruppe auf einmal zu Array
var Titles = data.match(/<span class="fQMqQTGJTbIMxjQwZA2zk _3tGRl6x9iIWRiFTkKl3kcR">(.*?)<\/span>/g);
//Sammeln Sie Artikelnamengruppen in einem Array
for (var i = 0; i < 8; i++) {
var URL = URLs[i];
URL = URL.replace('<a class="yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt" href="', '');
URL = URL.replace('"', '');
sheet.getRange(i + 2, 1).setValue(URL);
var Title = Titles[i];
Title = Title.replace('<span class="fQMqQTGJTbIMxjQwZA2zk _3tGRl6x9iIWRiFTkKl3kcR">', '');
Title = Title.replace('<\/span>', '');
sheet.getRange(i + 2, 2).setValue(Title);
}
Browser.msgBox('Done!');
}
VBA + Excel
Für Benutzer mit geringer Alphabetisierung bin ich dankbar für die Sätze, die im vertrauten Excel verwendet werden können.
Da dies vom IE-Objekt abhängt, ist ein Windows-Terminal erforderlich. Die einzigartigen Spezifikationen des IE funktionieren auf modernen Websites häufig nicht gut.
Auf dem Excel VBA-Bildschirm Menüleiste> Extras> Referenzeinstellungen Überprüfen Sie die folgenden zwei Bibliotheken. -Microsoft HTML Object Library · Microsoft Internet Controls
Sub GetData_Click()
Application.ScreenUpdating = False
Dim objIE As InternetExplorer
Dim htmlDoc As HTMLDocument
Dim NewsItem IHTMLElement
Dim NewsList, NewsTitle, NewsURL As IHTMLElementCollection
Dim PageURL As String
Dim LastRow As Long
PageURL = "https://www.yahoo.co.jp/"
'Erstellen Sie ein neues IE-Objekt und legen Sie es fest
Set objIE = CreateObject("Internetexplorer.Application")
objIE.Visible = False
'URL im IE öffnen
objIE.navigate PageURL
'Warten auf das Lesen
Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
DoEvents
Loop
'Legen Sie das von objIE geladene HTML-Dokument fest
Set htmlDoc = objIE.document
'Holen Sie sich Inhalte für jeden Artikel
Set NewsList = htmlDoc.getElementsByClassName("_2jjSS8r_I9Zd6O9NFJtDN-")
For Each NewsItem In NewsList
'Geben Sie die Suchanforderungen für jedes Tag an
Set NewsTitle = NewsItem.getElementsByTagName("a")
Set NewsURL = NewsItem.getElementsByClassName("fQMqQTGJTbIMxjQwZA2zk _3tGRl6x9iIWRiFTkKl3kcR")
'Holen Sie sich die letzte Zeile
LastRow = Worksheets("result").Cells(Rows.Count, 1).End(xlUp).Row
'Geben Sie für jede Zelle den entsprechenden Wert ein
Worksheets("result").Cells(LastRow + 1, 1).Value = Right(NewsURL(0).href, 4)
Worksheets("result").Cells(LastRow + 1, 2).Value = NewsTitle(0).innerText
'Überspringen, wenn nicht gefunden
On Error Resume Next
Worksheets("result").Cells(LastRow + 1, 5).Value = Mid(Campagin(0).innerText, 2)
Worksheets("result").Cells(LastRow + 1, 6).Value = Mid(Campagin(1).innerText, 1)
Next NewsItem
MsgBox "Done!"
End Sub
PHP + csv
Die Leistung ist gut. Es gibt nur wenige Bibliotheken, die davon abhängen.
Sie benötigen eine Umgebung, um PHP auszuführen.
phpQuery-onefile.php Laden Sie die obige Datei herunter und fügen Sie sie in dieselbe Hierarchie ein wie die PHP-Datei des Hauptteils
scraping.php
<?php
require_once("phpQuery-onefile.php");
$path = "xxx/xxx.csv"; //Geben Sie die auszugebende CSV an
$header = "URL".", ". "Title"."\n";
$file = fopen($path, "w");
$target = "https://www.yahoo.co.jp/";
$html = file_get_contents($target);
$list = phpQuery::newDocument($html)->find("div._2jjSS8r_I9Zd6O9NFJtDN-");
for($i = 0; $i < 8; $i++){
$url[$i] = phpQuery::newDocument($list)->find("li:eq($i)")->find("a")->attr("href");
$title[$i] = str_replace(",", "", phpQuery::newDocument($list)->find("span.fQMqQTGJTbIMxjQwZA2zk _3tGRl6x9iIWRiFTkKl3kcR:eq($i)")->text());
$data .= ".$url[$i].", ".$title[$i]."."\n";
}
$content = $header . $data;
fputs($file, $content);
fclose($file);
?>
Python + csv
Die Leistung ist gut. Wenn Sie Python bereits verwenden, ist es einfach, damit zu arbeiten.
Das Erstellen einer Python-Umgebung ist etwas mühsam. Wenn Sie Python bereits verwenden, können Sie möglicherweise eine Verbindung herstellen und es auf verschiedene Arten verwenden. Wenn Sie jedoch nur kratzen, ist es mit PHP überwiegend einfacher, eine Umgebung zu erstellen.
pip3 install requests
pip3 install beautifulsoup4
scraping.py
# coding: utf-8
import requests
from bs4 import BeautifulSoup
import csv
r = requests.get("https://yahoo.co.jp/")
data = BeautifulSoup(r.content, "html.parser")
list = data.find("div", "_2jjSS8r_I9Zd6O9NFJtDN-")
links = list.find_all("a", "")
titles = list.find_all("span", "fQMqQTGJTbIMxjQwZA2zk _3tGRl6x9iIWRiFTkKl3kcR")
with open('xxx/xxx.csv', 'w') as f:
#Entscheiden Sie, wo die CSV-Datei abgelegt werden soll
writer = csv.writer(f)
writer.writerow(['url', 'title'] )
for i in range(7):
writer.writerow([links[i].attrs['href'], titles[i].text])
Wenn Sie den Inhalt nicht anzeigen können, ohne sich anzumelden, ist der Chrome-Treiber von Python hilfreich. Weitere Informationen zur Verwendung von chromedriver finden Sie in diesem Artikel. Vollständiger automatischer Betrieb von Chrome mit Python + Selen Weitere Informationen zum Übergeben des Pfads und Hinweise zur Version finden Sie in diesem Artikel. [Für Selen] So installieren Sie den Chrome-Treiber mit pip (kein Durchgang erforderlich, Version kann angegeben werden)
pip3 install selenium
pip3 install chromedriver-binary
login_scraping.py
# coding: utf-8
import time, os, requests, sys, csv
from selenium import webdriver
import chromedriver_binary
#Angabe von Benutzername und Passwort
user_id = "xxxxxxxxxx"
password = "xxxxxxxxxx"
download_dir = os.path.dirname(__file__)
#Geben Sie die URL der Anmeldeseite an
login = 'https://www.example.com/login/'
#Starten Sie Chrome, indem Sie Optionen wie "Ziel speichern" angeben
opt = webdriver.ChromeOptions()
opt.add_experimental_option("prefs", {
"download.default_directory": download_dir,
"download.prompt_for_download": False,
"plugins.always_open_pdf_externally": True
})
driver = webdriver.Chrome(options=opt)
#Anmeldeseite öffnen
driver.get(login)
time.sleep(3) #Warten Sie, bis die Seite geöffnet wird
#Senden Sie den Schlüssel auf dem Anmeldebildschirm an den Benutzernamen
u = driver.find_element_by_name('xxx')
u.send_keys(user_id)
#Schlüssel zum Anmeldebildschirmkennwort senden
p = driver.find_element_by_name('yyy')
p.send_keys(password)
p.submit()
time.sleep(3) #Warten Sie, bis die Seite geöffnet wird
driver.get("https://www.example.com/listdata/")
list = driver.find_element_by_tag_name("_2jjSS8r_I9Zd6O9NFJtDN-")
links = list.find_all("a", "")
titles = list.find_all("span", "fQMqQTGJTbIMxjQwZA2zk _3tGRl6x9iIWRiFTkKl3kcR")
with open('xxx/xxx.csv', 'w') as f:
#Entscheiden Sie, wo die CSV-Datei abgelegt werden soll
writer = csv.writer(f)
writer.writerow(['url', 'title'] )
for i in range(7):
writer.writerow([links[i].attrs['href'], titles[i].text])
#Warten Sie, bis die Seite geöffnet wird
time.sleep(3)
driver.quit()
Bisher haben wir fünf Methoden eingeführt. Je nach Verwendung gibt es Vor- und Nachteile. Wir freuen uns darauf, Ihnen zu helfen.
Recommended Posts