总结从 BeautifulSoup 导入的所有整数

我正在尝试使用 BeautifulSoup 用 python 进行网络抓取。我一直在尝试添加所有导入的整数,但似乎找不到办法。


这是代码:


from bs4 import BeautifulSoup

import requests

source = 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').text

soup =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)

它打印:


1130

1226

1130

1100

870

17

1433

1089

652

944

728

575

740

610

730

882

760

530

660

958

750

588

730

730

645

754

750

750

361

909

332

751

750

746

550

773

831

888

750

922

939

927

485

680

1250

888

1117

650

775

600

基本上我想要做的是将所有这些加起来为一个数字。


米琪卡哇伊
浏览 153回答 2
2回答

心有法竹

首先,您可以将循环中的所有步骤重写为一个单独的函数: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"}))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python