天天看點

Crawler:基于requests庫+json庫+40行代碼實作爬取貓眼榜單TOP100榜電影名稱主要資訊

輸出結果

Crawler:基于requests庫+json庫+40行代碼實作爬取貓眼榜單TOP100榜電影名稱主要資訊

實作代碼

# -*- coding: utf-8 -*-

#Py之Crawler:實實在在的40行代碼爬取貓眼榜單TOP100榜電影名稱主要資訊——Jason niu

import requests

import re

import json

from requests.exceptions import RequestException

from multiprocessing.dummy import Pool

headers = {'User-Agent':'Mozilla/5.0 '}

def get_one_page(url):

   try:

       res = requests.get(url,headers = headers)

       if res.status_code == 200:

           return res.text

       return None

   except RequestException:

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)

   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):

   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 = 'http://maoyan.com/board/4?offset=' + str(offset)

   html = get_one_page(url)

   for item in parse_one_page(html):

       print(item)

       write_to_file(item)

if __name__ == '__main__':

   p = Pool()

   p.map(main,[i*10 for i in range(10)])