爬虫实战——爬取大麦网

简介: 前两天国庆,朋友在看中国好声音,出于对周杰伦以及李健的喜爱,朋友想去鸟巢看10月7号的巅峰之夜,于是...我上了大麦网查看票价,但是出于职业病,不小心就按下了F12,就有了这个项目言归正传,爬取大麦网经过反复点击发现,大麦网在经过多次点击之后...

前两天国庆,朋友在看中国好声音,出于对周杰伦以及李健的喜爱,朋友想去鸟巢看10月7号的巅峰之夜,于是...我上了大麦网查看票价,但是出于职业病,不小心就按下了F12,就有了这个项目

言归正传,爬取大麦网

经过反复点击发现,大麦网在经过多次点击之后,会出现需要登录的情况,因此,通过这点分析,我们需要登录的cookie

老套路,直接上代码

不愿意看代码的,可以直接跳过,看最后的总结

import requests
import json
import csv


class Spider(object):
    # 构造请求头等
    def __init__(self):
        self.url = "https://search.damai.cn/searchajax.html"
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36",
            "cookie": "_uab_collina=153898386691021526720657; _umdata=70CF403AFFD707DFEB6BA57C56CA3B13E7BD5DAF561D420C384FF4DA75A62F56B2225CEC1DD4846FCD43AD3E795C914C46F57A339EDEC74F7006D0CE8CD77F14; x5sec=7b226d65632d67756964652d7765623b32223a226639303431366238343735643836656338393965393365656533303433646662434f3669374e3046454b2f666a7476302f7244356a41453d227d; cna=b0mIEx9fXWcCAQ6CznyYZjAe; cookie2=18204ab51d2bd14a7326dab901c58057; t=37103c62b8274bb5769837840f8b71a8; _tb_token_=36ed1e7aee13e; x_hm_tuid=PN4CfOch3fJ1yW4MpI+z3hZhs9u9ODTzpfGE7AtbNvax7kg+GG7r3wFIj/ihN/iG; _hvn_login=18; csg=6be6a003; munb=4199098224; damai.cn_nickName=MeisterLee; damai.cn_user=gz4HkAnuV3BDKOniG3I4tVZ2WybxgALVJu0CZ2Xkbi57+SBwd++X2SrBbVRAeGWUGxb2+Rjuqig=; damai.cn_user_new=gz4HkAnuV3BDKOniG3I4tVZ2WybxgALVJu0CZ2Xkbi57%2BSBwd%2B%2BX2SrBbVRAeGWUGxb2%2BRjuqig%3D; h5token=9ccd095300bc4588a090b771e8418b2b_1_1; damai_cn_user=gz4HkAnuV3BDKOniG3I4tVZ2WybxgALVJu0CZ2Xkbi57%2BSBwd%2B%2BX2SrBbVRAeGWUGxb2%2BRjuqig%3D; loginkey=9ccd095300bc4588a090b771e8418b2b_1_1; user_id=116768239; isg=BNfX8KBwQJVhx8QVBH4OF8nuZksr4qxma9qAKCkEQKYNWPSaMO1Azkg-vr5isIP2",
            "referer": "https://search.damai.cn/search.htm?ctl=%20%20%20&order=1&cty="
        }
        self.data = {
            "cty": "北京",
            "ctl": "演唱会",
            "tsg": "0",
            "order": "1"
        }
        self.data_key = None
        # 构造IP代理(按需求开启)
        # proxies = {
        #     "http": "http://47.93.56.0:3128",
        #     "http": "http://39.135.24.12:80",
        # }

    # 请求url获取响应
    def get(self):
        response = requests.post(url=self.url, headers=self.headers, data=self.data)
        # 测试
        # print(response.text)
        return response

    # 解析数据
    def parse(self):
        # 将字符串数据转换成字典数据
        dict_data = json.loads(self.get().text)

        # 测试字典数据是否能解析出来
        # print(dict_data["pageData"]["resultData"])

        # 将需要的爬取的字典数据存储在变量中
        need_spider_data = dict_data["pageData"]["resultData"]
        # print(need_spider_data)
        # 构造存储头列表,第一种方法
        data_key = []
        for item in need_spider_data[0]:
            data_key.append(item)

        # 打印测试
        # print(data_key)
        self.data_key = data_key

        # # 第二种方法
        # data_keys = need_spider_data[0].keys()
        #
        # # 打印测试
        # print(data_keys)
        return need_spider_data

    # 保存为CSV数据
    def save(self):
        # 构建属性列表
        # list = ['actors', 'categoryname', 'cityname', 'description', 'price', 'pricehigh', 'showstatus', 'showtime', 'subcategoryname', 'venue', 'venuecity', 'verticalPic']
        list = self.data_key

        # 此处出现保存,报错为缺少字段,因此追加一个字段
        list.append('favourable')
        # 测试list
        print(list)

        # 数据
        my_data = self.parse()
        # 测试
        print(my_data)

        with open("damaiwang" + ".csv", "w", newline="", encoding='utf8') as f:
            # 传入头数据,即第一行数据
            writer = csv.DictWriter(f, list)
            writer.writeheader()
            for row in my_data:
                writer.writerow(row)


    # # 保存为字典数据
    # def save_dict(self):
    #     with open("damaiwang", 'w', encoding='utf8') as f:
    #         f.write(str(self.parse()))




if __name__ == '__main__':
    spider = Spider()
    # spider.run()
    spider.parse()
    spider.save()

AI 代码解读

在代码中我做了相应的注释,代码还可以继续优化,这里使用的cookie是我自己登录之后的cookie,代码在使用过程中,需要换成自己的cookie

遇到的问题总结
  • 这个爬虫相对来说,是最基础也是最简单的,但是难点在于,如果要对数据做数据分析,就大概率的得把数据转化成CSV格式的文件进行保存,虽然在公司中并不是这么操作(一般直接存进数据库),对于个人项目来说,存成本地的CSV格式的文件就必不可少了。

  • 保存成CSV格式的文件有很多办法,首先,最愚蠢(大智若愚)的办法就是遍历数据,把数据用逗号隔开,这种办法虽然看起来非常愚蠢,但是,我不得不给一个中肯的评价,有时候,在数据杂乱无章的时候,这是唯一的解决办法(实话说,网上有很多办法解决格式转化问题,但数据是千奇百怪的,我们很难预知我们爬取到的数据长什么样子),这也是我目前还在探索的一个知识点,毕竟写程序最重要的还是解决问题,代码不能提高人工的生产率,要程序何用?

  • 言归正传,这里我调用了Python的内置库——CSV,感兴趣的伙伴可以上网查看一下这个库的其他用法,这里我个人觉得能解决一时的问题,但终归不是一个长久之计

over~ peace~

rel="nofollow">www.limiao.tech

公众号:TechBoard

相关文章
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
418 0
分布式爬虫框架Scrapy-Redis实战指南
基于aiohttp的高并发爬虫实战:从原理到代码的完整指南
在数据驱动时代,传统同步爬虫效率低下,而基于Python的aiohttp库可构建高并发异步爬虫。本文通过实战案例解析aiohttp的核心组件与优化策略,包括信号量控制、连接池复用、异常处理等,并探讨代理集成、分布式架构及反爬应对方案,助你打造高性能、稳定可靠的网络爬虫系统。
44 0
Python爬虫动态IP代理报错全解析:从问题定位到实战优化
本文详解爬虫代理设置常见报错场景及解决方案,涵盖IP失效、403封禁、性能瓶颈等问题,提供动态IP代理的12种核心处理方案及完整代码实现,助力提升爬虫系统稳定性。
47 0
Kubernetes上的爬虫排队术——任务调度与弹性扩缩容实战
本教程介绍如何在 Kubernetes 上构建可扩展的爬虫系统,解决传统单机爬虫瓶颈。核心内容包括:使用 Docker 打包爬虫任务、RabbitMQ 实现任务队列、爬虫代理防限制、随机 User-Agent 模拟请求,以及通过 Horizontal Pod Autoscaler (HPA) 实现根据任务压力自动扩缩容。适合需要处理大规模网页采集的开发者学习与实践。
Kubernetes上的爬虫排队术——任务调度与弹性扩缩容实战
Python多线程爬虫模板:从原理到实战的完整指南
多线程爬虫通过并发请求大幅提升数据采集效率,适用于大规模网页抓取。本文详解其原理与实现,涵盖任务队列、线程池、会话保持、异常处理、反爬对抗等核心技术,并提供可扩展的Python模板代码,助力高效稳定的数据采集实践。
53 0
爬虫IP代理效率优化:策略解析与实战案例
本文深入探讨了分布式爬虫中代理池效率优化的关键问题。首先分析了代理效率瓶颈的根源,包括不同类型代理的特点、连接耗时及IP失效问题。接着提出了六大核心优化策略:智能IP轮换矩阵、连接复用优化、动态指纹伪装、智能重试机制等,并结合电商价格监控、社交媒体舆情分析和金融数据抓取三个实战案例,展示了优化效果。同时建立了三维效率评估体系,从质量、成本和稳定性全面衡量性能。最后展望了AI驱动调度、边缘计算融合等未来演进方向,帮助爬虫系统实现从“暴力采集”到“智能获取”的进化,大幅提升效率并降低成本。
85 0
Python爬虫与代理IP:高效抓取数据的实战指南
在数据驱动的时代,网络爬虫是获取信息的重要工具。本文详解如何用Python结合代理IP抓取数据:从基础概念(爬虫原理与代理作用)到环境搭建(核心库与代理选择),再到实战步骤(单线程、多线程及Scrapy框架应用)。同时探讨反爬策略、数据处理与存储,并强调伦理与法律边界。最后分享性能优化技巧,助您高效抓取公开数据,实现技术与伦理的平衡。
155 4
Python爬虫——基于JWT的模拟登录爬取实战
Python爬虫——基于JWT的模拟登录爬取实战
192 1
Python爬虫——基于JWT的模拟登录爬取实战
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
366 6

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问