Als ich Benachrichtigungs-App aktualisieren, um ein Romanautor zu werden , mithilfe der API die Aktualisierungsinformationen der Arbeit von Meine Seite Ich dachte, ich wäre nicht süchtig nach dem, was ich tun wollte, also habe ich es mit einer neuartigen Version der Posting-Site namens Hameln geschafft.
Es ist eine Anwendung, die LINE Notify über Hameln-Aktualisierungsinformationen mit BeautifulSoup4 und IFTTT benachrichtigt.
Dieses Mal werden wir Scraping verwenden. </ b> Es ist eine Technologie, die gesetzlich geregelt ist. Schauen wir uns also die Geschichte des Gesetzes an. Ich denke, das erste, was zu beachten ist, ist, die Server der Site nicht zu überlasten. Dieses Mal wird time.sleep (1) als Gegenmaßnahme nach dem Abrufen oder Posten verwendet, um eine Wartezeit zu erstellen.
Es ist ein Dienst, der andere Dienste als IFTTT verknüpft. Verbinden Sie diesmal Webhooks und LINE Notify und lassen Sie sie Benachrichtigungen an Ihre LINE senden. Vorgehensweise </ b>
Erklären Sie kurz den Quellcode. import
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import csv
import time
post_ifttt() Es ist eine Funktion, um eine Benachrichtigung von IFTTT an LINE Notify zu senden. Hier verwenden wir den Applet-Namen und den Webhooks-Schlüssel. Ich habe es auch in der Update-Benachrichtigung verwendet, um Romanautor zu werden.
def post_ifttt(json):
# json: {value1: " content "}
url = (
"https://maker.ifttt.com/trigger/"
+ # Applet Name
+ "/with/key/"
+ # Webhooks Key
)
requests.post(url, json)
extract() Dies ist die zugrunde liegende Funktion dieses Codes. Es wird in dem später beschriebenen Teil verwendet. Extrahieren Sie je nach Bedingung einen von ["Titel"], ["Anzahl der Geschichten"] und ["URL"] aus HTML und speichern Sie ihn in der Liste. Es kann etwas schwierig sein, den Zweig zu sehen. Es wäre vielleicht besser gewesen, die if-Bedingungserklärungen parallel zu schreiben. Die Teile "<" und "" sind if-Anweisungen, die HTML-Tags entfernen und nur die gewünschten Attribute extrahieren.
def extract(info, condition, li):
for item in info:
if condition in str(item):
a = ""
is_a = 0
if condition!="href":
for s in str(item):
if s=="<" and is_a==1:
is_a = 0
li.append(a)
break
if is_a==1:
if condition=="neueste":
if "0" <= s and s <= "9":
a+=s
else:
a += s
if s==">" and is_a==0:
is_a = 1
else:
if "mode=user" in str(item):
continue
for s in str(item):
if s=="\"" and is_a==1:
is_a = 0
li.append(a)
break
if is_a==1:
a += s
if s=="\"" and is_a==0:
is_a = 1
Anmelden </ b> Da das Scraping über Hamelns Meine Seite erfolgt, POSTEN Sie die erforderlichen Informationen über den Anmeldebildschirm und melden Sie sich an. Die für den Anmeldevorgang erforderlichen Informationen variieren von Standort zu Standort und können mit den Entwicklertools überprüft werden. In Hameln ist dies jedoch "id, pass, mode". Der Modus ist auch "last_entry_end" für alle. POSTEN Sie diese Informationen und melden Sie sich an. Die detaillierte Verwendung von Beautifu-Suppe ist im folgenden Artikel zusammengefasst. Schauen Sie also bitte vorbei.
##############################################################
# Log in #
##############################################################
# id, pass
with open("input.txt") as f:
"""
input.txt: [ID PASS]
"""
s = f.read().split()
ID = s[0]
PASS = s[1]
session = requests.session()
url_login = "https://syosetu.org/?mode=login"
response = session.get(url_login)
time.sleep(1)
login_info = {
"id":ID,
"pass":PASS,
"mode":"login_entry_end"
}
res = session.post(url_login, data=login_info)
res.raise_for_status() # for error
time.sleep(1)
Input.txt ist übrigens eine Eingabedatei, in der die ID und das Passwort in dieser Reihenfolge mit einem halben Leerzeichen gespeichert werden. Beispiel)
input.txt
ID_hoge passwd_hoge
Ausgabe des Benutzernamens </ b> Der Benutzername wird aus dem HTML-Code der Benutzerinformationsseite extrahiert. Einfach.
###############################################################
# Print User Name #
###############################################################
soup_myage = BeautifulSoup(res.text, "html.parser")
account_href = soup_myage.select_one(".spotlight li a").attrs["href"]
url_account = urljoin(url_login, account_href)
res_account = session.get(url_account)
res_account.raise_for_status()
time.sleep(1)
soup_account = BeautifulSoup(res_account.text, "html.parser")
user_name = str((soup_account.select(".section3 h3"))[0])[4:-5].split("/")[0]
print("Hello "+ user_name + "!")
Informationen zu Ihren Lieblingsromanen finden Sie auf jeder Lieblingsseite </ b> Es gibt mehrere Lieblingsseiten. Speichern Sie daher auf jeder Seite ["Titel"], ["Anzahl der Storys"] und ["URL"] im Listentitel, latest_no bzw. ncode. Suchen Sie später nach Updates und speichern Sie sie in einer Datei.
###############################################################
# Page Transition #
###############################################################
a_list = soup_myage.select(".section.pickup a")
favo_a = ""
for _ in a_list:
if("Zur Favoritenliste" in _):
favo_a = _
break
url_favo = urljoin(url_login, favo_a.attrs["href"])
res_favo = session.get(url_favo)
res_favo.raise_for_status()
time.sleep(1)
soup_favo = BeautifulSoup(res_favo.text, "html.parser")
bookmark_titles = soup_favo.select(".section3 h3 a")
bookmark_latest = soup_favo.select(".section3 p a")
titles = []
latest_no = []
ncode = []
extract(bookmark_titles, "novel", titles)
extract(bookmark_latest, "neueste", latest_no)
extract(bookmark_titles, "href", ncode)
###############################################################
# Start Page Transition #
###############################################################
number_of_bookmarks_h2 = soup_favo.select_one(".heading h2")
number_of_bookmarks = ""
for s in str(number_of_bookmarks_h2)[4:-5]:
if s>="0" and s<='9':
number_of_bookmarks += s
number_of_bookmarks = int(number_of_bookmarks)
number_of_favo_pages = number_of_bookmarks // 10 + 1
for i in range(2,number_of_favo_pages+1):
url_favo = "https://syosetu.org/?mode=favo&word=&gensaku=&type=&page=" + str(i)
res_favo = session.get(url_favo)
res_favo.raise_for_status()
soup_favo = BeautifulSoup(res_favo.text, "html.parser")
bookmark_titles = soup_favo.select(".section3 h3 a")
bookmark_latest = soup_favo.select(".section3 p a")
extract(bookmark_titles, "novel", titles)
extract(bookmark_latest, "neueste", latest_no)
extract(bookmark_titles, "href", ncode)
time.sleep(1)
Datenerfassung </ b> Speichern Sie die neu erfassten Informationen in bookmark_info und die zuvor erfassten Informationen in Daten. Überprüfen Sie dann, ob es aktualisiert wurde.
###############################################################
# Get Latest Data #
###############################################################
bookmark_info = []
for i in range(len(titles)):
bookmark_info.append([titles[i], latest_no[i], ncode[i]])
###############################################################
# Get Previous Data #
###############################################################
read_file = "hameln.csv"
with open(read_file, encoding="utf-8") as f:
reader = csv.reader(f)
data = [row for row in reader]
###############################################################
# Check Whether Novels are Updated #
###############################################################
"""
previous data: data
latest data: bookmark_info
"""
for prev in data:
for latest in bookmark_info:
if prev[0] == latest[0]:
# check
if prev[1] != latest[1]:
print(str(latest[0]) + "Wurde aktualisiert.\n" + latest[2])
json = {"value1" : str(latest[0]) +"Wurde aktualisiert.\n" + latest[2]}
post_ifttt(json)
Schreiben Sie Aktualisierungsinformationen in die Datei </ b>
###############################################################
# Write Latest Information #
###############################################################
output = "hameln.csv"
with open(output, mode='w', newline="", encoding="utf-8") as f:
writer = csv.writer(f)
for i in range(len(bookmark_info)):
writer.writerow([bookmark_info[i][0], bookmark_info[i][1], bookmark_info[i][2]])
GitHub Auf GitHub hochgeladen ( hier ). Bitte schauen Sie, wenn Sie möchten.
Der Anmeldevorgang war der interessanteste Teil des Wissens, das mit dieser App gewonnen wurde. Sie geben nicht nur Ihre ID und Ihr Passwort weiter. Die Automatisierung wurde auch mit dem Taskplaner durchgeführt. Einzelheiten zur Verwendung des Taskplaners finden Sie im Referenzabschnitt.
Recommended Posts