Python网络爬虫-抓取猫眼电影TOP100

本节将使用简单的requests库和正则表达式来获取猫眼电影网站TOP100的电影相关数据。

1. 目标

爬取猫眼电影TOP100的电影相关数据如电影名称、演员、评分等(https://maoyan.com/board/4),并保存到文件中。

2. 分析

Python网络爬虫-抓取猫眼电影TOP100_第1张图片

分析结果:

  • 请求url:https://maoyan.com/board/4
  • 请求方式:GET
  • 请求头:详见Request Headers

当我们点击页面最下方的第二页的时候,发现页面的请求url变为https://maoyan.com/board/4?offset=10,并且返回的是第二页的TOP电影,因此当我们请求其他的页面的时候只需将首页url参数进行相关变化即可。

3. 抓取首页

import requests

def get_one_page(url):
    # 根据源码分析,构造请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/52.0.2743.116 Safari/537.36'
    }
    response = requests.get(url, headers = headers)
    if response.status_code == 200:
        return response.text
    return None

url = 'http://maoyan.com/board/4'
html = get_one_page(url)
print(html)

这样运行后,就可以成功获取猫眼电影网站首页的的所有html代码,下面就需要根据我们所需要的数据,来解析html源代码

4. 解析源码

Python网络爬虫-抓取猫眼电影TOP100_第2张图片

在pycharm里面新建一个html文件,将首页的html结果贴进去,方便查看html结构。

正则匹配:

import re

# 解析源码
def parse_one_page(html):
    pattern1 = re.compile('
.*?board-index.*?>(.*?).*?(.*?).*?star.*?>(.*?)

' '.*?releasetime.*?>(.*?)

.*?integer.*?>(.*?).*?fraction.*?>(.*?)', re.S) items = re.findall(pattern1, html) for item in items: yield { 'index' : item[0], 'image' : item[1], 'title' : item[2].strip(), 'actor' : item[3].strip()[3:] if len(item[3]) > 3 else '', 'time' : item[4].strip()[5:] if len(item[4]) > 5 else '', 'score' : item[5].strip() + item[6].strip() }

5. 写入文件

import json

def write_to_file(content):
    with open('result.txt', 'a', encoding='utf-8') as f:
        print(type(json.dumps(content)))
        f.write(json.dumps(content, ensure_ascii=False) + '\n')

整体代码如下:

# -*- coding: utf-8 -*-
# @Time    : 2019-07-10 21:29
# @Author  : xudong
# @email   : [email protected]
# @Site    : 
# @File    : requestsTest.py
# @Software: PyCharm

import requests
import re
import json


def get_one_page(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/52.0.2743.116 Safari/537.36'
    }
    response = requests.get(url, headers = headers)
    if response.status_code == 200:
        return response.text
    return None


def get_top_movie(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)


def parse_one_page(html):
    pattern1 = re.compile('
.*?board-index.*?>(.*?).*?(.*?).*?star.*?>(.*?)

' '.*?releasetime.*?>(.*?)

.*?integer.*?>(.*?).*?fraction.*?>(.*?)', re.S) items = re.findall(pattern1, html) for item in items: yield { 'index' : item[0], 'image' : item[1], 'title' : item[2].strip(), 'actor' : item[3].strip()[3:] if len(item[3]) > 3 else '', 'time' : item[4].strip()[5:] if len(item[4]) > 5 else '', 'score' : item[5].strip() + item[6].strip() } def write_to_file(content): with open('result.txt', 'a', encoding='utf-8') as f: print(type(json.dumps(content))) f.write(json.dumps(content, ensure_ascii=False) + '\n') if __name__ == '__main__': for i in range(10): get_top_movie(i * 10)

项目的目录下生成result.txt文件,打开查看数据是否存在,如果存在,则目标达成。

Python网络爬虫-抓取猫眼电影TOP100_第3张图片

你可能感兴趣的:(Python网络爬虫-抓取猫眼电影TOP100)