【问题标题】:Missing data after scraping抓取后丢失数据
【发布时间】:2020-12-11 09:43:16
【问题描述】:

我正在尝试从 IMDB 电影评分前 250 名的 Google 数据中获取数据。

movie_list = top_250_imdb["Title"]

base_url = 'https://www.google.com/search?q='

streaming = []
title = []
price = []

for movie in movie_list:
    query_url = (f'{base_url}{movie}')

    browser.visit(query_url)

    time.sleep(5)

    soup = bs(browser.html, 'lxml')


    results1 = soup.find_all('div', class_ = 'ellip bclEt')

    for result in results1:
        streaming.append(result.text)
        title.append(movie.capitalize())

    results2 = soup.find_all('div', class_ = 'ellip rsj3fb')

    for result in results2:
        price.append(result.text)

抓取后,我得到了len(streaming)len(title) = 1297 但是len(price) = 1296

我无法创建 DataFrame,因为它们的长度不同。

出了什么问题,我该如何解决?

【问题讨论】:

  • Google 搜索结果页上的streamingprice 是什么?

标签: python pandas web-scraping beautifulsoup splinter


【解决方案1】:

我认为价格中的值之一是 NaN...我知道如何解决,但您可能会得到帮助...

尝试创建仅包含价格的数据框...然后使用 fillna 函数填充 NaN 值,然后将该价格数据框与您的主数据框连接...

有点长,但可能有用

【讨论】:

    【解决方案2】:

    这里只需要稍作改动即可监控缺失值...

        results2 = soup.find_all('div', class_ = 'ellip rsj3fb')
    
        for result in results2:
            if result is not None :
                p = None #u can even replace with 0 but for our convinience it is None here    
            else :
                p = result.text
            price.append(p)
    

    现在您可以检查名为“价格”的列表的长度,并且还将添加缺失的计数

    您可以在将值附加到“流”和“标题”列表时添加这段代码,这样如果遇到任何缺失值,它会用提供的值替换而不是放弃该操作。

    只需将上面的代码替换为下面的代码,看看缩进就可以了。

    movie_list = top_250_imdb["Title"]
    
    base_url = 'https://www.google.com/search?q='
    
    streaming = []
    title = []
    price = []
    
    for movie in movie_list:
        query_url = (f'{base_url}{movie}')
    
        browser.visit(query_url)
    
        time.sleep(5)
    
        soup = bs(browser.html, 'lxml')
    
    
        results1 = soup.find_all('div', class_ = 'ellip bclEt')
    
        for result in results1:
            streaming.append(result.text)
            title.append(movie.capitalize())
    
        results2 = soup.find_all('div', class_ = 'ellip rsj3fb')
    
        for result in results2:
            if result is not None :
                p = None #u can even replace with 0 but for our convinience it is None here    
            else :
                p = result.text
            price.append(p)
    

    希望这会有所帮助..

    【讨论】:

    • 谢谢,我试过了,但没有用。比如电影《西部往事》,在 CBS 有,但是没有定价,所以我没办法为 CBS 刮价格。我尝试使用“尝试除外”,但它也没有给出任何错误,所以它不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    相关资源
    最近更新 更多