本次任務為:
把搜下來的網頁進行聚類,將聚類結果顯示給用戶。用戶可以選擇其中一個類,標位關注,類的關鍵詞作為主體,用戶就可以跟蹤這個主題,了解主題。
deadline:11.09
任務解析:
基本任務:將網頁進行聚類,分別根據其類別進行存檔,圖片放到相應的文件夾,文本放到相應的文件中。
提升任務:對網頁進行持續跟蹤,將符合條件的文件,持續下載。
編譯環境綜述:
- 操作系統:win 10 專業版
- 編譯環境: Python 3.6
- 編輯環境:Spyder
如果想省事,可以從睿思直接下載Anaconda Navigator,安裝后,可以直接用,封裝好的。
話不多說,先貼代碼:
################################################# # 網頁爬蟲 # Email : jtailong@163.com ################################################# import re import time import urllib.request import requests from bs4 import BeautifulSoup #添加網頁 url = 'https://www.douban.com/' #將圖片抓取,並打包 req = urllib.request.urlopen(url) data = req.read().decode('utf-8') match = re.compile("data-origin=\"(.+?\.jpg)") #j記錄圖片信息 f = open('D:\\P\圖片下載記錄.txt', 'w+') for sj in match.findall(data): try: f.write(sj) except: print("fail") f.write('\n') f.close() f1 = open('D:\\P\Pic_information.txt', 'r+') #開始抓取網頁圖片 x = 0 for lj in f1.readlines(): img = urllib.request.urlretrieve(lj, 'D:/P/%s.jpg' % x) x += 1 f1.close() #將網頁上所有的文字信息,記錄到TXT文件當中 r = requests.get(url) soup = BeautifulSoup(r.text, 'html.parser') content = soup.text print (content) file = open('D:\\P\網頁上所有文字信息.txt', 'w', encoding='utf-8') file.write(content) file.close()
編譯效果對比:
上圖為:原網頁;下圖為:經過抓取,可以在文件夾中看到信息。
更新:
通過這次編程,我對爬蟲的理解就是:
- 通過網絡傳輸協議(http),將服務器上的文本,文字等下載到本地
- 爬蟲解析(正則表達式)
- 將類別重新分配到你的文件夾(圖片保存,文本保存到TXT)當中的一個過程
如果想要系統的學習,或者更好的理解代碼,請參考
http://cuiqingcai.com/1052.html
獻丑了。
方法二:
通過跟同學交流,發下,第一個代碼的魯棒性差一些,再次運行會出現錯誤。這里,給出第二種編譯方式
import urllib.request,socket,re,sys,os import re import time import urllib.request import requests from bs4 import BeautifulSoup #定義文件保存路徑 targetPath = "D:\\P" def saveFile(path): #檢測當前路徑的有效性 if not os.path.isdir(targetPath): os.mkdir(targetPath) #設置每個圖片的路徑 pos = path.rindex('/') t = os.path.join(targetPath,path[pos+1:]) return t #用if __name__ == '__main__'來判斷是否是在直接運行該.py文件 # 網址,向網站請求數據,並返回到本地,將這些數據讀取到data中 url = "https://www.douban.com/" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/51.0.2704.63 Safari/537.36' } #上面這行,是用來偽裝成瀏覽器,防止被網站diss req = urllib.request.Request(url=url, headers=headers) res = urllib.request.urlopen(req) data = res.read() #對讀取到本地的數據進行解析,通過后綴,匹配相應的圖片 並保存 for link,t in set(re.findall(r'(https:[^s]*?(jpg|png|gif))', str(data))): print(link) try: urllib.request.urlretrieve(link,saveFile(link)) except: print('失敗') #將網站的文本信息解析,並保存到相應的TXT文本當中 r = requests.get(url) soup = BeautifulSoup(r.text, 'html.parser') content = soup.text print (content) file = open('D:\\P\網頁上所有文字信息.txt', 'w', encoding='utf-8') file.write(content) file.close()
這次效果為:
其中txt文件的效果為:
歡迎大家討論。