python爬虫之正则表达式爬虫猫眼top100

本文介绍了一个使用Python和正则表达式爬取猫眼电影Top100榜单信息的方法。通过分析网页源代码,利用正则表达式匹配关键信息如排名、电影名称、演员阵容等,并将这些数据保存到本地文件中。

 主要代码及分析:

# -*- coding: utf-8 -*-
"""
Created on Thu Jul 12 11:12:16 2018
利用正则表达式爬虫猫眼top100
@author: Administrator
"""

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

import hashlib
import os

# 1、获取一页信息
def get_one_page(url):
    try:
        #headers = {'User-Agent': 'User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'}
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'}
        response = requests.get(url,headers=headers)  #利用requests解析url得到网页信息
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return None

# 2、解析一页信息
def parse_one_page(html):
    
    #pattern = re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name"><a.*?>'+'(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>.*?"</p>'+'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)
    pattern = re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name.*?a.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>.*?integer">(.*?)</i.*?fraction">(.*?)</i>.*?</dd>', re.S) #分析网页原代码,利用正则表达式编写需要的信息模式
     
    #pattern = re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)">.*?</a>.*?name">.*?a.*?>(.*?)</a>.*?)star">(.*?)</p>.*?releasetime">(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)
    #pattern = re.compile('<dd>.*?board-index.*?>(.*?)</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
        yield {
                'index': item[0],
                'image': item[1],
                'title': item[2],
                'actors': item[3].strip()[3:],
                'time': item[4].strip()[5:],
                'socre': item[5]+item[6]
                }
  
    #print(items)

# 3、写入文件
def wirte_to_file(content):
    with open('result.txt', 'a',encoding='utf-8') as f:
        f.write(json.dumps(content,ensure_ascii=False) + '\n') #.write() 对象必须是str,not dict,所以要用到json.dumps转换为json数据对象存储
        f.close()
    
def main(offset):
    url = 'http://maoyan.com/board/4?offset=' +str(offset)
    html = get_one_page(url)
    #print(html)
    #parse_one_page(html)
    for item in parse_one_page(html):
        #print(item)
        wirte_to_file(item)
#==============================================================================
#     r=requests.get('http://p3.pstatp.com/origin/pgc-image/15317459528784e9ce3883e')    
#     print(r.content)       
#==============================================================================
if __name__ == '__main__':
    for offset in range(10):  #根据网页翻页信息确定是offset变换
        main(offset*10)
        #break
    pool = Pool()  #引入进程池
    pool.map(main,[offset*10 for offset in range(10)])    
    

 

乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值