Verwenden Sie Python, um die Big Camera-Website zu durchsuchen.
Ich glaube nicht, dass es "gute Kratzartikel" gab. Ich habe ein Code- und Youtube-Video gemacht, um als Youtuber zu üben, das Hikakin übertrifft.
[Link] https://www.youtube.com/watch?v=SZuNFDzJndA&list=PLzPCqF-heFHyFb_aoqnXc8GrECL6yMdvZ
Bitte seien Sie vorsichtig, wenn Sie auf eigenes Risiko kratzen, da Folgendes auftreten kann. Fall der Zentralbibliothek der Stadt Okazaki url : https://ja.wikipedia.org/wiki/%E5%B2%A1%E5%B4%8E%E5%B8%82%E7%AB%8B%E4%B8%AD%E5%A4%AE%E5%9B%B3%E6%9B%B8%E9%A4%A8%E4%BA%8B%E4%BB%B6
Wenn die Site-Benutzeroberfläche der großen Kamera geändert wird, besteht eine hohe Wahrscheinlichkeit, dass sie nicht funktioniert Bitte kommentieren Sie, wenn es nicht funktioniert. Kann korrigiert werden.
scraping_biccamera.py
from bs4 import BeautifulSoup as bs
from datetime import datetime
import pandas as pd
import requests
import urllib
import time
import re
def get_html(url):
"""
Eine Funktion, die ein schönes Objekt mit einer URL zurückgibt
"""
res = requests.get(url)
return bs(res.content, "html.parser")
def next_url(res_bs):
"""
HTML-Daten(res_bs)Eine Funktion, die auf der nächsten Seite URL oder Keine zurückgibt
"""
domain = "https://www.biccamera.com/"
for res in res_bs.findAll(class_="bcs_l"):
if "Nächster" in res.text:
if res.find("a"):
next_url = domain + res.find("a").get("href")
return next_url
return None
def product_df(res_bs):
"""
Funktion zum Abrufen von DataFrame von HTML mit großen Kameras
"""
#Erstellen Sie eine leere Liste
output = []
#Informationen zur Produktliste erhalten Sie in HTML
item_list = res_bs.findAll(class_=re.compile(r"prod_box sku*"))
# item_Holen Sie sich Produktinformationen nacheinander aus der Liste
for num, item in enumerate(item_list):
#URL mit Produktdetails abrufen
item_url = item.find(class_="cssopa").get("href")
#Produkttitel abrufen
title = item.find(class_="cssopa").find("img").get("alt")
#Produktfotoerfassung
picture = item.find(class_="cssopa").find("img").get("src")
#Erworbener Produkthersteller
maker = item.find(class_="bcs_maker").text
#Produktpreis erhalten
price = item.find(class_=re.compile(r"bcs_price*")).text
#Erhalten Sie Punktinformationen, falls vorhanden, und erhalten Sie 0, wenn nicht
if item.find(class_="bcs_point"):
point = item.find(class_="bcs_point").text
else:
point = "0"
#Erhalten Sie, wenn es Inventarinformationen gibt, erhalten Sie 0, wenn nicht
if item.find(class_=re.compile(r"label_*")):
stock = item.find(class_=re.compile(r"label_*")).text
else:
stock = "0"
#Wenn Informationen zur Bewertungsnummer vorhanden sind, erhalten Sie 0, wenn nicht
if item.find(class_="bcs_star"):
ratings = item.find(class_="bcs_star").find("a").text
else:
ratings = "0"
#Informationen zum Liefertermin erhalten, falls verfügbar, andernfalls 0
if item.find(class_="bcs_ship"):
terms = item.find(class_="bcs_ship").text
else:
terms = "no ship info"
#Geben Sie die Informationen für jedes oben erworbene Produkt aus(list)Anhängen(hinzufügen)Machen
output.append({
"item_url": item_url,
"title": title,
"picture": picture,
"maker": maker,
"price": price,
"point": point,
"stock": stock,
"ratings": ratings,
"terms": terms,
})
#Speichern Sie alle Informationen in der Ausgabe und speichern Sie die Ausgabe im Pandas-Datenrahmen
df = pd.DataFrame(output)
return df
def get_product_list(url, pages=10):
"""
Nach Eingabe der Ziel-URL, Seitenübergang,
Eine Funktion, die alle Produktlisteninformationen als Datenrahmen zurückgibt
"""
#Erstellen Sie einen leeren Datenrahmen
all_df = pd.DataFrame()
for _ in range(pages):
#Holen Sie sich HTML von der eingegebenen URL
res_bs = get_html(url)
#Holen Sie sich Datenrahmen von HTML
df = product_df(res_bs)
# all_Hänge den oben erstellten df an df an(hinzufügen)Machen
all_df = all_df.append(df)
# all_Drucken Sie die Anzahl der dfs und überprüfen Sie, ob sie hinzugefügt wurden
print("all_df:", len(all_df))
print(f"sleeping.....{_}Zeit")
#Warten Sie 5 Sekunden, um eine Überlastung der anderen Site zu vermeiden
time.sleep(5)
#URL der nächsten Seite oder Keine abrufen
url = next_url(res_bs)
#Wenn url None ist, endet die for-Anweisung
if url is None:
print("break")
break
return all_df
return all_df
if __name__ == "__main__":
#Definieren Sie die URL, die die Daten enthält, die Sie abrufen möchten
url = "https://www.biccamera.com/bc/category/?q=laptop&rowPerPage=100#bcs_resultTxt"
#Alle Seitenübergänge und Daten werden erfasst
df = get_product_list(url)
#Suchinformationen von der URL abrufen
qs = urllib.parse.urlparse(url).query
#Verwandeln Sie Suchinformationen in ein Wörterbuch
kw = urllib.parse.parse_qs(qs)
#Suchwort abrufen
query = kw.get("q")[0]
#Speichern Sie die erfassten Daten als CSV
today = datetime.today().strftime("%Y%m%d_%H%M%S")
df.to_csv(f"{today}_biccamera_{query}", index=False)
#Durch Ersetzen der Seiten durch einen numerischen Wert (siehe unten) kann die Anzahl der Seitenübergänge auf das 20-fache geändert werden.
# df = get_product_list(url, pages=20)
Ich werde den obigen Code nicht von Anfang an erklären. Wenn Sie interessiert sind, schauen Sie sich bitte das Video an.
Außerdem hat die große Kamera eine etwas höhere Kratzschwierigkeit (mit re.complile). Es ist ein gutes Unterrichtsmaterial, daher hoffe ich, dass Sie dieses Prinzip verstehen und Ihr Leben als Kratzer genießen.
Als Jugendlicher werde ich weiterhin Daten usw. vorverarbeiten, speichern und visualisieren. Wir werden erkennen, "lebe nach dem, was du magst".
Recommended Posts