进击的爬虫-001-正则表达式实现猫眼电影top100排名爬取

news/2024/7/19 12:32:52 标签: 爬虫, python

  大家好, 我是眼睛儿,从今天起,我会每周和大家分享一些学习爬虫相关的知识,.欢迎各位大佬的敦促和指导,也欢迎对爬虫感兴趣的小伙伴来交流,共同进步,废话不多说,上代码:

 

 用python语言从繁多而复杂的数据中提取出有用的数据是相当繁琐的, 正则表达式为我们提供了一种简便的方法.想要做好爬虫, 第一步便是熟练使用正则表达式和re模块

正则表达式:

  1. 概述: 是一种对字符串操作的逻辑, 就是用一种事先定义好的一些特殊字符,及特定字符的组合,组成一个规则字符串,这个规则字符串表示 对字符串的一种过滤逻辑
  2. 字符组: 在同一个位置上可能出现的各种字符组成了一个字符组,在正则表达式中用[] 来表示
    1. [0-9]  所有数字
    2. [a-z]  [A-Z]   [0-9a-fA-F]
  3. 字符:
    . ---- 匹配除换行符意外的任意字符
    \w ----匹配任意数字,字母,下划线
    \s ----匹配任意的空白符
    \d ----匹配数字
    \n ----匹配一个换行符
    \t----匹配一个制表符 \b----匹配一个单词的结尾 ^ ----匹配字符串的开始 &----匹配字符串的结尾 \W ----匹配任意非数字,字母,下划线 \D----匹配非数字 \S----匹配非空白符 a|b ----匹配字符a或字符b ()匹配括号内的表达式,也表示一个组 [...] ----匹配字符组中的字符 [^...] ---匹配除了字符中字符以外的任意字符

     

  4. 量词
    * 重复零次或多次
    + 出现一次或多次
    ? 重复0次或多次
    {n} 出现n次
    {n,m}出现n到m次
    {n,}出现n次或跟多次

     

  5. 惰性匹配
    1. 正则默认都是尽量多的匹配, 加上?就是尽量少的匹配
      *? 重复任意次,但尽可能少重复
      +? 重复1次或更多次,但尽可能少重复
      ?? 重复0次或1次,但尽可能少重复
      {n,m}? 重复n到m次,但尽可能少重复
      {n,}? 重复n次以上,但尽可能少重复
      
      . 是任意字符
      * 是取 0 至 无限长度
      ? 是非贪婪模式。
      何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:
      .*?x
      
      就是取前面任意长度的字符,直到一个x出现

       

  6. 转义符 \

 

利用re模块实现猫眼电影top100排名爬取

import requests
import re

def get_html(url,data): ret = requests.get(url, params=data) return ret.text # re_before = re.compile('<dd>\s*.*\s*.*?title="(.*?)"') # movies = re.finditer(movie_re, ret) #找出当前页面十个电影,得到一个可迭代对象 # movie_obj = next(movies).group() #通过next方法拿到第一个电影 # print(movie_obj) # # movie_name = re.findall('s="name".*?title="(.*?)"', movie_obj) #拿到第一个电影的电影名 # print(movie_name[0]) # # movie_star = re.findall('s="star">\s*(.*?)\s*<', movie_obj) #拿到电影主演 # print(movie_star[0]) # # movie_releasetime = re.search('s="releasetime">上映时间:(?P<time>.*?)<', movie_obj) #拿到电影时间 # print(movie_releasetime.group('time')) def get_info(html_res): movie_re = re.compile('<dd>[\d\D]*?</dd>') movies = re.finditer(movie_re, html_res) for movie_obj in movies: movie_obj = movie_obj.group() movie_name = re.findall('s="name".*?title="(.*?)"', movie_obj)[0] movie_star = re.findall('s="star">\s*(.*?)\s*<', movie_obj)[0] movie_releasetime = re.search('s="releasetime">上映时间:(?P<time>.*?)<', movie_obj).group('time') movieinfo = f'电影名:{movie_name}, {movie_star}, 上映时间:{movie_releasetime}' print(movieinfo) url = 'https://maoyan.com/board/4' data = { 'offset':0 } for i in range(10): data['offset'] = i * 10 html_res = get_html(url, data) get_info(html_res)

 

转载于:https://www.cnblogs.com/zhangjian0092/p/11215815.html


http://www.niftyadmin.cn/n/904279.html

相关文章

CACHE简述

CACHE简述 1. 为什么要使用CACHE CPU速度越来越快处理的数据量越来越大&#xff0c;需要更大的内存内存速度越快&#xff0c;价格越高&#xff0c;大容量存储器&#xff0c;一般价格低廉&#xff0c;但是速度慢。2. 局部原则 Cache减少内存存取时间是利用内存存取具有局部特…

九丶Web框架之Tornado

概述 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像web.py 或者 Google 的 webapp&#xff0c;不过为了能有效利用非阻塞式服务器环境&#xff0c;这个 Web 框架还包含了一些相关的有用工具 和优化。 Tornado 和…

快速由PCI迁移到PCIe

快速由PCI迁移到PCIe 1. 首先要搞清楚两者的一些对应关系 PCI的并行总线 --> PCIe的串行总线 HOST还是那个HOST HOST桥 --> RC PCI Agent --> EP PCI桥 --> Switch 其它诸如配置空间、可预取/不可预取、配置空间的ID寻址、内存及IO空间的地址寻址&#xf…

最大公约数算法

1、欧几里德算法和扩展欧几里德算法 欧几里德算法 欧几里德算法又称辗转相除法&#xff0c;用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理&#xff1a; 定理&#xff1a;gcd(a,b) gcd(b,a mod b) 证明&#xff1a;a可以表示成a kb r&#xff0c;则r a mod …

CCD和CMOS图像传感器的快门

CCD和CMOS图像传感器的快门 1. 介绍 在数字相机里&#xff0c;通过CCD或CMOS图像传感器里的光二极管将景物的光转换为电信号形成图像&#xff0c;传感器感光元件产生的电信号大小取决于光强度和光照时间&#xff08;积分时间&#xff09;&#xff0c;因此&#xff0c;数字相机…

自动视频跟踪系统的解决方案

自动视频跟踪系统的解决方案 作者&#xff1a;上海凯视力成信息科技有限公司 转载请标明出处 Casevision公司为自动视频跟踪系统提供了多种解决方案。 1&#xff1a;标清视频的自动跟踪解决方案 围绕经典的自动视频跟踪模块AVT21&#xff0c;Casevision提供了如下解决方案&a…

System. ThreadStaticAttribute

今天发现了这个很酷的东西&#xff0c;可以用来标记静态字段。就我的理解&#xff0c;被标记为ThreadStaticAttribute的静态字段的语义将会变化&#xff0c;从一个正常的内存地址变成TLS中的一个存储位置。就当它做访问TLS的一种快捷方式。不同的ThreadStatic静态字段并不会冲突…

基于陀螺进行运动检测的电子稳像方案

基于陀螺进行运动检测的电子稳像方案 1&#xff0e;设计任务 高清视频电子稳像 2. 设计思路 有时我们没法避免摄像机安装的位置处的机械震动&#xff08;如车、飞机、船等&#xff09;&#xff0c;从而获得的视频也出现严重的抖动&#xff0c;这严重妨碍了我们的监视、分析、…