2017-09-06 58 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()應該刪除一切權利(但在這種情況下,事實並非如此)

我已經成功地創建一個循環通過各車廂的循環在這頁面,但DataFrame中的某些行由於其他不需要的文本而被擴展。

+0

'.rstrip()'和'.strip()'只刪除空格(不可打印的字符),它們不會刪除文本。 –

+0

謝謝,布爾漢和爲這個問題道歉。讚賞修正案。你可以刪除某些字符後的文本 - 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]來獲取型號名稱的前五個元素,但是如果您想減去第一個系列元素,則只需將值更改爲3. strip()有助於按空格拆分模型名稱。希望這可以幫助

+1

謝謝 - 這個伎倆!感謝你的幫助! – AdrianC

相關問題