Speichern Sie auf diese Weise die Bilddatei (Bildpfad) unter dem Namen member name.jpg
.
* Dieses Mal ist das Speicherziel cloudinary. Wenn Sie es ausführen, ändern Sie bitte einen Speicher oder ein lokales Speicherziel.
Da das HTML jedes offiziellen HP unterschiedlich war, unterscheidet sich der Code geringfügig.
get_ng_images.py
from bs4 import BeautifulSoup
import urllib
import cloudinary
import cloudinary.uploader
import os
cloudinary.config(
cloud_name = os.environ.get("cloud_name"),
api_key = os.environ.get("api_key"),
api_secret = os.environ.get("api_secret")
)
def get_mem_list():
url = "http://www.nogizaka46.com/member/"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0",
}
request = urllib.request.Request(url, headers=headers)
html = urllib.request.urlopen(request)
soup = BeautifulSoup(html, 'html.parser')
li = soup.select('#memberlist div[class="clearfix"] a')
li = [url + str(l.attrs['href'])[2:] for l in li]
return li
def get_img(url):
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0",
}
request = urllib.request.Request(url=url, headers=headers)
html = urllib.request.urlopen(request)
soup = BeautifulSoup(html, 'html.parser')
img = soup.select('#profile img')[0].attrs['src']
name = str(soup.select('#profile div[class="txt"] h2')[0].contents[1]).replace(' ', '')
res = cloudinary.uploader.upload(file=img, public_id="q-u46/member-images/"+name)
return 'finished {} !!'.format(name)
def main():
list_ = get_mem_list()
for url in list_:
print(get_img(url), end=' | ')
if __name__ == "__main__":
main()
get_keya_images.py
from bs4 import BeautifulSoup
import urllib
import cloudinary
import cloudinary.uploader
import os
cloudinary.config(
cloud_name = os.environ.get("cloud_name"),
api_key = os.environ.get("api_key"),
api_secret = os.environ.get("api_secret")
)
def get_mem_list():
url = "https://www.keyakizaka46.com/s/k46o/search/artist?ima=0000"
base = "https://www.keyakizaka46.com"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0",
}
request = urllib.request.Request(url, headers=headers)
html = urllib.request.urlopen(request)
soup = BeautifulSoup(html, 'html.parser')
li = soup.select('div[class="sorted sort-default current"] li a')
li = list(set([base + str(l.attrs['href']) for l in li]))
return li
def get_img(url):
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0",
}
request = urllib.request.Request(url=url, headers=headers)
html = urllib.request.urlopen(request)
soup = BeautifulSoup(html, 'html.parser')
img = soup.select('div[class="box-profile_img"] img')[0].attrs['src']
name = str(soup.select('div[class="box-profile_text"] p[class="name"]')[0].text).replace(' ', '')
res = cloudinary.uploader.upload(file=img, public_id='q-u46/member-images/'+''.join(name.splitlines()))
return 'finished {} !!'.format(name)
def main():
list_ = get_mem_list()
for url in list_:
print(get_img(url), end=' | ')
if __name__ == "__main__":
main()
get_hina_images.py
from bs4 import BeautifulSoup
import urllib
import cloudinary
import cloudinary.uploader
import os
cloudinary.config(
cloud_name = os.environ.get("cloud_name"),
api_key = os.environ.get("api_key"),
api_secret = os.environ.get("api_secret")
)
def get_mem_list():
url = "https://www.hinatazaka46.com/s/official/search/artist?ima=0000"
base = "https://www.hinatazaka46.com"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0",
}
request = urllib.request.Request(url, headers=headers)
html = urllib.request.urlopen(request)
soup = BeautifulSoup(html, 'html.parser')
li = soup.select('ul[class="p-member__list"] li[class="p-member__item"] a')
li = list(set([base + str(l.attrs['href']) for l in li]))
return li
def get_img(url):
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0",
}
request = urllib.request.Request(url=url, headers=headers)
html = urllib.request.urlopen(request)
soup = BeautifulSoup(html, 'html.parser')
img = soup.select('div[class="c-member__thumb c-member__thumb__large"] img')[0].attrs['src']
name = str(soup.select('div[class="p-member__info"] div[class="p-member__info__head"] div[class="c-member__name--info"]')[0].text).replace(' ', '')
#print(img)
res = cloudinary.uploader.upload(file=img, public_id='q-u46/member-images/'+''.join(name.splitlines()))
return 'finished {} !!'.format(name)
def main():
list_ = get_mem_list()
for url in list_:
print(get_img(url), end=' | ')
if __name__ == "__main__":
main()
Ich werde hauptsächlich den Code von Nogizaka erklären.
Gegenstände mit einem Stern sind erforderlich, wenn nur Schaben durchgeführt wird. Abgesehen davon dient es zum Speichern im Speicher, ignorieren Sie es also.
from bs4 import BeautifulSoup #☆
import urllib #☆
import cloudinary
import cloudinary.uploader
import os
cloudinary.config(
cloud_name = os.environ.get("cloud_name"),
api_key = os.environ.get("api_key"),
api_secret = os.environ.get("api_secret")
)
Alle Links zur Detailseite finden Sie in der Mitgliedereinführung oben.
Schauen wir uns zunächst das HTML der Mitgliedereinführung Top an.
Sie können sehen, dass das untergeordnete Element des Tags "<div id =" memberlist "class =" left ">" wahrscheinlich den gewünschten Bildlink enthält.
Und es gibt drei untergeordnete Element-Tags "
Grenzen Sie daher durch # memberlist`` div [class =" clearfix "]
ein.
Schauen Sie sich als nächstes die untergeordneten Elemente von <div class =" clearfix ">
an.
Wie unten gezeigt, gibt es für jedes Mitglied ein "
Daher scheint es, dass Sie ein Tag für Mitglieder mit # memberlist`` div [class =" clearfix "] a
erhalten können.
def get_mem_list():
url = "http://www.nogizaka46.com/member/"
#Wenn Sie in den Kopfzeilen nicht Folgendes angeben, tritt ein Fehler auf. Fügen Sie ihn daher hinzu.
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0",
}
request = urllib.request.Request(url, headers=headers)
html = urllib.request.urlopen(request)
soup = BeautifulSoup(html, 'html.parser')
#Holen Sie sich eine Liste der Elemente, die die Kriterien erfüllen.
li = soup.select('#memberlist div[class="clearfix"] a')
#Der erste der relativen Pfade'./'Einstellen, .Sie können die Attribute im Tag mit attrs abrufen.
li = [url + str(l.attrs['href'])[2:] for l in li]
return li
Es scheint, dass Sie es mit dem Tag "img" innerhalb des Tags "
img = soup.select('#profile img')[0].attrs['src']
Es stellte sich heraus, dass es so etwas war. Da der Listentyp vonoup.select zurückgegeben wird, wird er mit [0] extrahiert.
Sie können sehen, dass es sich um ein Element von
<h2>
im Tag Der Zweck dieser Zeit ist es, den Namen der Kanji-Anzeige zu erhalten, daher möchte ich mein Bestes geben, um "Shiraishimai" zu ignorieren.
Verwenden Sie also das h2-Tag .contents [1]
.
Sie erhalten eine Liste wie "[ Shiraishi Mai </ span>", "Mai Shiraishi"]. Geben Sie also [1] an und erhalten Sie nur die in der Kanji-Anzeige.
Ich möchte auch das Leerzeichen zwischen dem Vor- und Nachnamen entfernen, also werde ich es mit "Ersetzen" entfernen.
#Das Argument ist die Mitgliederdetailseite
def get_img(url):
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0",
}
request = urllib.request.Request(url=url, headers=headers)
html = urllib.request.urlopen(request)
soup = BeautifulSoup(html, 'html.parser')
img = soup.select('#profile img')[0].attrs['src']
name = str(soup.select('#profile div[class="txt"] h2')[0].contents[1]).replace(' ', '')
#Folgendes hängt vom Speicherziel ab.
res = cloudinary.uploader.upload(file=img, public_id="q-u46/member-images/"+name)
return 'finished {} !!'.format(name)
def main():
#Listen Sie Links zu Mitgliederdetailseiten auf
list_ = get_mem_list()
#Schleifenverarbeitung der Bildaufnahmefunktion mit for-Anweisung
for url in list_:
print(get_img(url), end=' | ')
if __name__ == "__main__":
main()
Der Selektor ist etwas anders, aber die grundlegende Methode ist dieselbe wie bei Nogizaka.
Aus irgendeinem Grund bekam ich die Zeilenumbrüche, als ich den Namen bekam, und ich bekam einen Fehler beim Benennen der Datei.
Also habe ich die Zeilenumbrüche in '' ignoriert. Join (name.splitlines ())
. (Liste und mach mit, was ein schmutziger Weg ist, aber bitte vergib mir mm)
Das Schaben ist sehr praktisch, also lasst es uns benutzen!
Recommended Posts