【问题标题】:Multiple variable assignement in try block Python3尝试块Python中的多变量赋值
【发布时间】:2021-03-20 07:34:45
【问题描述】:

目前正尝试从网站抓取一些数据,我恢复了我需要存储的变量。例如:日期、作者、喜欢、不喜欢、浏览量...

我正在使用 BeautifulSoup4,这是我目前所处的状态:

            try:
                author = soup.find("div", {"class":"publish_info"}).find("a").text
                date = soup.find("div", {"class":"created_at"}).find("div").text
                views = soup.find("span", {"class":"views"}).text
                likes = soup.find("button", {"class":"wrapper__text_button auto__app_page_body_upvote_button upvote_button_component"}).find("span", {"class":"count label"}).text
                dislikes = soup.find("button", {"class":"wrapper__text_button auto__app_page_body_downvote_button downvote_button_component"}).find("span", {"class":"count label"}).text
                df.loc[len(df)] = [title] + [author] + [date] + [views] + [likes] + [dislikes] + [nb] + [url] + [docurl]
            except:
                df.loc[len(df)] = [title] + ['unk'] + ['unk'] + ['unk'] + ['unk'] + ['unk'] + [nb] + [url] + [docurl]

我尝试通过查看我想要的 div 来获取 BS4 的所有变量,但如果一个失败,我不会得到任何其他变量。 有时,网站上只有一个不存在,但其他存在。这意味着我无法恢复所有变量。 我想要得到所有东西的想法是为每一个变量做一个 try 块,但这也太可怕了。我应该使用什么?目标是从网站中获取尽可能多的变量,以便使用 pandas 将它们输入到 DataFrame (df) 中。

【问题讨论】:

    标签: python-3.x optimization


    【解决方案1】:

    如果没有找到该元素,则返回 None。因此,与其使用 try-catch 块,不如只检查None。我会写类似的东西

    try:
        df.loc[len(df)] = []
        author = soup.find("div", {"class":"publish_info"})
        if (author): df.loc[len(df)] += [author.find("a").text] #or however you add an element to df
        #do the same for the other elements
    except:
        #do stuff if the author.find("a") failed (probably due to change in markupof the website
    

    在这种情况下,您将不得不为每个元素编写两行代码,但编写更多代码本身并不会更糟。如果它重用可重用的代码,你应该只尝试使用更少的代码。因此,如果您真的想尽可能少地保持行数,您应该存储您正在搜索的模式并编写一个将模式作为输入并将结果添加到您的数组的方法。

    【讨论】:

      【解决方案2】:

      我将向您推荐 Corey Schafer 关于网络抓取的视频,他会处理这个问题。他可以比我更好地解释分配 https://youtu.be/ng2o98k983k

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-16
        • 2014-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多