使用正则表达式爬取猫眼TOP100

使用正则表达式爬取猫眼TOP100

一、正则表达式:

         正则表达式用来匹配HTML标签有一个最大的优势,就是速度快。但是正则表达式的写法较为复杂,而且在页面结构发生改变的时候就会出问题。正则表达式通常用来过滤数据,提取我们想要的数据。

     对整合的页面数据进行分析,得到数据排名、电影封面、电影名字、主演、上映时间以及分数。

 

在返回的页面中找到需要的代码块

'''
1 霸王别姬

霸王别姬

主演:张国荣,张丰毅,巩俐

上映时间:1993-01-01

9.6

'''
分析得到正则表达式
paanter = re.compile(
            r'
.*?index-\d+">(\d+).*?data-src="(.*?)".*?(.*?).*?

(.*?)

.*?releasetime">(.*?)

.*?"integer">(.*?).*?fraction">(\d)', re.S)

二、requests请求

      1、导入requests模块

import requests

       2、设置请求头,使用get方法

                    设置请求头可以在自己浏览器的headers里面查找复制即可。

 

三、代码整体思路以及源代码

1、构建所有的url

2、发送请求获取页面内容

3、提取页面数据,保存数据

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

import requests,re,json


class SpiderMaoYan(object):
    '''猫眼电影top100爬虫'''

    def __init__(self):
        self.start_url = "http://maoyan.com/board/4?offset={}"
        self.headers ={
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
        }

    def get_url(self):
        #1.构建url列表
        self.url_list = [self.start_url.format(i*10) for i in range(10)]

    def send_request(self):
        #2.发送请求获取页面内容
        for url in self.url_list:
            response = requests.get(url=url,headers=self.headers)
            html = response.content.decode()
            #进行数据存储
            self.save_data(html)

    def save_data(self,html):
        #3.提取页面数据
        paanter = re.compile(
            r'
.*?index-\d+">(\d+).*?data-src="(.*?)".*?(.*?).*?

(.*?)

.*?releasetime">(.*?)

.*?"integer">(.*?).*?fraction">(\d)', re.S) data_list = paanter.findall(html) for item in data_list: data_dact = dict( number= item[0], image_url = item[1], name = item[2], actor = item[3].strip(), releasetime = item[4], score=item[5]+item[6], ) json_data = json.dumps(data_dact,ensure_ascii=False) with open('maoyan.json','a',encoding='utf8') as f: f.write(json_data+'\n') def run(self): #控制爬虫启动的函数 self.get_url() self.send_request() if __name__ == '__main__': maoyan = SpiderMaoYan() maoyan.run()

 

你可能感兴趣的:(python,爬虫,正则表达式)