10.Python 網路爬蟲原始碼
2020-12-12
331
相關文章
學習了幾天的 Python 入門,從完全不懂的零基礎開始,直到能完成一個簡單的功能,其實 Python 比其他語言更容易學,程式碼的確很簡潔易記,底下是一個簡單的 Python 網路爬蟲原始碼,執行時會先要求輸入一個正確的網址,然後模擬瀏覽器訪問,自動抓取該網址的原始碼,並存入以該網域加上目前日期時間為檔名的文字檔。
# 導入 urllib 庫 import urllib.request as req # 導入 random 庫 import random # 導入 time 庫 import time # 取得現在日期時間 now=time.strftime("%Y%m%d%H%M%S") # 要求輸入網址 url=input("請輸入完整網址(含https://):") # 從網址生成檔案名稱 fn=url.split("//") fileName=fn[1].split("/") fileName=fileName[0]+"-"+str(now)+".txt" # user_agent 列表 user_agent_list = ['Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36','Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36','Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36','Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36','Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36','Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36','Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36','Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36','Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36'] # 隨機選取一組 user_agent UA=random.choice(user_agent_list) # 建立Request物件,附加Headers資訊,偽裝成使用者 request=req.Request(url, headers={ "User-Agent":UA # "User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Mobile Safari/537.36" # PTT }) # 打開 url with req.urlopen(request) as response: # 將網頁原始碼存到變數data data=response.read().decode("utf-8") # print(data) # 將網頁原始碼變數data寫入文字檔 with open(fileName, mode="w", encoding="utf-8") as file: file.write(data)如果還要對抓取的原始碼進行處理,則需要安裝 beautifulsoup 套件pip install beautifulsoup4,beautifulsoup 套件的用法:
# 載入bs4套件解析HTML程式碼 import bs4 # 將整個HTML網頁解析後賦給root root=bs4.BeautifulSoup(data, "html.parser") # 取得網頁標題 print(root.title.string) # 尋找第一個class="title"的DIV titles=root.find("div", class_="title") # 所有的超連結 a_tags = root.find_all('a') for tag in a_tags: print(tag.string)# 輸出超連結的文字 print(tag.get('href'))# 取出節點屬性 # 同時搜尋多種標籤,搜尋所有超連結與粗體字 tags = root.find_all(["a", "b"]) # 限制搜尋結果數量 tags = root.find_all(["a", "b"], limit=2) # 尋找所有class="title"的DIV titles=root.find_all("div", class_="title") for title in titles: if title.a != None: # 如果是連結則輸出 print(title.a) # 只輸出標題文字 # print(title.a.string) # 只輸出標題文字點擊圖片可以放大檢視

如果你對10.Python 網路爬蟲原始碼有任何問題請到討論區發帖。