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