iT邦幫忙

2023 iThome 鐵人賽

DAY 9
1
自我挑戰組

待業不頹廢系列 第 9

Day 9 . 欸 今天要幹嘛 - 關於 enumerate()

  • 分享至 

  • xImage
  •  

行前提要

Day 6.欸 今天要幹嘛 - 優化、整理中學習的時候,
優化程式碼過程只有稍微帶過enumerate() 迭代過程中同時獲取元素的索引和值
後來一些因素讓我需要再整理、改變寫法enumerate()

問題如下圖,雖然已經標明頁數等等很明確資訊,但如果可以有個分隔線,絕對會在視覺上很有幫助。
https://ithelp.ithome.com.tw/upload/images/20230924/20150181KHL7A9KExg.png

利用 print("-" * 40) 就可以產生 40個 dash

authors_per_page = 10  
if idx % authors_per_page == 0:
  print("-" * 40) 

idx(索引值)除以 authors_per_page(每頁作者數目),如果餘數為 0,就下分隔線 print("-" * 40)
結果發線切的位子不對!噢不
https://ithelp.ithome.com.tw/upload/images/20230924/20150181FIWURkNsMz.png
後來發現是前面程式碼在處理enumerate() 的時候,
是利用 print(f"Page {page}, Index {idx + 1 }. Author: {author.text}")
然後 idx + 1 會跑掉座標,這時就追朔到本身enumerate()的使用方式。

enumerate()

enumerate 具有舉出、計算、列舉的意思
enumerate() 是一個內建函數

用於將可迭代對象(例如列表、元組或字符串)的元素與它們的索引配對。
它通常在迴圈中使用,以便同時獲取元素和它們的索引值。
enumerate(iterable, start=0)
iterable:要枚舉(遍歷)的可迭代對象,例如列表、元組、字符串等。
start(可自訂):設定索引的起始值。默認情況下,起始值為 0。

小結

回到要修改的程式碼上,只要是當初使用enumerate()沒有設定起始點,默認 0。
在出書的處理方式為
修改這行⬇️⬇️⬇️
print(f"Page {page}, Index {idx + 1 }. Author: {author.text}")

應該要變成這樣⬇️⬇️⬇️
print(f"Page {page}, Index {idx}. Author: {author.text}")

附上最終效果及程式碼
https://ithelp.ithome.com.tw/upload/images/20230924/201501819TPfns2IGA.png

import requests
from bs4 import BeautifulSoup
base_url = "https://astro.5xruby.tw/testimony/"

num_pages = 7
import time

for page in range(1,num_pages + 1):
    if page == 1:
        page_url = base_url  
    else:
         page_url = f"{base_url}page/{page}"  
    response = requests.get(page_url)
    response.encoding = "utf-8"
    
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, "html.parser")
    
        author_infos = soup.find_all("h4", class_="is-author")
        authors_per_page = 10
        for idx, author in enumerate(author_infos,1):
            print(f"Page {page}, Index {idx}. Author: {author.text}")
            if idx % authors_per_page == 0:
                print("-" * 40)  
        
    else:
        print(f"Failed to retrieve page {page_url}")
    time.sleep(1)


上一篇
Day 8 . 欸 今天要幹嘛 - 錯誤訊息 AttributeError
下一篇
Day 10 . 欸 今天要幹嘛 - python 動態爬蟲的前置處理
系列文
待業不頹廢30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言