当前位置: 首页 > news >正文

【python】使用代理IP爬取猫眼电影专业评分数据

前言 

我们为什么需要使用IP代理服务?

在编写爬虫程序的过程中,IP封锁无疑是一个常见且棘手的问题。尽管网络上存在大量的免费IP代理网站,但其质量往往参差不齐,令人堪忧。许多代理IP的延迟过高,严重影响了爬虫的工作效率;更糟糕的是,其中不乏大量已经失效的代理IP,使用这些IP不仅无法绕过封锁,反而可能使爬虫陷入更深的困境。

本篇文章中介绍一下如何使用Python的Requests库和BeautifulSoup库来抓取猫眼电影网站上的专业评分数据。

正文

1、导包

import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt

Requests库是一个简单易用的HTTP库,用于发送网络请求和获取响应数据。BeautifulSoup库则是一个用于解析HTML和XML文档的Python库,可以帮助我们从网页中提取所需的数据。

2、设置代理

设置代理和代理信息可以在这里获取:IP代理服务

# 设置代理信息
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "your_proxy_user"
proxyPass = "your_proxy_password"# 设置代理
proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {"host": proxyHost,"port": proxyPort,"user": proxyUser,"pass": proxyPass,
}
proxies = {"http": proxyMeta,"https": proxyMeta,
}

3、设置请求头

请求头的获取方式可以参考这篇文章:爬虫入门学习(三)请求headers处理-CSDN博客

当然不用自己的也行哈哈 


# 设置请求头,模拟浏览器访问
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

4、发起请求

# 发起请求,获取网页内容
url = 'https://maoyan.com/films?showType=3'
response = requests.get(url, headers=headers, proxies=proxies)  # 添加proxies参数
soup = BeautifulSoup(response.text, 'html.parser')

5、解析网页内容

# 解析网页内容,提取专业评分数据
movie_names = []
professional_scores = []for movie in soup.find_all('div', attrs={'class': 'movie-item film-channel'}):movie_name = movie.find('span', attrs={'class': 'name'}).textscore = movie.find('span', attrs={'class': 'integer'}).text + movie.find('span', attrs={'class': 'fraction'}).textmovie_names.append(movie_name)professional_scores.append(score)# 将数据存储到DataFrame中
data = {'电影名称': movie_names, '专业评分': professional_scores}
df = pd.DataFrame(data)

6、数据可视化

# 数据可视化
plt.figure(figsize=(10, 6))
plt.bar(df['电影名称'], df['专业评分'], color='skyblue')
plt.title('猫眼电影专业评分排行榜')
plt.xlabel('电影名称')
plt.ylabel('专业评分')
plt.xticks(rotation=45)
plt.show()

上述代码片段展示了如何运用Python中的Requests库与BeautifulSoup库,精准地抓取猫眼电影网站上的专业评分数据。随后,通过Pandas库对数据进行整理与分析,再借助Matplotlib库进行可视化呈现。这一数据采集、处理与可视化的完整流程。

完整代码如下:

# 导入所需的库
import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt# 设置代理信息
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "your_proxy_user"
proxyPass = "your_proxy_password"# 设置代理
proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {"host": proxyHost,"port": proxyPort,"user": proxyUser,"pass": proxyPass,
}
proxies = {"http": proxyMeta,"https": proxyMeta,
}# 设置请求头,模拟浏览器访问
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}# 发起请求,获取网页内容
url = 'https://maoyan.com/films?showType=3'
response = requests.get(url, headers=headers, proxies=proxies)  # 添加proxies参数
soup = BeautifulSoup(response.text, 'html.parser')# 解析网页内容,提取专业评分数据
movie_names = []
professional_scores = []for movie in soup.find_all('div', attrs={'class': 'movie-item film-channel'}):movie_name = movie.find('span', attrs={'class': 'name'}).textscore = movie.find('span', attrs={'class': 'integer'}).text + movie.find('span', attrs={'class': 'fraction'}).textmovie_names.append(movie_name)professional_scores.append(score)# 将数据存储到DataFrame中
data = {'电影名称': movie_names, '专业评分': professional_scores}
df = pd.DataFrame(data)# 数据可视化
plt.figure(figsize=(10, 6))
plt.bar(df['电影名称'], df['专业评分'], color='skyblue')
plt.title('猫眼电影专业评分排行榜')
plt.xlabel('电影名称')
plt.ylabel('专业评分')
plt.xticks(rotation=45)
plt.show()

当然,如果你自己要使用的话得用自己专属的IP代理信息,而且具体情况得具体分析。如果你买了代理IP的话,不会的直接问客服,直接给你服务的服服帖帖的😎。

小结

本文详细阐述了如何利用Python爬虫技术从猫眼电影网站获取专业评分数据的过程,并通过代码实例展示了从设置代理、发起请求、解析网页内容到数据提取与可视化的完整流程。

首先,文章介绍了必要的库导入,包括requests用于发起网络请求,BeautifulSoup用于解析HTML页面,pandas用于数据处理,以及matplotlib用于数据可视化。接着,通过设置代理和请求头,模拟了浏览器访问,成功绕过了可能存在的反爬虫机制,获取了目标网页的内容。

在解析网页内容方面,文章通过BeautifulSoup的find_all方法定位到包含电影信息的div元素,并提取了电影名称和专业评分数据。这些数据被存储在一个列表中,为后续的数据处理和分析提供了基础。

为了更直观地展示数据,文章还利用pandas库将提取的数据转换成了DataFrame格式,并使用matplotlib库绘制了专业评分排行榜的条形图。这不仅有助于读者更好地理解数据分布情况,还能为后续的深入分析提供直观的参考。

http://www.lryc.cn/news/321980.html

相关文章:

  • C/C++中枚举(enum)和结构体(struct)的异同
  • 【数据可视化】使用Python + Gephi,构建中医方剂关系网络图!
  • 部署prometheus+Grafana可视化仪表盘监控服务
  • python中的类与对象
  • sentry-cli - error: Failed to load .sentryclirc file from project path
  • 回归预测 | Matlab实现SO-BP蛇算法优化BP神经网络多变量回归预测
  • 如何添加 Android Native 系统服务
  • 【力扣】189.轮转数组
  • C语言字符函数和字符串函数详解
  • 【CKA模拟题】查询消耗CPU最多的Pod
  • 网络简略总结
  • 如何处理错误情况
  • 【Greenhills】MULTI IDE-GHS最新版本Compiler 23.5.4的兼容性问题
  • 用连续自然数之和来表达整数 - 华为OD统一考试(C卷)
  • SQLiteC/C++接口详细介绍之sqlite3类(十二)
  • linux系统--------------mysql数据库管理
  • 网络——入门基础
  • 二、yocto 集成ros2(基于raspberrypi 4B)
  • html--bug
  • Java基础学习笔记三
  • Linux快速入门,上手开发 01.学习路线
  • JSX return里面如何用if判断
  • Vulnhub靶机渗透:DC-7打靶记录
  • 目标检测---IOU计算详细解读(IoU、GIoU、DIoU、CIoU、EIOU、Focal-EIOU、SIOU、WIOU)
  • 探索并发编程:深入理解线程池
  • html5cssjs代码 023 公制计量单位进位与换算表
  • UE5.3 StateTree使用实践
  • 【09】进阶JavaScript事件循环Promise
  • 蓝桥备赛----基本语法总结
  • 基于 Echarts + Python Flask ,我搭建了一个动态实时大屏监管系统