php 爬虫抓取网页数据(本节使用Python爬虫抓取猫眼(电影网)影片信息(组图))

优采云 发布时间: 2021-10-05 15:21

  php 爬虫抓取网页数据(本节使用Python爬虫抓取猫眼(电影网)影片信息(组图))

  本节使用Python爬虫抓取猫眼电影TOP100榜单()电影信息,包括电影名称、上映时间、主演信息。

  在开始编写程序之前,首先确定页面类型(静态页面或动态页面),其次找出页面的url规则,最后通过分析网页元素的结构来确定正则表达式,从而提取网页信息。

  判断页面类型,右键查看页面源码,判断页面中是否存在要抓取的数据。通过浏览可知,所有要抓取的信息都存在于源代码中,因此页面输入为静态页面。如下:

  

<p class="name">我不是药神

  

主演:徐峥,周一围,王传君

  上映时间:2018-07-05

</p>

  确定url规则确定url规则,需要多浏览几页,才能总结出url规则,如下图:

  

第一页:https://maoyan.com/board/4?offset=0

第二页:https://maoyan.com/board/4?offset=10

第三页:https://maoyan.com/board/4?offset=20

...

第n页:https://maoyan.com/board/4?offset=(n-1)*10

  确定正则表达式通过分析网页元素的结构来确定正则表达式,如下图:

  

        <p class="name">我不是药神

       

  

                主演:徐峥,周一围,王传君

       

  上映时间:2018-07-05</p>

  使用 Chrome Developer Debugging Tools 确定要捕获的元素的结构。这样做的原因是可以避免正则表达式的冗余,提高编写正则表达式的速度。正则表达式如下:

  

.*?title="(.*?)".*?class="star">(.*?).*?releasetime">(.*?)</p></p>

  编写正则表达式时,使用(.*?)替换需要提取的信息,使用.*? 替换不需要的内容(包括元素标签)。编写爬虫程序 下面采用面向对象的方法编写爬虫程序,主要编写四个函数,分别是请求函数、分析函数、数据保存函数、主函数。

  

from urllib import request

import re

import time

import random

import csv

from ua_info import ua_list

# 定义一个爬虫类

class MaoyanSpider(object):

# 初始化

# 定义初始页面url

    def __init__(self):

        self.url = &#39;https://maoyan.com/board/4?offset={}&#39;

# 请求函数

    def get_html(self,url):

        headers = {&#39;User-Agent&#39;:random.choice(ua_list)}

        req = request.Request(url=url,headers=headers)

        res = request.urlopen(req)

        html = res.read().decode()

        # 直接调用解析函数

        self.parse_html(html)

# 解析函数

    def parse_html(self,html):

# 正则表达式

        re_bds = &#39;.*?title="(.*?)".*?<p class="star">(.*?).*?class="releasetime">(.*?)</p>&#39;

# 生成正则表达式对象

        pattern = re.compile(re_bds,re.S)

        # r_list: [(&#39;我不是药神&#39;,&#39;徐峥,周一围,王传君&#39;,&#39;2018-07-05&#39;),...] 列表元组

        r_list = pattern.findall(html)

        self.save_html(r_list)

    # 保存数据函数,使用python内置csv模块

    def save_html(self,r_list):

#生成文件对象

        with open(&#39;maoyan.csv&#39;,&#39;a&#39;,newline=&#39;&#39;,encoding="utf-8") as f:

#生成csv操作对象

            writer = csv.writer(f)

#整理数据

            for r in r_list:

                name = r[0].strip()

                star = r[1].strip()[3:]

                # 上映时间:2018-07-05

# 切片截取时间

                time = r[2].strip()[5:15]

                L = [name,star,time]

# 写入csv文件

                writer.writerow(L)

                print(name,time,star)

# 主函数

    def run(self):

#抓取第一页数据

        for offset in range(0,11,10):

            url = self.url.format(offset)

            self.get_html(url)

            #生成1-2之间的浮点数

            time.sleep(random.uniform(1,2))

# 以脚本方式启动

if __name__ == &#39;__main__&#39;:

    #捕捉异常错误

    try:

        spider = MaoyanSpider()

        spider.run()

    except Exception as e:

        print("错误:",e)

</p>

  输出结果:

  我不是药神 2018-07-05 徐峥、周以伟、王传君

  肖申克的救赎 1994-09-10 蒂姆·罗宾斯、摩根·弗里曼、鲍勃·冈顿

  绿皮书 2019-03-01 Vigo Mortensen, Mahsala Ali, Linda Cardrini

  海上钢琴家 2019-11-15 蒂姆·罗斯、比尔·纳恩、克兰伦斯·威廉姆斯三世

  小偷家族 2018-08-03 中川雅也、安藤樱、松冈墨鱼

  霸王别姬 1993-07-26 张国荣、张凤仪、巩俐

  哪吒魔童降临人间

  美丽人生 2020-01-03 罗伯托·贝尼尼、朱斯蒂诺·杜拉诺、塞尔吉奥·比尼·巴斯特里克

  这个杀手不太冷 1994-09-14 让·雷诺、加里·奥德曼、娜塔莉·波特曼

  2010-09-01 莱昂纳多·迪卡普里奥、渡边谦、约瑟夫·高登-莱维特

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线