簡體   English   中英

嘗試塊Python3中的多變量賦值

[英]Multiple variable assignement in try block Python3

目前試圖從網站上抓取一些數據,我恢復了我需要存儲的變量。 例如:日期、作者、喜歡、不喜歡、查看...

我正在使用 BeautifulSoup4,這是我目前所在的 state:

            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)。

如果未找到元素,則 Find 返回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

在這種情況下,您將不得不為每個元素編寫兩行代碼,但編寫更多代碼本身並不會更糟。 如果它重用可重用的代碼,你應該只嘗試使用更少的代碼。 因此,如果您真的想盡可能少地保持行數,您應該存儲您正在搜索的模式並編寫一個將模式作為輸入並將結果添加到您的數組的方法。

我將向您推薦 Corey Schafer 關於 web 抓取的視頻,他處理了這個問題。 他能比我解釋得更好https://youtu.be/ng2o98k983k

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM