爬取豆瓣电影TOP100

article/2025/10/1 18:41:59

爬虫

首先我们在网站中打开我们要爬的网站
“http://maoyan.com/board/4”
这就是豆瓣高分电影前100的榜单.

然后我们点击f12,再刷新一次,就可以看到网页的基本信息了。
这时候我们来看一下第一部‘我不是药神中的代码信息。’
在这里插入图片描述
一个dd节点为一个电影的全部信息。
我们用正则表达式的方法去分析上面的代码,首先是class为board-index的排名信息。
我们用正则表达式应该是这么去写

<dd>.*?board-index.*?>(.*?)</i>

那我们接着分析第二部分的图片,我们看图片的节点一共有两点:两个img节点。
我们发现第二个img节点属性为data-src为图片链接,所以我们就分析这部分。
我们用正则表达式应该是这么去写

.*?data.src="(.*?)"

以此类推我们接着分析剩下所有的信息。
第三部分为电影名,电影名在p节点的class=name下面。
我们用正则表达式应该这么写

.*?name".*?a.*?>(.*?)</a>

那么接下来我们就写一个完整的信息:分别记录了排名,照片,名字,演员,时间,评分。

<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name.*?a.*?>(.*?)</a>.*?star".*?>(.*?)</p>.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>

那我们就可以正式一步一步去做一份爬取任务了:
1.导入库:

import json
import requests
from requests.exceptions import RequestException
import re
import time   #time库是用来延时访问,某些网站设置了反爬,不能快速连续访问该网站

2.抓取首页:

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

3.正则提取:

def parse_one_page(html):pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'+ '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'+ '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)items = re.findall(pattern, html)for item in items:yield {'index': item[0],'image': item[1],'title': item[2],'actor': item[3].strip()[3:],'time': item[4].strip()[5:],'score': item[5] + item[6]}

4.写入文件:

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

5.分页爬取:
在这里插入图片描述
我们可以看到,一页有10个电影。那我们爬取TOP100,则需要看10页的电影内容。
在这里插入图片描述
当我们切到下一页的时候,我们发现网站名称后多了offset=10.第三页的时候则是offest=20.
那我们就明白了,我们可以根据offest来对TOP100进行分页爬虫。

def main(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)
if __name__ == '__main__':for i in range(10):main(offset=i * 10)time.sleep(1) #猫眼多了反爬虫,所以我们要延时等待。

完整代码:

import json
import requests
from requests.exceptions import RequestException
import re
import timedef get_one_page(url):try:headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'}response = requests.get(url, headers=headers)if response.status_code == 200:return response.textreturn Noneexcept RequestException:return Nonedef parse_one_page(html):pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'+ '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'+ '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)items = re.findall(pattern, html)for item in items:yield {'index': item[0],'image': item[1],'title': item[2],'actor': item[3].strip()[3:],'time': item[4].strip()[5:],'score': item[5] + item[6]}def write_to_file(content):with open('result.txt', 'a', encoding='utf-8') as f:f.write(json.dumps(content, ensure_ascii=False) + '\n')def main(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)if __name__ == '__main__':for i in range(10):main(offset=i * 10)time.sleep(1)

如果爬取过程中发现只爬取到了前10或者前20的内容就停止了。
那我们回到TOP100的网页,发现了他让我们进行图片的验证(反爬虫)
由于我们现在还没学到解决这类问题的方法。
所以我们自己进入网页验证完之后,再运行一次就能成功了。


http://chatgpt.dhexx.cn/article/jGQZbvbj.shtml

相关文章

2020 年软件设计师考试上午真题

2020 年软件设计师考试上午真题答案解析 1、在程序执行过程中&#xff0c;高速缓存(Cache) 与主存间的地址映射由&#xff08;D &#xff09;。 A、操作系统进行管理 B、存储管理软件进行管理 C、程序员自行安排 D、硬件自动完成 解:CACHE与主存地址映射由硬件完成…

基于LLVM的编译原理简明教程 (1) - 写编译器越来越容易了

基于LLVM的编译原理简明教程 (1) - 写编译器越来越容易了 进入21世纪&#xff0c;新的编程语言如雨后春笋一样不停地冒出来。需求当然是重要的驱动力量&#xff0c;但是在其中起了重要作用的就是工具链的改善。 2000年&#xff0c;UIUC的Chris Lattner主持开发了一套称为LLVM…

基于LLVM的编译原理简明教程: 写一个自己的编译器​

LLVM简介 进入21世纪&#xff0c;新的编程语言如雨后春笋一样不停地冒出来。需求当然是重要的驱动力量&#xff0c;但是在其中起了重要作用的就是工具链的改善。 2000年&#xff0c;UIUC的Chris Lattner主持开发了一套称为LLVM(Low Level Virtual Machine)的编译器工具库套件。…

【极富参考价值!】第1章 ClickHouse 简介《ClickHouse 企业级大数据分析引擎实战》...

《ClickHouse 企业级大数据分析引擎实战》全书目录 目录 第1章 ClickHouse 简介 第2章 MergeTree 表存储引擎 第3章 ClickHouse SQL 执行原理 第4章 分布式的 ClickHouse:集群、分片、副本 第5章 项目实战:Spring Boot 集成 ClickHouse 第6章 ClickHouse 函数 第7章 集成外部…

32.3-5带有通配符的匹配(自动机)

功能 这个程序可以判断一个带有通配符*的模式串是否在文本串中存在,没有记录位置信息,当然,想记录也是可以的 样例输入: abccbacbababc ab*bab*c 样例输出: 1 思路 对于样例输入,有限自动机如图所示: 我们把每个通配符隔开的字串看做独立的,在其上运行KMP算法的comput_s…

自己动手写编译器:代码实现正则表达式到NFA状态机

在编译器开发中有两个非常重要的工具名为lex和yacc&#xff0c;他们是编译器的生成器。本质上我们不需要一行行去完成编译器的代码&#xff0c;只需要借助这两个工具&#xff0c;同时制定好词法解析和语法解析的规则后&#xff0c;这两个工具就会自动帮我们把代码生成&#xff…

mac搭建网站服务器,Mac上搭建Web服务器--Apache

局域网搭建 Web 服务器测试环境,因为Mac OS X 自带了 Apache 和 PHP 环境,我们只需要简单的启动它就行了。 1.命令:sudo apachectl start Apache服务器默认的web根目录在:/Library/WebServer/Documents Apache的配置文件在:/etc/apache2 相关命令: 停止 Apache:sudo apac…

aText for Mac(打字加速器)

aText作为一款文字效率的工具&#xff0c;对于文字工作者来说这款软件的目的是为了减少你在文字输入的过程当中的重复性&#xff0c;这款试用版本能够让你体验到一些较为基础的功能。 aText下载安装教程 镜像包下载完成后打开&#xff0c;双击.pkg按照安装引导器进行安装即可&a…

共享文件夹无法打开——服务器存储空间不足,无法处理此命令

原文地址为&#xff1a; 共享文件夹无法打开——服务器存储空间不足&#xff0c;无法处理此命令 共享某个文件夹后在网上邻居打开它&#xff0c;提示&#xff1a;“服务器存储空间不足&#xff0c;无法处理此命令”&#xff0c;如下图&#xff1a; 查看系统日志显示&#xff1…

彻底解决win10 docker desktop镜像过大导致“C盘存储空间不足”的问题。

彻底解决win10 docker desktop镜像过大导致“C盘存储空间不足”的问题。 win10安装docker只需要双击安装包&#xff0c;真正实现了傻瓜式安装&#xff0c;这一点真的十分方便&#xff01;不过用了义端时间docker后&#xff0c;突然有一天我注意到C盘原本充裕的空间容量&#x…

mysql数据库空间不足_mysql空间不足怎么解决?

磁盘空间不足&#xff0c;使用du命令察看 du -h --max-depth1 当前目录下占空间比较大的是104个mysql-bin.00000X 和ibdata1。 mysql数据目录下有大量的mysql-bin.00000X文件&#xff0c;这些文件是做什么的呢&#xff1f; 这是数据库的操作日志&#xff0c;例如UPDATE一个表&a…

ubuntu提示根目录存储空间不足的解决办法

因为每次使用系统都会产生大量的日志文件&#xff0c;如果没有设置自动清理日志文件或者分区较小&#xff0c;日志文件在一段时间的堆积后就会导致存储空间不足&#xff0c;所以需要清除日志文件。以下是清除步骤&#xff1a; 1、切换为超级用户 su2、查看日志文件大小 du &am…

ES存储空间不足导致索引read-only解决

在es存储数据的时候报了这个错&#xff0c;然后网上都说是磁盘不够了&#xff0c;一看果然是磁盘剩余不足5个G了。。。 解决方案 1- 最简单的也就是清理下磁盘空间。 2- 更改elasticsearch.yml配置文件。在配置文件后加上&#xff1a; cluster.routing.allocation.disk.wate…

如何解决IIS配置报错问题:存储空间不足?

如何解决IIS配置报错问题&#xff1a;存储空间不足 存储空间不足&#xff1b;并导致IIS安装失败 服务器说明&#xff1a; 当前服务器为阿里云服务器操作系统&#xff1a;windows services 2008 R2基本配置&#xff1a; 1G内存 20G40G存储盘服务器尚未安装配置IIS **“存储空间…

解决群晖 “由于系统可用存储空间不足,您将无法登录“ 的问题

最近打开群晖提醒 由于系统可用存储空间不足,您将无法登录。经过上网查询终于解决了问题&#xff0c;现记录如下&#xff1a; 问题总结 利用命令定位到哪个文件夹异常过大&#xff0c;删除之即可具体步骤 利用SSH进入群晖管理界面&#xff0c;利用sudo -i 拿到管理权限 利用…

计算机管理 存储空间不足,Win7系统提示“存储空间不足,无法处理此命令”怎么办?...

最近有Win7系统用户反映&#xff0c;打开某些程序的时候&#xff0c;出现提示“存储空间不足&#xff0c;无法处理此命令”&#xff0c;导致程序打开失败&#xff0c;这让用户非常苦恼。那么&#xff0c;Win7系统提示“存储空间不足&#xff0c;无法处理此命令”怎么办呢&#…

32计算机内存不足,Win7 32位提示存储空间不足无法处理此命令

近日&#xff0c;有不少用户反映说在win7 32位系统电脑上玩游戏或者打开程序的时候&#xff0c;遇到了无法运行的错误或者弹出错误信息“存储空间不足无法处理此命令”&#xff0c;导致无法运行游戏或者程序&#xff0c;为什么会出现这样的问题呢&#xff0c;下面就针对这个问题…

远程桌面登录提示存储空间不足

远程桌面登录提示存储空间不足 云服务器windows2012远程桌面登录提示存储空间不足&#xff0c;无法完成此操作&#xff1b;点击确定按钮后回到登录界面&#xff1b; 使用控制台模式登录到服务器后端&#xff0c;查看RDP的登录权限&#xff0c;发现是本地系统账号&#xff1b;…

打开共享文件提示服务器空间不足,访问网络共享报告“服务器存储空间不足,无法处理此命令”...

访问网络共享报告“服务器存储空间不足,无法处理此命令” 万华数据 有些计算机在共享一个文件夹后,从网络上另一台计算机访问这个共享文件夹会出现“服务器存储空间不足,无法处理此命令”错误信息,更奇怪的是有时访问C盘的共享文件夹会出现这个问题,而访问其它盘的共享文件…

局域网访问文件提示服务器内存不足,“服务器存储空间不足”的问题

局域网客户机通过网上邻居访问一台以windows 2003作为文件共享服务器的时候&#xff0c;出现“无法访问&#xff0c;您可能没有权限使用网络资源&#xff0c;请与管理员联系查明权限&#xff0c;服务器存储空间不足&#xff0c;无法处理此命令”的错误提示。 这个时候这台服务器…