Scraping von Linseninformationen von price.com mit Python. Holen Sie sich alle Preisinformationen und Objektivspezifikationen mit csv. Die zu erwerbenden Gegenstände sind wie folgt.
Kameraname, Rangfolge, niedrigster Preis, niedrigster Kreditpreis, Preis-URL, kompatible Fassung, Objektivtyp, Fokus, detaillierter Objektivtyp, kompatibel in voller Größe, nur APS-C, Objektivkonfiguration, Anzahl der Blendenblätter, Brennweite, kürzeste Aufnahmeabstand, Maximale Aufnahmevergrößerung, offener F-Wert, Blickwinkel, Verwacklungskorrekturmechanismus, tropfenfest, staubdicht, Weitwinkel, Teleskop, Makro, hohe Vergrößerung, Fischauge (Fischauge), Neigungsaufnahme, Spiegel, großer Durchmesser, Pfannkuchen, Filterdurchmesser , Maximaler Durchmesser x Länge, Gewicht
renzu.py
from bs4 import BeautifulSoup
import urllib.request
import re
import requests
import time
import datetime
#URL der Zielwebsite
#Preis.com Objektiv Ranking
url = "https://kakaku.com/camera/camera-lens/ranking_1050/"
page_count = 1
linklist = []
#Holen Sie sich jede Objektivseite von allen Ranking-Seiten
while True:
category_res = requests.get(url + "?page=" + str(page_count)).text
soup = BeautifulSoup(category_res, 'html.parser') #Schöne Suppeninitialisierung
print ("{}Seite Seite".format(page_count))
for elm in soup.find_all("a"):
if 'href' in elm.attrs:
link_url = elm.attrs['href']
if "https://kakaku.com/item/" in link_url:
linklist.append(link_url)
# print(link_url)
#Markieren, bis die nächste Seite leer ist
a_next_tag= soup.find_all("li", {"class": "next"})
if a_next_tag:
# if page_count < 1:
page_count += 1
continue
break
#Duplikate entfernen
linklist = sorted(list(set(linklist)),key=linklist.index)
################################################################
#Dateinamen schreiben (Datum und Uhrzeit der Erfassung)
now = datetime.datetime.now()
filename = "renzu"+now.strftime('%Y%m%d_%H%M%S') + '.csv'
f = open(filename,'a', encoding='cp932',errors='ignore')
f.write("Kameraname,Rangfolge,Geringster Preis,クレジットGeringster Preis,Preis URL,")
#Gehen Sie zum Objektivspezifikationsblatt
page_html = linklist[0] + "spec/#tab"
res = urllib.request.urlopen(page_html)
page_soup = BeautifulSoup(res, 'html.parser')
#Holen Sie sich eine Tabelle mit Objektivspezifikationen
table = page_soup.findAll("table", {"class":"tblBorderGray mTop15"})[0]
rows = table.findAll("tr")
index=-1
#Schreiben Sie jede Überschrift in die Objektivspezifikationstabelle
for row in rows:
csvRow = []
for cell in row.findAll('th'):
index +=1
if index==0:
continue
if index==17:
continue
if index==26:
continue
if index==29:
continue
cell=cell.get_text()
cell=re.sub(r"[\n\t\s]*", "", str(cell))
f.write(cell)
f.write(",")
f.write("\n")
#Schreiben Sie die Preisinformationen des Objektivs
for page_url in linklist:
page_html = page_url + "spec/#tab"
res = urllib.request.urlopen(page_html)
page_soup = BeautifulSoup(res, 'html.parser')
#Erforderliche Elemente und Klassenname
name = page_soup.find("h2",itemprop="name").text
try:
rank = page_soup.find("span",class_="rankNum").text
except AttributeError:
rank = ''
try:
low_price = page_soup.find("div", class_="priceWrap").find("span",class_="priceTxt").text
low_price =low_price.replace(',', '')
except AttributeError:
low_price = ''
try:
cre_price = page_soup.find("div", class_="creditCard").find("span",class_="priceTxt").text
cre_price =cre_price.replace(',', '')
except AttributeError:
cre_price = ''
print(rank)
print(low_price)
f.write(name)
f.write(",")
f.write(rank)
f.write(",")
f.write(low_price)
f.write(",")
f.write(cre_price)
f.write(",")
f.write(page_url)
f.write(",")
#Schreiben Sie Objektivinformationen
#Tabelle angeben
table = page_soup.findAll("table", {"class":"tblBorderGray mTop15"})[0]
rows = table.findAll("tr")
#Tabelle schreiben
for row in rows:
csvRow = []
for cell in row.findAll('td'):
cell=cell.get_text()
cell=re.sub(r"[\n\t\s]*", "", str(cell))
f.write(cell)
f.write(",")
f.write("\n")
f.close()
Recommended Posts