前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >抓取猫眼电影排行

抓取猫眼电影排行

作者头像
云雀叫了一整天
发布2019-09-29 17:40:16
8880
发布2019-09-29 17:40:16
举报
文章被收录于专栏:Hi, PythonHi, Python

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_40313634/article/details/89502198

抓取猫眼电影排行

环境

技术:requests 爬取网页 + 正则表达式解析网页

编辑:sublime + python3

爬取网站:https://maoyan.com/board/4?offset=0

代码实现

代码语言:javascript
复制
import requests
import re    # 正则表达式的库
import json
import random
import os    # 操作系统文件操作的库

'''
功能:爬取单个网页信息的文本内容
入参:待爬取网页的网址
'''
def get_one_page(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'    # 假装这是用谷歌浏览器访问的,而不是爬虫爬取。
    }
    
    # 如果爬取成功,则返回爬取的网页文本信息;负责返回None。
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.text
    return None

'''
功能:爬取单个网页信息的二进制内容(图片、视频等)
入参:待爬取网页的网址
说明:response.content表示爬取的二进制内容;response.text表示爬取的文本内容。只是和get_one_page的返回值不一样,两个接口是可以合并的。
'''
def get_one_image(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
    }

    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.content
    return None

'''
功能:解析网页中的电影排名、图片、标题、演员、时间、评分等信息
入参:爬取的网页内容
'''
def parse_one_page(html):
    # 根据网页格式,结合待爬取的内容,得到的正则表达式
    pattern = re.compile('''<dd>.*?board-index.*?>(.*?)</i>.*?title="(.*?)".*?<img data-src="(.*?)".*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)<.*?class="integer">(.*?)<.*?"fraction">(.*?)<''', re.S)
    items = re.findall(pattern, html)
    # 查找到的信息存储在list里,将其改装成字典形式的
    for item in items:
        yield{
            'index':item[0],
            'title':item[1],
            'image':item[2],
            'actor':item[3].strip(),
            'time':item[4],
            'score':item[5] + item[6]
        }

def write_to_file(content):
    # 将爬取到的电影信息保存到文件里;将其中的图片下载下来,图片名取随机数字。
    with open('result.json', 'a', encoding='utf-8') as f:
        f.write(json.dumps(content, ensure_ascii=False) + ',\n')
    html = get_one_image(content['image'])
    fdir = './image'
    if not os.path.exists(fdir):
        os.mkdir(fdir)
    os.chdir(fdir)
    num = random.random()
    with open(str(num)+'.jpg', 'wb') as f:
        f.write(html)
    os.chdir('..')

def main(offset):
    # 根据偏移量,拼接每一个网页的网页地址,用于爬取数据。
    url = 'https://maoyan.com/board/4?offset=' + str(offset)
    html = get_one_page(url)
    for item in parse_one_page(html):
        write_to_file(item)

if __name__ == '__main__':
    # 循环获取网址偏移量。
    for i in range(10):
        main(offset = i*10 )

注意事项

1. 文件名不能和module名一样:负责会导致module里的方法找不到

2. 一定到对齐空格:编辑器设置成勇空格代替table;设置成空格可见。否则很容易引起格式问题。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 抓取猫眼电影排行
    • 环境
      • 技术:requests 爬取网页 + 正则表达式解析网页
      • 编辑:sublime + python3
      • 爬取网站:https://maoyan.com/board/4?offset=0
    • 代码实现
      • 注意事项
        • 1. 文件名不能和module名一样:负责会导致module里的方法找不到
        • 2. 一定到对齐空格:编辑器设置成勇空格代替table;设置成空格可见。否则很容易引起格式问题。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档