如何删除字符串右侧的额外文本?

时间:2017-09-06 06:00:36

标签: python web-scraping strip

我试图得到一个汽车模型的名称,因为它出现在网站上,但出于某种原因(在尝试了以下所有内容之后),它似乎无法正常工作。

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)

我还创建了一个变量,其中包含我要删除的整个句子(有效),然后在strip函数中解析,但它的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()应该删除任何一方的空白区域(但在这种情况下它不会删除)和{{1}应该删除所有权利(但在这种情况下,它不会)

我已成功创建了一个for循环,循环遍历此页面上的每个汽车,但DataFrame中的某些行由于其他不需要的文本而被扩展。

1 个答案:

答案 0 :(得分:1)

strip()只会删除你正在使用的字符串前后的空格字符,你可以试试这个:

x = [{'fortysixplus': 8, 'surprise': 11, 'female': 3, 'twentysix': 6,
      'male': 2, 'user_id': 1, 'less15': 4, 'sixteen': 5, 'thirtysix': 7,
      'neutral': 10, 'happy': 9}]

with open('test.csv','w',newline='') as f:
    w = csv.DictWriter(f,fieldnames='user_id male female less15 sixteen twentysix thirtysix fortysixplus happy neutral surprise'.split())
    w.writeheader()
    w.writerows(x)

我注意到大多数模型名称都有5个关键部分(年份,品牌和型号)所以我使用[:5]来获取模型名称的前五个元素,但如果你想减去第一个系列元素然后只需将值更改为3. strip()有助于按空格分割模型名称。希望这有帮助