一個完整的爬蟲入門程序
阿新 • • 發佈:2018-09-10
art 處理請求 爬蟲入門 自己 循環 header headers 規則 對象 直接先說準備工作:
(1)清楚爬蟲工作的流程:
(1)清楚爬蟲工作的流程:
向頁面發出請求---------獲取請求文件---------處理請求文件--------抽取自己想要的內容
(2)要用到的函數與庫
主要是requests庫: 負責去向頁面發出請求
beautiSoup4庫:對抓取的頁面文檔進行解析
re庫:匹配所需字段
可能存在的問題:
(1)編碼的問題:註意頁面中,以及讀寫的編碼
(2)循環讀取頁面時註意頁面訪問地址的變化情況
完整代碼:
import requests from urllib3 import request import re class Spider: def __init__(self): # 初始化起始頁位置 self.page = 1 #爬取開關,如果為True繼續爬取 self.switch = True def loadPage(self): """ 作用:下載頁面 """ print("正在下載數據....") #這個頁面的下載規則 url = "http://www.neihan8.com/article/list_5_" + str(self.page) + ".html" headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"} response = requests.get(url, headers = headers) #處理編碼 response.encoding=response.apparent_encoding #獲取每頁的HTML源碼字符串 html = response.text #創建正則表達式規則對象,匹配每頁裏的段子內容,re.S 表示匹配全部字符串內容 pattern = re.compile(‘<div\sclass="f18 mb20">(.*?)</div>‘, re.S) #將正則匹配對象應用到html源碼字符串裏,返回這個頁面裏的所有段子的列表 content_list = pattern.findall(html) #調用dealPage() 處理段子裏的雜七雜八 self.dealPage(content_list) def dealPage(self, content_list): """ 處理每頁的段子 content_list : 每頁的段子列表集合 """ for item in content_list: # 將集合裏的每個段子按個處理,替換掉無用數據 item = item.replace("<p>","").replace("</p>", "").replace("<br>", "") #處理完後調用writePage() 將每個段子寫入文件內 self.writePage(item) def writePage(self, item): """ 把每條段子逐個寫入文件裏 item: 處理後的每條段子 """ #寫入文件內 print("正在寫入數據....") #編碼的處理 with open(r"duanzi1.txt", "a",encoding="utf-8") as f: f.write(item) def startWork(self): """ 控制爬蟲運行 """ #循環執行,直到 self.switch == False while self.switch: # 用戶確定爬取的次數 self.loadPage() command =input("如果繼續爬取,請按回車(退出輸入quit)") if command == "quit": # 如果停止爬取,則輸入 quit self.switch = False #每次循環,page頁碼自增 self.page += 1 print("謝謝使用!") if __name__ == "__main__": duanziSpider = Spider() duanziSpider.startWork()
一個完整的爬蟲入門程序