1. 程式人生 > >Requests+正則表示式爬取貓眼TOP100電影

Requests+正則表示式爬取貓眼TOP100電影

需要著重學習的地方:
(1)爬取分頁資料時,url連結的構建
(2)儲存json格式資料到檔案,中文顯示問題
(3)執行緒池的使用
(4)正則表示式的寫法

import requests
from requests.exceptions import RequestException
import re
import json
from multiprocessing import Pool

# 抓取單頁內容
def get_one_page(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            
return response.text return None except RequestException: return None # 正則表示式分析 def parse_one_page(html): pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a' +'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>
' +'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S) items = re.findall(pattern,html) # print(items) for item in items: yield { 'index':item[0], 'image':item[1], 'title':item[2],
'actor':item[3].strip()[3:], 'time':item[4].strip()[5:], 'score':item[5] + item[6] } # 儲存至檔案 def write_to_file(content): # 注意:把json資料儲存到檔案中顯示出中文 with open('result.txt','a',encoding='utf-8') as f: f.write(json.dumps(content,ensure_ascii=False) + '\n') f.close() def main(offset): url = 'https://maoyan.com/board/4?offset=' + str(offset) html = get_one_page(url) parse_one_page(html) for item in parse_one_page(html): print(item) write_to_file(item) if __name__ == '__main__': # 開啟迴圈,抓取多頁資料 # for i in range(10): # main(i*10) # 使用執行緒池 pool = Pool() pool.map(main,[i*10 for i in range(10)])