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

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

本文目录

  • 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 time

def get_ip():
url= "放置自己复制的IP地址"
    while 1:
        try:
            r = requests.get(url, timeout=10)
        except:
            continue
        ip = r.text.strip()
        if '请求过于频繁' in ip:
            print('IP请求频繁')
            time.sleep(1)
            continue
        break
    proxies = {
        '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'
    }

    # 获取一次代理 IP
    proxies = 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)  # 暂停一秒以防止过于频繁的请求

        # 将数据转换为 DataFrame
        df = 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 None
        print(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.kler.cn/a/409123.html

相关文章:

  • Java 8 Stream API 在数据转换中的应用 —— 将列表转换为映射
  • ssm实战项目──哈米音乐(二)
  • 多目标优化算法:多目标极光优化算法(MOPLO)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6,提供完整MATLAB代码
  • 网络安全基础——网络安全法
  • 微信小程序上传微信官方审核流程(1)
  • linux入门——“僵尸进程、孤儿进程”
  • 【数据结构】【线性表】【练习】反转链表II
  • opencv相关报错
  • AI时代,百度的三大主义
  • 单片机电路基本知识
  • RabbitMQ简单应用
  • 数据库MYSQL——表的设计
  • Python 网络爬虫操作指南
  • 服务器数据恢复—DS5300存储硬盘指示灯亮黄灯的数据恢复案例
  • 数据结构——树与二叉树
  • 【docker了解】如何将x86镜像转换为适用于Jetson的ARM镜像
  • 【C++动态规划】1411. 给 N x 3 网格图涂色的方案数|1844
  • el-table最大高度无法滚动
  • 探索 RocketMQ:企业级消息中间件的选择与应用
  • Scala全文单词统计
  • 【TEST】Apache JMeter + Influxdb + Grafana
  • 小程序25- iconfont 字体图标的使用
  • mfc100u.dll是什么?分享几种mfc100u.dll丢失的解决方法
  • Vue——响应式数据,v-on,v-bind,v-if,v-for(内含项目实战)
  • 周末总结(2024/11/24)
  • HTMLCSS:3D金字塔加载动画