2017-09-06 2 views
1

J'essaie d'obtenir le nom d'un modèle de voiture tel qu'il apparaît sur le site Web, mais pour une raison quelconque (après avoir essayé tous les éléments suivants), cela ne semble pas fonctionner.Comment supprimer du texte supplémentaire à droite d'une chaîne?

import requests 
from bs4 import BeautifulSoup 
import pandas as pd 

url = "https://www.carsales.com.au/cars/results?offset=12" 
r = requests.get(url) 
soup = BeautifulSoup(r.text, "html.parser") 
model_name = soup.find_all('a', attrs={'data-webm-clickvalue':'sv-view-title'}) 
final_model_name = model_name[1] 
clean_model_name = final_model_name.text 
clean_model_name = clean_model_name.replace("\r", "") 
clean_model_name = clean_model_name.replace("\n", "") 
clean_model_name = clean_model_name.strip() 
clean_model_name = clean_model_name.rstrip() 
print(clean_model_name) 

J'ai également créé une variable qui contient toute la phrase que je veux supprimer (qui fonctionne) qui est ensuite analysé dans la fonction de la bande, mais l'élément MY14 de celui-ci change en fonction de l'année de la voiture. Créer une variable pour chaque année ne semble pas très efficace.

Certains indices renvoient des résultats propres, cependant, d'autres retournent les suivantes (faites défiler à travers):

2014 Holden Cruze SRi Z Series JH Series II Auto              MY14      Manufacturer Marketing Year (MY)       The manufacturer's marketing year of this model. 

Je ne ai pas besoin des détails sur le modèle de voiture - après la recherche, strip() devrait supprimer l'espace blanc rstrip() devrait tout enlever à droite (mais dans ce cas il ne le fait pas)

J'ai réussi à créer une boucle for qui boucle à travers chacune des voitures sur ce page, mais certaines lignes dans le DataFrame sont étendues en raison du texte indésirable supplémentaire.

+0

'.rstrip()' et '.strip()' ne supprime que les espaces (caractères non imprimables), ils ne suppriment pas le texte. –

+0

Merci, Burhan et excuses pour le sujet. Appréciez l'amendement. Pouvez-vous supprimer le texte après certains caractères - IE: pouvons-nous faire cela dans ma situation? – AdrianC

+0

Oui, vous devez regarder dans les expressions régulières pour cela - mais plus important encore, vous devez comprendre ce qui est spécial à propos de cette liste spécifique qui provoque votre scrape ne fonctionne pas. S'il ne s'agit que d'une erreur du site Web d'origine, alors vous devez trouver un moyen de détecter ce cas spécifique et d'écrire du code pour y remédier - ou si c'est parce que votre analyse n'est pas assez robuste, vous devez traiter avec ça. –

Répondre

1

bande() ne ferait que supprimer les caractères d'espace blanc à l'avant et à l'arrière de la chaîne que vous travaillez, vous pouvez essayer ceci:

import requests 
from bs4 import BeautifulSoup 
import pandas as pd 

url = "https://www.carsales.com.au/cars/results?offset=12" 
r = requests.get(url) 
soup = BeautifulSoup(r.text, "html.parser") 
model_name = soup.find_all('a', attrs={'data-webm-clickvalue':'sv-view-title'}) 
final_model_name = model_name[1] 
clean_model_name = final_model_name.text 
clean_model_name = clean_model_name.strip().split()[:5] 
clean_model_name = ' '.join(clean_model_name) 
print(clean_model_name) 

J'ai remarqué que la plupart des noms de modèles ont 5 les parties clés (l'année, la marque et le modèle) donc j'ai utilisé [: 5] pour obtenir les cinq premiers éléments du nom du modèle, mais si vous voulez réduire le premier élément de la série, changez la valeur en 3. strip() aide à diviser le nom du modèle par les espaces. Espérons que cela aide

+1

Merci - cela a fait l'affaire! Apprécier ton aide! – AdrianC