【问题标题】:How do I remove "kg" and "m" from my csv data?如何从 csv 数据中删除“kg”和“m”?
【发布时间】:2020-03-18 23:30:15
【问题描述】:

我只想拥有价值观。我希望从列中删除“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'。那些是我想要替换的。但还没有运气。

【问题讨论】:

  • 需要csv数据的例子

标签: python selenium csv selenium-webdriver beautifulsoup


【解决方案1】:

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

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

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

这里我们将每个标签文本值拆分为空格字符,并只保留第一个值。

【讨论】:

    【解决方案2】:

    您的代码存在一些最佳实践问题

    import requests
    import time , os
    import csv
    from bs4 import BeautifulSoup
    from selenium import webdriver
    
    #Main function
    def getContent(link):
    
        #Go to link
        browser.get(link)
    
        #Pause
        time.sleep(3)
    
        #Source
        html = browser.page_source
    
        #Soup activate
        soup = BeautifulSoup(html,'lxml')
    
        #Find table
        table_rows = soup.select('table[id="avgsizes"] tbody tr')
        if table_rows:       
            for tr in table_rows[1:]:
                #'td', class_=lambda x: x != 'blank') to skip blank tds
                row = [(t.get_text(strip=True)).replace(' kg','').replace(' m','').encode('utf-8') for t in tr.find_all('td', class_=lambda x: x != 'blank')]
                SaveAsCsv(row)
    
    
    def SaveAsCsv(list_of_rows):
        try:
            with open('averageheight.csv', mode='a',  newline='', encoding='utf-8') as outfile:
                csv.writer(outfile).writerow(list_of_rows)
        except PermissionError:
            print("Please make sure averageheight.csv is closed\n")
    
    if os.path.isfile('averageheight.csv') and os.access('averageheight.csv', os.R_OK):
        print("File averageheight.csv Already exists \n")
    else:
        SaveAsCsv([ 'Country','Average Height Male','Average Weight Male','Average BMI Male','Average Height Female','Average Weight Female','Average BMI Female'])
    
    
    #Open Browser
    browser = webdriver.Chrome()
    try:
        getContent('https://www.worlddata.info/average-bodyheight.php')
    except Exception as e:
        print(e)
    finally:
        #Close browser
        browser.close()
    

    输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多