首页 > 解决方案 > 从 Python Webscraping 结果中删除特定字符串

问题描述

我是网络抓取的新手,目前正在尝试这段代码

import requests
import bs4
from bs4 import BeautifulSoup
import pandas as pd
import time

page = requests.get("https://leeweebrothers.com/our-food/lunch-boxes/#")
soup = BeautifulSoup(page.text, "html.parser")

names = soup.find_all('h2') #name of food
rest = soup.find_all('span', {'class' : 'amount'}) # price of food

for div, a in zip(names, rest):
    print(div.text, a.text) # print name / price in same line

它工作得很好,除了我将在下面的链接中显示的一个问题

在同一行中打印 2 个 for 循环的结果

在字符串“HONEY GLAZED CHICKEN WING”旁边是 0.00 美元,这是由于网站上的购物车应用程序返回的异常值(它共享 span class='amount')。

我将如何删除此字符串并“上移”其他价格,以便它们现在符合并与食物名称相对应

编辑:下面的示例输出

 Line1: HONEY GLAZED CHICKEN WING $0.00
 Line2: CRISPY CHICKEN LUNCH BOX
 Line3:                                                    $5.00
 Line4: BREADED FISH LUNCH BOX
 Line5:                                                    $5.00

我想要的输出是这样的:

 Line1: HONEY GLAZED CHICKEN WING                          $5.00
 Line2: CRISPY CHICKEN LUNCH BOX                           $5.00

我正在寻找一种解决方案,该解决方案可以消除异常的 0.00 美元并将其余价格上调

标签: pythonweb-scraping

解决方案


我想你可能问错了问题。您可以消除 0.00 美元的异常值,但您的价格结果仍然与名称不匹配。

为了确保您的价格和名称列表的顺序相同,因此它们匹配,首先搜索包含它们的 div 可能更容易:

import requests
import bs4
from bs4 import BeautifulSoup
import pandas as pd
import time

page = requests.get("https://leeweebrothers.com/our-food/lunch-boxes/#")
soup = BeautifulSoup(page.text, "html.parser")

# all the divs that held the foods had this same style
divs = soup.find_all('div', {'style': 'max-height:580px;'})
names_and_prices = {
    # name: price
    div.find('h2').text: div.find('span', {'class': 'amount'}).text
    for div in divs
}
for name, price in names_and_prices.items():
    print(name, price)

推荐阅读