【Python_urllib学习笔记(四)】基于urllib和re,爬取豆瓣电影新片榜

基于urllib和re,爬取豆瓣电影新片榜

前言

此篇文章中介绍如何使用urllib库和re模块,爬取豆瓣电影新片榜。

正文

1、梳理需求

  1. 百度搜索-豆瓣电影-排行榜-豆瓣新片榜
  2. 提取数据为:电影名称、上映时间主演

2、静态数据抓取实现步骤

  1. 查看所抓取数据在响应内容中是否存在
    右键->查看网页源码->搜索所抓数据关键字,确定抓取的内容是静态数据
    确定抓取的内容是静态数据

  2. 查找并分析url地址规律
    https://movie.douban.com/chart,可以直接使用
    url地址

  3. 编写正则表达式
    <p class="ul.*?</p>.*?<tr class="item">.*?title="(.*?)">.*?<p class="pl">(.*?)</p>.*?</table>
    如何编写请参考【Python学习笔记(四)】正则表达式re模块的使用,需要爬取的数据改写为(.*?)

  4. 发请求获取响应内容
    使用urllib.request 模块

  5. 解析响应内容,终端打印

3、根据静态数据抓取的步骤,定义爬虫类的结构

class XxxSpiderdef __init__(self):
        ”“” 定义爬虫常用变量 “”“
    def get_html(self, url):
        ”“” 获取相应内容函数 “”“
    def parse_html(self):
        ”“” 解析提取数据的函数 “”“
    def handle_html(self, list):
        ”“” 数据处理函数 “”“
    def run(self):
        ”“” 程序入口函数 “”“

4、具体代码的实现

class DoubanSpider:
    """
    猫眼电影国内热榜前10名抓取
    """

    def __init__(self):
        self.url = 'https://movie.douban.com/chart' # 定义url地址
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'} # 重构请求头
        self.times = 0 # 初始化爬取数据次数

    def get_html(self, url):
        """
        function:  获取相应内容函数
              in:  url:url地址
             out:  html:通过url地址获取的响应内容
          return:  None
          others:  Gets Corresponding Content Function
        """
        req = request.Request(url=url, headers=self.headers) # 构造请求对象
        res = request.urlopen(req) # 获取响应对象
        html = res.read().decode() # 获取响应内容
        self.parse_html(html)  # 直接调用解析函数进行数据提取

    def parse_html(self, html):
        """
        function:  解析提取数据的函数
              in:  None
             out:  None
          return:  int >0 ok, <0 some wrong
          others:  None
        """
        regex = '<p class="ul.*?</p>.*?<tr class="item">.*?title="(.*?)">.*?<p class="pl">(.*?)</p>.*?</table>' # 定义正则表达式
        pattern = re.compile(regex, re.S) # 创建正则表达式的编译对象
        r_list = pattern.findall(html) # 使用re.findall()方法
        self.handle_html(r_list) # 直接调用数据处理函数

    def handle_html(self, list):
        """
        function:  数据处理函数
              in:  list
             out:  None
          return:  terminal print
          others:  Data Handle Function
        """
        dic = {}  # 初始化字典
        for r in list:
            dic["name"] = r[0].strip() # 字典name赋值,去空格
            dic["time&star"] = r[1].strip() # 字典time&star赋值,去空格
            self.times += 1 # 每执行一次 +1
            print(dic) # 终端打印字典
        print("数据爬取成功,共爬取{}条数据".format(self.times)) # 终端打印提示信息

    def run(self):
        """
        function:  程序入口函数
              in:  None
             out:  None
          return:  None
          others:  Entry Function
        """
        url = self.url # url地址
        self.get_html(url) # 调用get_html()方法


if __name__ == '__main__':
    spider = DoubanSpider() # 爬虫类实例化
    spider.run() # 执行入口函数

5、代码的实现效果

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

禾戊之昂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值