貓眼網基礎爬蟲-小白的第一次爬蟲經歷
阿新 • • 發佈:2019-01-23
以下為最近爬取貓眼TOP100榜單的程式碼:
import requests import re import json import datetime import time def get_one_page(url): #獲取網頁 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' } response = requests.get(url,headers=headers,) #此處一定要加一個headers=headers來模擬瀏覽器傳送請求 if response.status_code==200: return response.text return None # main() def parse_one_page(html): #使用正則表示式抓取網頁資訊 pattern = re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name.*?}">' '(.*?)</a>.*?">(.*?)</p>.*?">(.*?)</p>.*?integer">(.*?)</i>.*?">(.*?)</i>',re.S) items = re.findall(pattern,html) for item in items: yield { 'index':item[0], 'img':item[1], 'title':item[2], 'actor':item[3].strip()[3:] if len(item[3])>3 else '', 'time':item[4].strip()[5:] if len(item[4])>5 else '', 'score':item[5].strip()+item[6].strip() } #迭代生成器,相當於依次生成了一個列表 # dict = { # 'index':item[0], # 'img':item[1], # 'title':item[2], # 'actor':item[3].strip()[3:] if len(item[3])>3 else '', # 'time':item[4].strip()[5:] if len(item[4])>5 else '', # 'score':item[5].strip()+item[6].strip() # } # print(dict) # print(item) def write_to_file(context): with open('result.txt','a',encoding='utf-8') as f: #以附加模式開啟檔案result.txt f.write(json.dumps(context,ensure_ascii=False)+'\n'+str(datetime.datetime.now())) '''json.dumps,將檔案裝換為json格式寫入,ensure_ascii=False保證輸出的結果是中文形式而不是Unicode編碼, 末尾新增爬取時系統時間 ''' def main(offset): #設定形參offset url = 'http://maoyan.com/board/4?offset='+str(offset) html = get_one_page(url) # print(html) for item in parse_one_page(html): print(item) write_to_file(item) if __name__ == '__main__': for i in range(10): #傳入offset引數 main(offset = i*10) time.sleep(1)
程式碼參考至網路爬蟲開發實戰--崔慶才