2017-09-06 16 views
1

私は車のモデルの名前をウェブサイトに表示されているようにしようとしていますが、何らかの理由で(次のすべてを試した後に)うまくいかないようです。文字列の右側の余分なテキストを削除するにはどうすればよいですか?

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) 

また、私はその後、ストリップ機能で解析されますが、それのMY14要素は車の年に基づいて自動的に変更私は(働く)を削除したい文全体を格納する変数を作成しました。毎年変数を作成するのは効率的ではないようです。

いくつかのインデックスはしかし、他の人が(全体のスクロール)以下を返し、クリーンな結果を返す:

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

私は車のモデルの後に詳細のいずれかを必要としない - 研究の後、strip()は、ホワイトスペースを削除する必要があります(ただしこの場合はそうではありません)、rstrip()はすべてを右に削除する必要があります(ただしこの場合はそうではありません)。

私は正常にforループを作成しました。追加の不要なテキストのためにDataFrameの一部の行が拡張されます。

+0

'.rstrip()'と '.strip()'は空白文字(印字不能文字)のみを取り除きますが、テキストは削除されません。 –

+0

ありがとう、Burhanとその件についてお詫び申し上げます。改正案を感謝します。特定の文字の後にテキストを削除できますか?IE:私の状況でこれを行うことはできますか? – AdrianC

+0

はい、そのために正規表現を調べる必要がありますが、重要なことは、スクラップが機能しなくなるこの特定のリスティングについて特別なものを見つけ出す必要があることです。元のウェブサイトからの単なるエラーであれば、この特定のケースを検出し、対処するためのコードを書く方法を見つけなければなりません。あるいは、パースした結果が十分に堅牢ではない場合は、それと。 –

答えて

1

ストリップ()のみ、使用している文字列の前後に空白文字を削除するだろう、あなたはこれを試すことができます。

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) 

私は、モデル名のほとんどが5を持っていることに気づきましたモデル名の最初の5つの要素を取得するために[:5]を使用しましたが、最初のシリーズ要素をマイナスしたい場合は、値を3に変更します。strip()モデル名をスペースで分割するのに役立ちます。これは役に立ちます。

+1

ありがとう - これはトリックでした!あなたの助けに感謝! – AdrianC

関連する問題