我有以下代码,使用BeautifulSoup和Python对与某些冠状病毒统计信息有关的内容进行webscrape(然后算出一个百分比):
url = "https://www.worldometers.info/coronavirus/"
req = requests.get(url)
bsObj = BeautifulSoup(req.text, "html.parser")
data = bsObj.find_all("div",class_ = "maincounter-number")
totalcases=data[0].text.strip()
recovered=data[2].text.strip()
print(totalcases+3)
percentagerecovered=recovered/totalcases*100
我遇到的问题是为所恢复的可变百分比生成所需的值。
我想使用整数,但是上面的方法不起作用,所以我尝试了:
percentagecovered=int(recovered)/int(totalcases)*100 but it gave this error:
File "E:\webscraper\webscraper\webscraper.py", line 17, in <module>
percentagerecovered=int(recovered)/int(totalcases)*100
ValueError: invalid literal for int() with base 10: '6,175,537'
但是,当我移除演员表,并尝试打印以查看它给出了另一个错误的值时,我正在努力理解。
我将其更改为:
totalcases=data[0].text.strip()
recovered=data[2].text.strip()
print(totalcases+3)
percentagerecovered=recovered/totalcases*100
错误
File "webscraper.py", line 16, in <module>
print(totalcases+3)
TypeError: can only concatenate str (not "int") to str
我只是想使用split方法获取那些字符串,然后假设它们是整数,然后使用它们。
当前,当我通过它们(不进行强制转换)时,它在页面上不显示任何内容...但是当我强制执行将其转换为int时,我得到了错误。我在做什么错了?
我也尝试过:
totalcases=int(totalcases)
recovered=int(recovered)
但这会产生另一个错误:
File "webscraper.py", line 17, in <module>
totalcases=int(totalcases)
ValueError: invalid literal for int() with base 10: '11,018,642'
我还尝试了以下操作:(用逗号分隔),如下面注释中所建议:
totalcases=data[0].text.strip()
recovered=data[2].text.strip()
totalcases=totalcases.strip(",")
totalcases=int(totalcases)
recovered=recovered.strip(",")
recovered=int(recovered)
percentagerecovered=recovered/totalcases*100
错误:
totalcases = int(总计) ValueError:int()以10为底的无效文字:“ 11,018,684”
我注意到像下面的函数这样的解决方案(我还没有尝试过),但是对于我想做的事情,它们似乎不必要地复杂。最好,最简单/最优雅的解决方案是什么?
这似乎正确,但仍然会产生错误:
int(totalcases.replace(',', ''))
int(recovered.replace(',', ''))
错误:
File "webscraper.py", line 25, in <module>
percentagerecovered=recovered/totalcases*100
TypeError: unsupported operand type(s) for /: 'str' and 'str'
答案 0 :(得分:2)
我写了这个小函数,可以为您返回一个数字,因此您可以增加它或做任何想要的事
def str_to_int(text=None):
if text == None:
print('no text')
else:
text = text.split(',')
num = int(''.join(text))
return num
例如,您的总箱数为:'11,018,642',因此您可以这样做:
totalcases = str_to_int('11,018,642')
现在您可以执行totalcases*100
或其他任何操作
答案 1 :(得分:1)
另一种简单的方法:
totalcases= int(data[0].text.strip().replace(',',''))
recovered = int(data[2].text.strip().replace(',',''))