【问题标题】:How to apply my function to all list items "li class" on page in eBay Scraper如何将我的功能应用于 eBay Scraper 页面上的所有列表项“li class”
【发布时间】:2021-04-05 13:48:58
【问题描述】:

python 和 BeautifulSoup 的新手。

我无法将我的函数应用于此 eBay 已售商品页面上的所有列表商品(li 类)。

每个售出的listing都显示为一个li类。下面是URL。

https://www.ebay.com/sch/i.html?_from=R40&_nkw=2017+patrick+mahomes+psa+10+auto&_sacat=0&LH_TitleDesc=0&LH_Complete=1&LH_Sold=1&_ipg=100

这是我的代码...

def rookie_card_info(url):
    r = requests.get(url)
    
    soup = bs(r.content)
    
    contents = soup.prettify()
    
    rookie_card_list = soup.find_all(class_="srp-results srp-list clearfix")
    
    #How to to apply to all list items
    
    display_image = soup.find(class_="s-item__image-img")
    img_src = display_image.get('src')
    test = Image(img_src)
    display(test)
    print(img_src)

    display_card = soup.find(class_="s-item__link")
    card_title = display_card.find("h3")
    get_card_title = card_title.text
    print(get_card_title)

    display_sold_price = soup.find(class_="s-item__detail s-item__detail--primary")
    card_sold_price = display_sold_price.find("span")
    sold_price_text = card_sold_price.find(class_="POSITIVE")
    print(sold_price_text.string)

    display_sold_date = soup.find(class_="s-item__ended-date s-item__endedDate")
    card_sold_date = display_sold_date.string
    print(card_sold_date)
    
rookie_card_info("https://www.ebay.com/sch/i.html?_from=R40&_nkw=2017+patrick+mahomes+psa+10+auto&_sacat=0&LH_TitleDesc=0&LH_Complete=1&LH_Sold=1&_ipg=100")

我编写了以下代码行,试图识别页面上包含已售结果页面上所有 li class 对象的特定类(大约有 65 个结果)。

rookie_card_list = soup.find_all(class_="srp-results srp-list clearfix")

当我从这行代码打印 html 时。它包含我需要为我的数据解析的所有正确 html。

我要解析的数据是图片网址、标题、销售日期和销售价格。

我得到了正确的数据,如下所示...

https://i.ebayimg.com/thumbs/images/g/2BwAAOSwETVfzAFT/s-l225.jpg
2017 Armed & Dangerous Patrick Mahomes Auto MINT Condition PSA 10? Rookie Signed
$2,500.00
Dec-27 12:46

但是,我只从页面上的第一个“li 类”列表中获取数据。而不是所有 65 个结果的数据。

问题:

如何获取所有 65 个结果的数据。我需要一个可以应用于不同 URL 的“即插即用”解决方案。

【问题讨论】:

    标签: python html python-3.x web-scraping beautifulsoup


    【解决方案1】:

    我不会为你写完整的答案。而是指点一下:

    1. 获取卡片列表:

      rookie_card_list = soup.select('.s-item')

    然后遍历其中的每个项目:

    for current_card in rookie_card_list:
    
    1. 重写你的函数来处理current_card while looping 即有一个单独的函数生成的汤然后有另一个函数专门接收你当前的卡并从该卡返回你想要的项目列表(也许然后添加到一个整体的全局列表中,你稍后会转向一个数据框?)。添加任何错误处理,例如如果没有找到要返回什么?

    例如

    def items_from_current_card(current_card):
        card_title = current_card.find("h3").text
        # etc
        return [card_title, ......]
    
    1. 恐怕很少有即插即用答案与网络抓取。您需要制定一个足够通用的解决方案来处理尽可能多的页面。

    【讨论】:

    • 非常感谢。我最终创建了 3 个不同的函数,分别是“get_data(url)”、“parse(soup)”和“output(productstlist)”。我能够解析我想从第二个函数收集的所有数据,并将我的数据与第三个函数一起保存为 CSV。
    猜你喜欢
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多