使用青果代理IP爬取豆瓣TOP250电影数据

embedded/2024/11/28 23:15:53/

本文目录

  • 1.1 引言
  • 1.2 为什么需要代理IP?
  • 2.1 青果代理IP的优势
  • 2.2 获取青果代理IP
  • 2.3 实战爬取豆瓣TOP250电影
  • 3.总结

1.1 引言

电商平台、社交平台、自媒体等平台大数据爆炸的现在,采用爬虫采集数据已经是当下最高效、精准地获取数据方式,但在采集过程重是不是经常出现:爬虫程序频繁地访问目标网站,一旦判断为异常请求,网站便会对IP进行封禁或限制访问。这导致爬虫程序无法持续采集数据,影响了数据获取的完整性与效率!

为了避免上述问题,代理IP成为爬虫稳定运行的关键技术。

1.2 为什么需要代理IP?

代理IP通过不断切换访问源IP,模拟不同的用户请求,从而绕过反爬机制,避免因频繁访问同一网站而被封锁。通过代理IP,爬虫可以分散单一IP的请求负载,降低单个IP的访问频率,避免触发网站的安全机制。

本人测试过很多的代理IP品牌,有一款用下来体验很不错的品牌——青果网络

2.1 青果代理IP的优势

在一众提供代理IP的品牌中,青果代理ip名气还是挺大的,算是国内代理的头部品牌,主要是确实很好用;无论是小规模的定向抓取,还是大规模的高频次采集,青果都能提供稳定的支持,帮我解决了很多采集的需求。
在这里插入图片描述
青果代理IP的最大优势在于其灵活性和相应速度:

需求灵活性:用户可以根据自己的需求,从多种IP资源池中选择最合适的方案,并根据不同的采集任务灵活设置IP提取方式和存活时长。无论是1分钟的短时有效IP,还是30分钟的长效连接,青果都能为用户提供精准的匹配,确保采集任务的顺利进行。

在这里插入图片描述
极度相应:经测试访问百度的响应时间<1秒,可以说是超快的的访问速度,可以满足大批量的采集需求。还有优质的高匿池子结合价格简直是加分项,算得上是一款高性价比的HTTP代理。

当然如果是新用户,不妨薅一下他们家的羊毛:6小时免费试用活动,接下来我将给大家展示如何使用青果代理ip“零元购”爬取豆瓣TOP250电影数据

2.2 获取青果代理IP

1、首先我们打开青果官网,点击右上角去注册一个账号。https://www.qg.net

在这里插入图片描述
2、接着选择6小时免费的产品免费套餐

在这里插入图片描述
3、接着进一步点击提取IP
在这里插入图片描述
点击打开链接看看是否有获取到IP。

在这里插入图片描述
这里一般会成功返回一个IP值:在这里插入图片描述,那这样就代表获取成功了。

4、使用青果API获取IP地址

我们可以用代码来获取这个API地址,代码如下所示,只需要把url替换成自己复制的链接即可。

在这里插入图片描述

import requests
import timedef get_ip():
url= "放置自己复制的IP地址"while 1:try:r = requests.get(url, timeout=10)except:continueip = r.text.strip()if '请求过于频繁' in ip:print('IP请求频繁')time.sleep(1)continuebreakproxies = {'https': '%s' % ip}return proxies
if __name__ == '__main__':proxies = get_ip()print(proxies)

2.3 实战爬取豆瓣TOP250电影

在下面这段代码中,我们逐步实现了对豆瓣TOP 250电影的抓取。通过编写函数处理请求、解析HTML内容、提取数据并保存到Excel文件,完成了整个爬取流程。以下是代码的详细分析:

  1. 页面请求:page_request() 函数

page_request()函数用于发送HTTP请求来访问豆瓣TOP 250页面。函数接受目标URL和请求头ua作为参数,使用requests.get方法获取页面内容。通过指定请求头中的User-Agent来模拟真实用户访问,避免触发简单的反爬机制。

def page_request(url, ua, proxies):try:response = requests.get(url=url, headers=ua, proxies=proxies, timeout=10)response.raise_for_status()return response.content.decode('utf-8')except requests.RequestException:print("请求失败")return None
  1. 页面解析:page_parse() 函数

page_parse()函数使用BeautifulSoup解析HTML内容并提取我们所需的信息,包括电影排名、名称、评分和电影链接。使用CSS选择器定位到具体的页面元素:
●positions提取电影的排名信息。
●names提取电影的名称。
●ratings提取评分。
●hrefs提取电影详情页的链接。
数据最终被整理为字典形式,存储在列表data中。

def page_parse(html):soup = BeautifulSoup(html, 'lxml')positions = soup.select('#content > div > div.article > ol > li > div > div.pic > em')names = soup.select('#content > div > div.article > ol > li > div > div.info > div.hd > a > span:nth-child(1)')ratings = soup.select('#content > div > div.article > ol > li > div > div.info > div.bd > div > span.rating_num')hrefs = soup.select('#content > div > div.article > ol > li > div > div.info > div.hd > a')data = []for i in range(len(names)):data.append({'排名': positions[i].get_text(),'电影名称': names[i].get_text(),'评分': ratings[i].get_text(),'链接': hrefs[i].get('href')})return data
  1. 主程序:批量爬取并保存数据

在__main__主程序部分,我们定义了循环遍历豆瓣TOP 250的每页,构建不同的URL,每页包含25部电影,通过startNum参数控制页面的起始位置。每次请求的HTML内容经过解析并提取所需的数据,然后追加到all_data列表中。最后将所有页面的数据汇总并写入Excel文件。

if __name__ == "__main__":print('**************开始爬取豆瓣电影**************')ua = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4421.5 Safari/537.36'}# 获取一次代理 IPproxies = get_ip()if not proxies:print("无法获取代理 IP,程序退出")else:all_data = []  # 存储所有电影数据for startNum in range(0, 251, 25):url = f"https://movie.douban.com/top250?start={startNum}"html = page_request(url=url, ua=ua, proxies=proxies)if html:movies_data = page_parse(html=html)all_data.extend(movies_data)print(f'**************第{startNum // 25 + 1}页爬取完成**************')else:print(f"第{startNum // 25 + 1}页爬取失败,跳过该页")time.sleep(1)  # 暂停一秒以防止过于频繁的请求# 将数据转换为 DataFramedf = pd.DataFrame(all_data)# 写入 Excel 文件df.to_excel("豆瓣电影爬取.xlsx", index=False)print('**************所有数据已写入 Excel 文件**************')

4、加入青果代理IP进行爬取

通过上面的代码,我们只需要把获取代理IP代码加进来即可。

def get_ip():url = "这里放对应获取IP的API即可"try:r = requests.get(url, timeout=10)ip = r.text.strip()if '请求过于频繁' in ip:print('IP请求频繁,请稍后再试')return Noneprint(f"成功获取代理IP: {ip}")return {'https': f'https://{ip}'}except requests.RequestException:print("获取代理IP失败")return None

5、完整效果如下

把所有代码整合一起之后,就可以进行爬取了,获取到如下的数据。

在这里插入图片描述

3.总结

本次研究通过网络爬虫技术成功采集了豆瓣TOP 250电影数据,从网页请求、内容解析到数据存储,实现了自动化的数据获取流程。在这一过程中,合理配置请求头和分页逻辑,基本解决了反爬机制带来的访问限制,为进一步的数据分析和应用提供了基础数据支持。

在数据采集过程中,青果网络的代理IP作为优质的代理解决方案,提供动态和短效的IP资源,全国覆盖200多个城市,日流水超600万,为用户提供了多种IP资源池和存活时长选择,适配不同业务需求,是网络爬虫和数据采集的理想选择。

青果代理IP的6小时免费试用,让用户能够在真实环境中测试其性能和稳定性,确保其适应具体的业务场景。无论是研究数据趋势、市场分析,还是进行用户行为的洞察,青果代理IP都将为您的数据采集工作提供强有力的支持。欢迎大家尝试使用青果网络的代理IPhttps://www.qg.net/,体验高效、稳定的数据采集之旅!

在这里插入图片描述


http://www.ppmy.cn/embedded/141286.html

相关文章

记录下在html文件中如何直接使用npm依赖,以threejs为例

参考&#xff1a; https://www.cnblogs.com/shayloyuki/p/17191489.html 共三种方式 我的代码截图 方式一&#xff1a; threejsDemo_script.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&…

深度学习之PSPNet

场景解析对于无限制的开放词汇和不同场景来说是具有挑战性的.本文使用文中的pyramid pooling module实现基于不同区域的上下文集成&#xff0c;提出了PSPNet&#xff0c;实现利用上下文信息的能力进行场景解析。    作者认为&#xff0c;FCN存在的主要问题是没有采取合适的策…

区块链游戏的新观察:自治世界能否成为未来链游的突破口?

区块链游戏&#xff08;链游&#xff09;作为加密领域的创新方向&#xff0c;一直被寄予厚望。然而&#xff0c;尽管各类链游层出不穷&#xff0c;大多只是靠代币激励一时爆火&#xff0c;缺乏持久吸引力。这种现象让人对链游未来的发展充满疑虑&#xff1a;是否有一种全新的设…

卷积神经网络(CNN)中的批量归一化层(Batch Normalization Layer)

批量归一化层&#xff08;BatchNorm层&#xff09;&#xff0c;或简称为批量归一化&#xff08;Batch Normalization&#xff09;&#xff0c;是深度学习中常用的一种技术&#xff0c;旨在加速神经网络的训练并提高收敛速度。 一、基本思想 为了让数据在训练过程中保持同一分布…

JavaScript零基础入门速通(上)

目录 1. JavaScript 简介 2. JavaScript 的运行环境 2.1 浏览器端 2.2 服务器端&#xff08;Node.js&#xff09; 3. JavaScript 基础语法 3.1 变量声明 3.2 数据类型 3.3 运算符 3.3.1 算术运算符 .3.2 比较运算符 3.3.3 逻辑运算符 3.4 控制流 3.4.1 条件语句 …

python的openpyxl库设置表格样式:字体/边框/对齐/颜色等

学习目录 1. 安装和使用openpyxl库设置表格样式 2 设置字体font 3 设置边框 4 设置对齐方式 5 设置单元格数据格式 6 设置行高和列宽 7 填充单元格颜色 附录-关于颜色说明 本章节主要介绍如何使用openpyxl库设置表格中的一些样式&#xff0c;比如字体&#xff0c;边框…

大语言模型LLM的微调代码详解

代码的摘要说明 一、整体功能概述 这段 Python 代码主要实现了基于 Hugging Face Transformers 库对预训练语言模型&#xff08;具体为 TAIDE-LX-7B-Chat 模型&#xff09;进行微调&#xff08;Fine-tuning&#xff09;的功能&#xff0c;使其能更好地应用于生成唐诗相关内容的…

Unity 2020、2021、2022、2023、6000下载安装

Unity 2020、2021、2022、2023、6000 下载安装 以Unity 6000.0.24fc1下载安装为例&#xff1a; 打开 https://unity.cn/ 优三缔 官方网站&#xff1b; 点击【产品列表】→点击【查看更多】→选择自己需要的版本→点【开始使用】 点击【从Unity Hub下载】 以Windows为例&am…