Gratter les informations sur les lentilles de price.com avec python. Obtenez toutes les informations sur les prix et les spécifications des objectifs avec csv. Les éléments à acquérir sont les suivants.
Nom de l'appareil photo, classement, prix le plus bas, prix de crédit le plus bas, URL du prix, monture compatible, type d'objectif, mise au point, type d'objectif détaillé, compatible pleine taille, APS-C uniquement, configuration de l'objectif, nombre de lames d'ouverture, distance focale, distance de prise de vue la plus courte, Grossissement de prise de vue maximal, valeur F ouverte, angle de vue, mécanisme de correction du tremblement de l'appareil photo, anti-goutte, anti-poussière, grand angle, télescope, macro, grossissement élevé, œil de poisson (œil de poisson), prise de vue inclinée, miroir, grand diamètre, crêpe, diamètre du filtre , Diamètre maximum x longueur, poids
renzu.py
from bs4 import BeautifulSoup
import urllib.request
import re
import requests
import time
import datetime
#URL du site cible
#prix.classement des objectifs com
url = "https://kakaku.com/camera/camera-lens/ranking_1050/"
page_count = 1
linklist = []
#Obtenez chaque page d'objectif de toutes les pages de classement
while True:
category_res = requests.get(url + "?page=" + str(page_count)).text
soup = BeautifulSoup(category_res, 'html.parser') #Belle initialisation de soupe
print ("{}Page de la page".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)
#Signaler jusqu'à ce que la page suivante soit épuisée
a_next_tag= soup.find_all("li", {"class": "next"})
if a_next_tag:
# if page_count < 1:
page_count += 1
continue
break
#Supprimer les doublons
linklist = sorted(list(set(linklist)),key=linklist.index)
################################################################
#Ecrire le nom du fichier (date et heure d'acquisition)
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("Nom de la caméra,Classement,Prix le plus bas,クレジットPrix le plus bas,URL du prix,")
#Passer à la fiche technique de l'objectif
page_html = linklist[0] + "spec/#tab"
res = urllib.request.urlopen(page_html)
page_soup = BeautifulSoup(res, 'html.parser')
#Obtenez un tableau des spécifications des objectifs
table = page_soup.findAll("table", {"class":"tblBorderGray mTop15"})[0]
rows = table.findAll("tr")
index=-1
#Écrivez chaque titre dans le tableau des spécifications de l'objectif
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")
#Écrivez les informations de prix de l'objectif
for page_url in linklist:
page_html = page_url + "spec/#tab"
res = urllib.request.urlopen(page_html)
page_soup = BeautifulSoup(res, 'html.parser')
#Éléments requis et nom de classe
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(",")
#Écrire les informations sur l'objectif
#Spécifier la table
table = page_soup.findAll("table", {"class":"tblBorderGray mTop15"})[0]
rows = table.findAll("tr")
#Ecrire la table
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