如何创建类实例展示web scraper抓取的所有内容,解决仅输出最后一条的问题
问题根源
你的代码核心问题是productList.append(productEvent1)这行代码的缩进错误,处于for data in productInfo循环体之外:
- 循环过程中每次都会新生成
productEvent1实例覆盖上一次的结果 - 直到整个循环跑完,才会把最后一次生成的实例加入列表,最终列表里仅存1个元素,只能显示最后一项
修复方案
只需要把productList.append(productEvent1)这行代码调整缩进,放到for循环内部即可,同时建议修改遍历变量名避免和类名Product重名引发潜在问题。
修正后完整代码如下:
class Product: def __init__(self, productName, productRating): self.productName = productName self.productRating = productRating def showProduct(self): print("Product Name: " + self.productName) print("Rating: " + self.productRating) productList = [] productInfo = browser.find_elements_by_css_selector(".sg-col-12-of-20") for data in productInfo: textContent = data.get_attribute('innerHTML') soup = BeautifulSoup(textContent, features="lxml") rawString = soup.get_text().strip() clean = rawString.split('*') row1 = 0 row2 = 1 productName = clean[row1] productRating = clean[row2] productEvent1 = Product(productName, productRating) # 调整缩进放到循环内部,每次生成实例立即加入列表 productList.append(productEvent1) # 遍历变量名改为product,避免和类名Product重名 for product in productList: product.showProduct() print("\n")
内容的提问来源于stack exchange,提问作者pythonnub
相关产品推荐
相关产品推荐

