首页 > 解决方案 > 如何从 csv 数据中删除“kg”和“m”?

问题描述

我只想有价值观。我正在寻找从列中删除“m”和“kg”。到目前为止,这是我的代码,效果很好。但唯一的问题是“m”和“kg”。任何帮助将不胜感激!

import requests
import time
import csv
from bs4 import BeautifulSoup
from selenium import webdriver

#Main function
def getContent(link):
    #Open Browser
    browser = webdriver.Chrome()

    #Go to link
    browser.get(link)

    #Pause
    time.sleep(3)

    #Source
    html = browser.page_source

    #Soup activate
    soup = BeautifulSoup(html,'lxml')

    #Find table
    table = soup.find_all('table')
    table2 = table[1]

    #Save in csv
    with open('averageheight.csv','w',newline='') as f:
        writer = csv.writer(f)
        writer.writerow(('Country','Average Height Male','Average Weight Male','Average BMI Male','Average Height Female','Average Weight Female','Average BMI Female'))
        for tr in table2('tr')[1:]:
            row = [(t.get_text(strip=True)).encode('utf-8') for t in tr(['td','th'])]
            writer.writerow(row)

    #Close browser
    browser.close()
    browser.quit()

#Links
getContent('https://www.worlddata.info/average-bodyheight.php')

这是当前输出

Country,Average Height Male,Average Weight Male,Average BMI Male,Average Height Female,Average Weight Female,Average BMI Female
b'Netherlands',b'',b'1.83 m',b'87.4 kg',b'26.1',b'',b'1.69 m',b'72.3 kg',b'25.3'

第二,第三,第四和第五列额外的'm'和'kg'。那些是我想要替换的。但还没有运气。

标签: pythonseleniumcsvselenium-webdriverbeautifulsoup

解决方案


从网页和您的输出数据中,数字和“kg”或“m”之间总是有一个空格。在这种情况下,关于空间的简单拆分可能会奏效。

将分配替换为row以下内容:

row = [(t.get_text(strip=True)).split(" ")[0].encode('utf-8') for t in tr(['td','th'])]

在这里,我们将关于空格字符的每个标签文本值拆分并仅保留第一个值。


推荐阅读