为了账号安全,请及时绑定邮箱和手机立即绑定

总结从 BeautifulSoup 导入的所有整数

总结从 BeautifulSoup 导入的所有整数

米琪卡哇伊 2021-09-11 13:35:11
我正在尝试使用 BeautifulSoup 用 python 进行网络抓取。我一直在尝试添加所有导入的整数,但似乎找不到办法。这是代码:from bs4 import BeautifulSoupimport requestssource = requests.get('https://www.ebay.com/sch/i.html?_odkw=iphone+xr&_osacat=0&_from=R40&_trksid=m570.l1313&_nkw=iphone+xr+128+gb&_sacat=0').textsoup =BeautifulSoup(source, 'lxml')for post in soup.find_all("li",{"class" : "s-item"}):   price = post.find_all("span", {"class" : "s-item__price"})[0].text   price2 = price.strip( '$' )   price3 = price2.replace(",", "")   price4 =price3[0:5]   price5 = float(price4)   price6 = round(price5)   print(price6)它打印:1130122611301100870171433108965294472857574061073088276053066095875058873073064575475075036190933275175074655077383188875092293992748568012508881117650775600基本上我想要做的是将所有这些加起来为一个数字。
查看完整描述

2 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

首先,您可以将循环中的所有步骤重写为一个单独的函数:


def get_price(post):

       price = post.find_all("span", {"class" : "s-item__price"})[0].text

       price2 = price.strip( '$' )

       price3 = price2.replace(",", "")

       price4 =price3[0:5]

       price5 = float(price4)

       price6 = round(price5)

       return price6

现在您拥有的循环可以重写为


for post in soup.find_all("li",{"class" : "s-item"}):

    print(get_price(post))

你问的重点是什么?好吧,Python 的内置sum函数有一个接口,可以让你传入这样的生成器:


sum(get_price(post) for post in soup.find_all("li",{"class" : "s-item"}))

或等效地:


sum(map(get_price, soup.find_all("li",{"class" : "s-item"})))

您可以将函数重写为单行函数:


def get_price(post):

       return round(float(post.find_all("span", {"class" : "s-item__price"})[0].text.strip('$').replace(',', '')[:5]))

这不会使您的代码更清晰,但您可以使用等效表达式避免在此处编写单独的函数:


sum(round(float(post.find_all("span", {"class" : "s-item__price"})[0].text.strip('$').replace(',', '')[:5])) for post in soup.find_all("li",{"class" : "s-item"}))



查看完整回答
反对 回复 2021-09-11
  • 2 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信