2017-09-22 1 views
0

J'ai pris une classe Python mon année junior de collège, mais j'ai oublié beaucoup. Pour le travail, on m'a demandé d'essayer de trouver un moyen de récupérer une date sur un site Web. J'ai un fichier python qui fait quelque chose de similaire pour un site différent que j'utilise. Voici le code:Python Web Scraping Liste de la page Web au fichier texte

from bs4 import BeautifulSoup 
import io 
import requests 

soup = 
BeautifulSoup(requests.get("https://servicenet.dewalt.com/Parts/Search?searchedNumber=N365763").content) 

rows = soup.select("#customerList tbody tr") 
with io.open("data.txt", "w", encoding="utf-8") as f: 
    f.write(u", ".join([row.select_one("td a").text for row in rows])) 

Ceci donne la liste des numéros de modèle pour les pièces d'outils électriques pour ce site. Maintenant, je veux essentiellement faire la même chose mais je ne sais pas par où commencer. Le site est https://www.powertoolreplacementparts.com/briggs-stratton-part-finder/#/s/BRG//498260/1/y

Vous cliquez sur le bouton "Où est utilisé" et puis il y a une liste des numéros de modèle "093412-0011-01", "093412-0011-02", etc. Je veux que ces chiffres soient envoyé à un fichier texte séparé par des virgules comme dans mon premier code ("093412-0011-01, 093412-0011-02, ...") Toute aide est très appréciée. Merci!

Répondre

2

J'ai utilisé le sélénium pour naviguer dans les pages.

code:

import io 
import time 
from selenium import webdriver 
from bs4 import BeautifulSoup 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

# Selenium Intializations 
driver = webdriver.Chrome() 
driver.get('https://www.powertoolreplacementparts.com/briggs-stratton-part-finder/#/s/BRG//498260/1/y') 
wait = WebDriverWait(driver, 30) 
driver.maximize_window() 

# Locating the "Where Used" Button 
driver.find_element_by_xpath("//input[@id='aripartsSearch_whereUsedBtn_0'][@class='ariPartListWhereUsed ariImageOverride'][@title='Where Used']").click() 
wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="ari_searchResults_Grid"]/ul'))) 


# Intializing BS4 and looking for the "Show More" Button 
soup = BeautifulSoup(driver.page_source, "html.parser") 
show = soup.find('li', {'class': 'ari-search-showMore'}) 

# Keep clicking the "Show More" Button until it is not visible anymore 
while not show is None: 
    time.sleep(2) 
    hidden_element = driver.find_element_by_css_selector('#ari-showMore-unhide') 
    if hidden_element.is_displayed(): 
     print("Element found") 
     driver.find_element_by_css_selector('#ari-showMore-unhide').click() 
     show = soup.find('li', {'class': 'ari-search-showMore'}) 
    else: 
     print("Element not found") 
     break 

# Write the data parsed to the text file "data.txt" 
with io.open("data.txt", "w", encoding="utf-8") as f: 
    rows = soup.findAll('li', {'class': 'ari-ModelByPrompt'}) 
    for row in rows: 
     part = str(row.text).replace(" ", "").replace("\n", "") 
     print(part) 
     f.write(part + ",") 

Sortie:

Element found 
Element found 
Element found 
Element not found 
093412-0011-01 
093412-0011-02 
093412-0015-01 
093412-0039-01 
093412-0060-01 
093412-0136-01 
093412-0136-02 
093412-0139-01 
093412-0150-01 
093412-0153-01 
093412-0154-01 
093412-0169-01 
093412-0169-02 
093412-0172-01 
093412-0174-01 
093412-0315-A1 
093412-0339-A1 
093412-0360-A1 
093412-0636-A1 
093412-0669-A1 
093412-1015-E1 
093412-1039-E1 
093412-1060-E1 
093412-1236-E1 
093412-1236-E2 
093412-1253-E1 
093412-1254-E1 
093412-1269-E1 
093412-1274-E1 
093412-1278-E1 
093432-0035-01 
093432-0035-02 
093432-0035-03 
093432-0036-01 
093432-0036-03 
093432-0036-04 
093432-0037-01 
093432-0038-01 
093432-0038-03 
093432-0041-01 
093432-0140-01 
093432-0145-01 
093432-0149-01 
093432-0152-01 
093432-0157-01 
093432-0158-01 
093432-0160-01 
093432-0192-B1 
093432-0335-A1 
093432-0336-A1 
093432-0337-A1 
093432-0338-A1 
093432-1035-B1 
093432-1035-E1 
093432-1035-E2 
093432-1035-E4 
093432-1036-B1 
093432-1036-E1 
093432-1037-E1 
093432-1038-B1 
093432-1038-E1 
093432-1240-B1 
093432-1240-E1 
093432-1257-E1 
093432-1258-E1 
093432-1280-B1 
093432-1280-E1 
093432-1281-B1 
093432-1281-E1 
093432-1282-B1 
093432-1282-E1 
093432-1286-B1 
093452-0049-01 
093452-0141-01 
093452-0168-01 
093452-0349-A1 
093452-1049-B1 
093452-1049-E1 
093452-1049-E5 
093452-1241-E1 
093452-1242-E1 
093452-1277-E1 
093452-1283-B1 
093452-1283-E1 
09A412-0267-E1 
09A413-0201-E1 
09A413-0202-E1 
09A413-0202-E2 
09A413-0202-E3 
09A413-0203-E1 
09A413-0522-E1 
09K432-0022-01 
09K432-0023-01 
09K432-0024-01 
09K432-0115-01 
09K432-0116-01 
09K432-0116-02 
09K432-0117-01 
09K432-0118-01 
120502-0015-E1 

Contenu du fichier:

093412-0011-01,093412-0011-02,093412-0015-01,093412-0039-01,093412-0060-01,093412-0136-01,093412-0136-02,093412-0139-01,093412-0150-01,093412-0153-01,093412-0154-01,093412-0169-01,093412-0169-02,093412-0172-01,093412-0174-01,093412-0315-A1,093412-0339-A1,093412-0360-A1,093412-0636-A1,093412-0669-A1,093412-1015-E1,093412-1039-E1,093412-1060-E1,093412-1236-E1,093412-1236-E2,093412-1253-E1,093412-1254-E1,093412-1269-E1,093412-1274-E1,093412-1278-E1,093432-0035-01,093432-0035-02,093432-0035-03,093432-0036-01,093432-0036-03,093432-0036-04,093432-0037-01,093432-0038-01,093432-0038-03,093432-0041-01,093432-0140-01,093432-0145-01,093432-0149-01,093432-0152-01,093432-0157-01,093432-0158-01,093432-0160-01,093432-0192-B1,093432-0335-A1,093432-0336-A1,093432-0337-A1,093432-0338-A1,093432-1035-B1,093432-1035-E1,093432-1035-E2,093432-1035-E4,093432-1036-B1,093432-1036-E1,093432-1037-E1,093432-1038-B1,093432-1038-E1,093432-1240-B1,093432-1240-E1,093432-1257-E1,093432-1258-E1,093432-1280-B1,093432-1280-E1,093432-1281-B1,093432-1281-E1,093432-1282-B1,093432-1282-E1,093432-1286-B1,093452-0049-01,093452-0141-01,093452-0168-01,093452-0349-A1,093452-1049-B1,093452-1049-E1,093452-1049-E5,093452-1241-E1,093452-1242-E1,093452-1277-E1,093452-1283-B1,093452-1283-E1,09A412-0267-E1,09A413-0201-E1,09A413-0202-E1,09A413-0202-E2,09A413-0202-E3,09A413-0203-E1,09A413-0522-E1,09K432-0022-01,09K432-0023-01,09K432-0024-01,09K432-0115-01,09K432-0116-01,09K432-0116-02,09K432-0117-01,09K432-0118-01,120502-0015-E1, 
+0

C'est exactement ce que je veux, mais quand je lance votre code, je reçois un erreur qui dit: "FileNotFoundError: [WinError 2] Le système ne peut pas trouver le fichier spécifié" et un autre qui dit "selenium.common.exceptions.WebDriverException: Message: L'exécutable 'chromedriver' doit être dans PATH. " –

+0

Je me suis dit que je devais installer les paquets "webdriver" et "time" mais quand j'essaye de le faire j'obtiens une erreur qui dit "Impossible de trouver une version qui satisfait le temps requis (à partir des versions:) Aucune recherche trouvée trouvée pour le temps "Tous les autres paquets sont mis à jour. –

+0

Salut Thomas, je crois que la bibliothèque "time" est livrée avec python 3. La seule chose que vous aurez besoin d'installer est le sélénium. Vous aurez besoin d'utiliser PIP pour installer du sélénium "PIP install sélenium". De plus, vous devrez télécharger le chromedriver à partir de ce [link] (https://sites.google.com/a/chromium.org/chromedriver/downloads) et ajouter l'exécutable à votre chemin (je l'ajoute généralement dans le répertoire du projet). Reportez-vous à ce [link] (http://selenium-python.readthedocs.io/installation.html#) pour une instruction globale étape par étape. – Ali

1

1) Chrome Ouvert à https://www.powertoolreplacementparts.com/briggs-stratton-part-finder/#/s/BRG//498260/1/y

2) onglet réseau ouvert

3) cliquez sur "Lorsqu'il est utilisé"

4) Voir appel API pour point de terminaison 'GetModelSearchModelsForPrompt'

5) Copier l'adresse URL https://partstream.arinet.com/Search/GetModelSearchModelsForPrompt?cb=jsonp1506134982932&arib=BRG&arisku=498260&modelName=&responsive=true&arik=AjydG6MJi4Y9noWP0hFB&aril=en-US&ariv=https%253A%252F%252Fwww.powertoolreplacementparts.com%252Fbriggs-stratton-part-finder%252F

6) Ouvrez cela avec des demandes, vous aurez besoin d'une pensée intelligente pour analyser que beca utilisez ils retournent HTML dans "JSON".