爬虫入门--爬取电影TOP250-附源码解析

news2024/11/15 9:16:13

爬取电影TOP250

  • 1 知识小课堂
    • 1.1 什么是爬虫
    • 1.2 爬虫能做什么
  • 2 代码解析
    • 2.1 运行环境
    • 2.2 过程解析
      • 2.2.1 第一步:引入两个模块
      • 2.2.2 找到网址
      • 2.2.3 拉去页面全内容
    • 2.2.4
    • 2.3 完整代码

1 知识小课堂

1.1 什么是爬虫

在这里插入图片描述

爬虫,也叫网络蜘蛛,如果把互联网比喻成一个蜘蛛网,那么蜘蛛就是在网上爬来爬去的蜘蛛。网络爬虫按照系统结构和实现细节,大体可以分为以下几种:

  1. 通用网络爬虫:这是一种基本的爬虫程序,通过请求URL地址,根据响应的内容进行解析和采集数据。例如,如果响应内容是HTML,它会分析DOM结构,进行DOM解析或者正则匹配;如果响应内容是XML/JSON数据,它会将数据转换为数据对象,然后对数据进行解析。
  2. 聚焦网络爬虫:这是一种针对特定主题和领域的爬虫程序,它只爬取和主题或领域相关的网页。例如,它可以爬取所有的新闻网站,或者所有的电商网站。
  3. 增量式网络爬虫:这种爬虫程序会定期爬取互联网上的新内容,而不是重新爬取所有的网页。
  4. 深层网络爬虫:这种爬虫程序会爬取互联网上隐藏较深的网页,例如需要登录、填写表单等才能访问的网页。

爬虫的主要作用是利用程序批量爬取网页上的公开信息,也就是前端显示的数据信息。因为这些信息是完全公开的,所以是合法的。其实就像浏览器一样,浏览器解析响应内容并渲染为页面,而爬虫解析响应内容采集想要的数据进行存储。

1.2 爬虫能做什么

爬虫能做的事情非常多,以下是详细介绍:
在这里插入图片描述

  1. 收集数据:爬虫程序可以用于收集大量数据。由于爬虫程序可以快速地爬取大量网页,因此可以用于收集各种类型的数据,例如新闻、社交媒体、产品价格、股票价格等等。这些数据可以用于各种分析,例如市场调研、商业分析、竞争分析等等。
  2. 调研:爬虫程序也可以用于调研。例如,可以爬取某个公司的网站,收集其产品信息、销售情况、客户反馈等等,以便更好地了解该公司的运营情况。此外,爬虫程序还可以用于监测网站的内容变化,以便及时了解该网站的最新动态。
  3. 刷流量和秒杀:爬虫程序还可以用于刷流量和秒杀。例如,可以在电商网站上爬取大量的商品信息,然后利用爬虫程序模拟用户的购买行为,从而增加该网站的流量和销售额。此外,爬虫程序还可以用于抢购限时优惠商品,例如秒杀活动等等。
  4. 自动化测试:爬虫程序也可以用于自动化测试。例如,可以利用爬虫程序模拟用户的操作行为,对网站进行各种测试,例如登录测试、表单提交测试、页面跳转测试等等。这样可以大大提高测试的效率和准确性。
  5. 搜索引擎优化:爬虫程序还可以用于搜索引擎优化。例如,可以利用爬虫程序收集竞争对手的网站信息,分析其关键词使用情况、页面结构等等,从而优化自己的网站,提高在搜索引擎中的排名。

总之,爬虫程序是一个非常强大的工具,可以用于各种领域和用途。但是需要注意的是,在使用爬虫程序时需要遵守网站的规则和法律法规,不得侵犯他人的权益和隐私。

2 代码解析

这里使用Python做爬虫,具体代码解析如下:

2.1 运行环境

  1. PyCharm
  2. Python3.10

2.2 过程解析

2.2.1 第一步:引入两个模块

requestsre

  • request 模块
    requests是一个很实用的Python HTTP客户端库,爬虫和测试服务器响应数据时经常会用到,它是python语言的第三方的库,专门用于发送HTTP请求,使用起来比urllib更简洁也更强大。
  • re 模块
    Python的re模块是Python内置的正则表达式处理模块,首先需要导入该模块,然后使用re模块中的函数和方法来进行正则表达式的匹配和处理。它提供了对正则表达式的支持,使得我们可以使用正则表达式来匹配和处理字符串。
    下面是一些常用的re模块函数和方法:

compile():该函数用于编译正则表达式,返回一个Pattern对象。

import re  
pattern = re.compile(r'\d+')

match():该方法用于从字符串的开头开始匹配正则表达式,如果匹配成功,返回一个匹配对象,否则返回None。

import re  
pattern = re.compile(r'\d+')  
match = pattern.match('123abc')  
if match:  
    print(match.group())  # 输出: 123

search():该方法用于在字符串中搜索正则表达式,如果匹配成功,返回一个匹配对象,否则返回None。它会从字符串的开头开始搜索。

import re  
pattern = re.compile(r'\d+')  
match = pattern.search('abc123def')  
if match:  
    print(match.group())  # 输出: 123

findall():该方法用于在字符串中查找所有与正则表达式匹配的子串,并返回一个包含所有匹配结果的列表。

import re  
pattern = re.compile(r'\d+')  
matches = pattern.findall('abc123def456ghi')  
print(matches)  # 输出: ['123', '456']

除了以上几个常用的函数和方法外,re模块还提供了其他一些功能,如替换、分割字符串等。具体可以参考Python官方文档或相关教程来了解更多内容。

2.2.2 找到网址

https://movie.douban.com/top250
在这里插入图片描述

2.2.3 拉去页面全内容

import requests
import re
url = 'https://movie.douban.com/top250'
response = requests.get(url)
print(response.text)

在这里插入图片描述
发现没反应,也没报错,这是为什么呢?因为网站有反扒机制,没有获取到网址,被浏览器拦截掉了。那该怎么办呢?小问题,骗过浏览器就行了。
加上一个headers,这行是通用的,可保存留着以后用。

headers = {
    'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/1'
}

整合到上面代码再请求一次。

import requests
import re
headers = {
    'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/1'
}
url = 'https://movie.douban.com/top250'
response = requests.get(url, headers=headers)
print(response.text)

运行之后,能发现网站页面全部拉去下来了,但是咱们不需要这么多信息,这就需要用到re库来筛选咱们需要的内容。
在这里插入图片描述

2.2.4

2.3 完整代码

import requests
import re
'''爬取豆瓣电影top20'''
def top250_crawer(url, sum):
    headers = {
        'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/1'
    }
    response = requests.get(url, headers=headers)
    # print(response.text)
    title = re.findall('<span class="title">(.*?)</span>', response.text, re.S)
    new_title = []
    for t in title:
        if '&nbsp;/&nbsp' not in t:
            new_title.append(t)
    data = re.findall('<br>(.*?)</p>', response.text, re.S)
    time = []
    country = []
    for str1 in data:
        str1 = str1.replace(' ', '')
        str1 = str1.replace('\n', '')
        time_data = str1.split('&nbsp;/&nbsp;')[0]
        country_data = str1.split('&nbsp;/&nbsp;')[1]
        time.append(time_data)
        country.append(country_data)
    for j in range(len(country)):
        sum += 1
        print(str(sum) + '.' + new_title[j] + ',' + country[j] + ',' + time[j])


url = 'https://movie.douban.com/top250'
sum = 0
'遍历10页数据,250条结果'
for a in range(10):
    if sum == 0:
        top250_crawer(url, sum)
        sum += 25
    else:
        page = '?start=' + str(sum) + '&filter='
        new_url = url + page
        top250_crawer(new_url, sum)
        sum += 25

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1323796.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

教你windows10如何原生支持预览IPhone拍摄的HEIC格式照片

HEIC是新出的一种图像格式&#xff0c;苹果的iOS 11更新后&#xff0c;iPhone 7及其后硬件&#xff0c;在拍摄照片时默认存储为HEIC格式。与JPG相比&#xff0c;它占用的空间更小&#xff0c;画质更加无损。HEIC格式照片支持iOS11及macOS High Sierra&#xff08;10.13&#xf…

Linux运维工程师面试题汇总

一、linux 1.linux系统启动流程 第一步&#xff1a;开机自检&#xff0c;加载BIOS第二步&#xff1a;读取&#xff2d;&#xff22;&#xff32;第三步&#xff1a;Boot Loader grub引导菜单第四步&#xff1a;加载kernel内核第五步&#xff1a;init进程依据inittab文件夹来…

好家伙,这个开源项目硬生生复制了一个 ChatGPT Plus 出来

最近有一款聊天机器人框架 Lobe Chat 火出了天际&#xff0c;它不仅支持多模态&#xff0c;支持语音会话&#xff0c;还有一个强大的 Function Calling 插件生态系统&#xff08;可以作为 ChatGPT 插件的平替&#xff09;。最重要的是&#xff0c;它的 UI 很漂亮&#xff0c;一…

电压放大器性能有什么特点

电压放大器是一种常见的电子设备&#xff0c;用于将输入信号的电压放大到所需的输出电压。它在各种领域中被广泛应用&#xff0c;如音频放大器、通信系统和控制系统等。 电压放大器的性能特点对于实际应用非常重要。下面将详细介绍电压放大器的几个关键性能特点。 增益&#xf…

Mac m系列芯片配置多版本的Java环境

本地已安装 JDK8&#xff0c;现在需要配置一下 JDK21&#xff0c;以支持未来的工作&#xff0c;同时实现动态切换 JDK 版本&#xff0c;顺便在此记录过程 ~ 话不多说 直接上货 下载 JAVA 21 Java Downloads | Oracle 中国 傻瓜式安装 成功后使用 “command 空格” 组合键&am…

VUE实现购物商城网站前端源码

文章目录 1.设计来源1.1 登录注册页面1.2 主界面1.3 列表界面1.4 详细界面1.5 购物车界面 2.源码2.1源码目录结构2.2源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/135054910 VUE实现购物商城网站前端源码&…

第80讲:GTID全局事务标识符的基本概念以及在Binlog中应用GTID

文章目录 1.GTID的基本概念1.1.为什么要引入GTID1.2.什么是GTID 2.开启GTID全局事务标识符的功能3.模拟产生Binlog日志观察开启GTID功能的区别3.1.模拟产生Binlog日志3.2.观察Binlog日志中的事件信息3.2.观察节点状态有什么变化3.3.观察Binlog日志会有什么变化 4.使用GTID来截取…

Compose——下拉刷新、上拉加载更多

效果图&#xff1a; 主要的代码为&#xff1a; package com.yaona.compose_list_shangla.swipeimport androidx.compose.foundation.Image import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundat…

Linux 操作系统(Vim)

vim 编译器&#xff08;相当于windows中记事本&#xff09; 当在终端窗口直接运行vim命令&#xff0c;会出现以下截图&#xff08;类似手册对vim编译器简单的介绍&#xff09;&#xff1a; vim提供三种基本工作模式&#xff1a; 命令模式(默认模式) 插入模式 末行模式 创建文本…

字节跳动的辉煌与波澜:兴衰成败的深度剖析

导言 字节跳动作为一家全球知名的科技公司&#xff0c;其在短视频领域的崛起备受瞩目。然而&#xff0c;随着时间的推移&#xff0c;公司也面临了一系列挑战。本文将深入研究字节跳动的兴衰成败&#xff0c;以及公司在发展过程中所面临的困境和成功之道。 1. 创业初期与初见成绩…

2023 英特尔On技术创新大会直播 |我感受到的AI魅力

文章目录 前言英特尔技术创新大会 的来历芯生无限 赋能AI创新后记 前言 近年来&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff09;的应用与发展呈现出爆发式增长的态势&#xff0c;成为科技领域最为引人注目的热门话题之一。作为全球领先的半导体公司&…

SpringIOC之AnnotatedElementKey

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

C语言——高精度乘法

一、引子 高精度乘法相较于高精度加法和减法有更多的不同&#xff0c;加法和减法是一位对应一位进行操作的&#xff0c;而乘法是一个数的每一位对另一个数的每一位进行操作&#xff0c;需要的计算步骤更多。 二、核心算法 void Calculate(int num1[], int num2[], int numres…

从零开始的Docker Desktop使用,Docker快速上手,Docker介绍和基础使用

目录 1 Docker简介和安装和基础配置1.1 Docker简介1.2 安装Docker Desktop1.3 换源1.4 Docker基础使用1.5 对Docker操作1.5.1 获取当时所有镜像(docker images)1.5.2 拉镜像(docker pull)1.5.3 删除镜像(docker rmi)1.5.4加载镜像(docker run) 1.6 使用交互式容器1.6.1 查看容器…

【2023 英特尔On技术创新大会直播 |我与英特尔的初次相遇】—— AIPC探索下一代的物联网时代

&#x1f308;个人主页: Aileen_0v0 &#x1f525;系列专栏:英特尔技术学习专栏 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 硅谷经济的发展与挑战 Intel开发者云与AI技术的应用 AI压缩技术的发展与应用 英特尔与阿里巴巴在AI领域的合作 AIPC时代的…

司铭宇老师:销售经理培训课程内容

销售经理是销售团队的核心领导&#xff0c;他们的能力和素质直接影响到整个团队的绩效。针对销售经理的培训课程内容应涵盖多个方面&#xff0c;旨在提升销售经理的领导力、团队管理能力、沟通技巧和市场分析能力。以下是一篇关于针对销售经理的培训课程内容的文章&#xff0c;…

逻辑回归代价函数

逻辑回归的代价函数通常使用交叉熵损失来定义。这种损失函数非常适合于二元分类问题。 本篇来推导一下逻辑回归的代价函数。 首先&#xff0c;我们在之前了解了逻辑回归的定义&#xff1a;逻辑回归模型是一种用于二元分类的模型&#xff0c;其预测值是一个介于0和1之间的概率…

ESP32 - Thonny+MicroPython+ESP32开发环境搭建

ThonnyMicroPythonESP32开发环境搭建 ①下载Thonny②下载MicroPython③下载对应驱动④烧录MicroPython到EPS32⑤Thonny与ESP32交互到此为止&#xff0c;我们就搭建好了整个流程 ①下载Thonny 链接&#xff1a;https://thonny.org/ ②下载MicroPython 链接&#xff1a;https:…

2023年第四届 “赣网杯” 网络安全大赛 gwb-web3 Write UP【PHP 临时函数名特性 + 绕过trim函数】

一、题目如下&#xff1a; 二、代码解读&#xff1a; 这段代码是一个简单的PHP脚本&#xff0c;它接受通过GET请求传递的两个参数&#xff1a;‘pass’和’func’&#xff1a; ① $password trim($_GET[pass] ?? );&#xff1a;从GET请求中获取名为’pass’的参数&#xff0…

0086-Java_四种进制介绍

文章目录 1 进制(程序员的基本功)1.1 进制介绍1.2 进制的转换(基本功)1.2.1 进制转换的介绍 1.3 二进制在运算中的说明1.4 原码、反码、补码(重点 难点) 1 进制(程序员的基本功) 1.1 进制介绍 对于整数&#xff0c;有四种表示方式&#xff1a; 二进制&#xff1a;0,1 &#x…