用Requests+正则表达式爬取猫眼电影

# -*- coding: utf-8 -*-
#! /usr/bin/env python 
import requests
import urllib
from requests.exceptions import RequestException  #异常代码模块
import sys 
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       #状态码其他结果返回None
    except RequestException: #弄一个错误的总类就好,子类太多这里不考虑
        return None

def pare_one_page(html):
    pattern =re.compile('
.*?board-index.*?>(\d+).*?data-src="(.*?)".*?name"> +'.*?>(.*?).*?star">(.*?)

.*?releasetime">(.*?)

'
+'.*?integer">(.*?).*?fraction">(.*?).*?
'
, 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): with open('result.txt','a',encoding='utf-8') as f: #创建文本 f.write(json.dumps(content,ensure_ascii=False)+'\n') #json.dumps将字典转换成字符串 f.close() def main(offset): url = 'http://maoyan.com/board/4?offset='+ str(offset) non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd) #解决网站中 python自身编码不能映射奇怪的符号 page = urllib.request.urlopen(url) #模块urllib发送HTTP请求,打开网站 html = page.read().decode().translate(non_bmp_map) #返回得到的网站,并解码网站中奇怪的符号 for item in pare_one_page(html): #正则表达式调用 print(item) write_to_file(item) #调用写入文本 #print(html) if __name__ == '__main__': for i in range (10): main(i*10) #单线程遍历 #pool=Pool() #pool.map(main,[i*10 for i in range(10)]) #多线程完成,出现乱码

你可能感兴趣的:(功能类型,python,学习)