Python爬虫入门(豆瓣电影top250爬虫)存入Excel表格(适合初学者)附:新模块的使用和面向对象模板

389 篇文章 7 订阅
39 篇文章 4 订阅

新模块的使用:

首先,我们知道爬虫在编辑的时候很容易被反爬机制检测到导致响应失败,所以每次我们都要进行伪装ua请求头,可能会浪费一些时间导致效率不高,于是requests模块的作者在疫情期间升级了该模块,包装了xpath并且附带了ua请求头。即request_html,下载也很简单,只需要在
在这里插入图片描述
输入pip install requests_html即可使用啦

模板代码的使用:

我们写代码时经常要做重复性的操作,所以我们可以写好模板写爬虫时快速使用,话不多说咱们上代码

from requests_html import HTMLSession


class Spider:
    def __init__(self):
        self.url = ''
        self.session = HTMLSession()

    def get_html(self):
        headers = {}
        response = self.session.get(url=self.url)

    def parse(self, response):
        pass

    def run(self):
        self.get_html()


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

那我们开始今天的爬虫吧!

首先我们要清楚爬虫的具体步骤:

爬虫四步:

1、明确目标url

2、发起请求 获取响应

3、响应里面取出数据

4、存储数据

一、明确目标url

今天需要的是爬取豆瓣评分电影top250就是这个网站:

豆瓣电影 Top 250

首先我们发现页面有十页,先f12打开开发者工具,获取第二页响应,去寻找翻页规律,可以发现第二页:

豆瓣电影 Top 250

第三页:

豆瓣电影 Top 250

不难发现我们的翻页规律为start累加25

先导包:

# requests_html模块帮我们伪装了ua请求头大多数情况可以不用加
from requests_html import HTMLSession
import os, xlwt, xlrd
from xlutils.copy import copy

然后掏出我们的模板代码,并且将翻页规律给写出来

class Spider:
    def __init__(self):
        self.url = 'https://movie.douban.com/top250?start={}&filter='
        # 实例化
        self.session = HTMLSession()

    def get_html(self):
        # 翻页规律为+=25
        page = 0
        for i in range(0, 10):
            next_url = self.url.format(page)
            headers = {}
            response = self.session.get(url=next_url)
            page += 25

print(response.text)可以看到我们正常获取了响应

开始书写取数据的函数(我们这里用xpath进行书写):

    def parse(self, response):
        # 取数据函数
        for div in response.html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]'):
            title = div.xpath('.//a/span[1]/text()')[0]  # 标题
            label = div.xpath('.//p/text()')[1].replace('\n', '').replace('\xa0', '').replace(' ', '')  # 标签
            score = div.xpath('.//span[@class="rating_num"]/text()')[0].replace('\n', '').replace('\xa0', '').replace(
                ' ', '')  # 评分
            number = div.xpath('.//div[@class="star"]/span/text()')[-1].replace('\n', '').replace('\xa0', '').replace(
                ' ', '')  # 评价人数
            remark = div.xpath('.//div[@class="bd"]/p//text()')[-2].replace('\n', '').replace('\xa0', '').replace(' ',
                                                                                                                  '')  # 评语
            data = {
                '电影': [title, label, score, number, remark]
            }
            print(data)

发现数据可以正常被提取后我们进行保存:

    # # 一个工作簿创建一张表模板代码
    def SaveExcel(self, data):
        # 创建保存excel表格的文件夹
        # os.getcwd() 获取当前文件路径
        os_mkdir_path = os.getcwd() + '/数据/'
        # 判断这个路径是否存在,不存在就创建
        if not os.path.exists(os_mkdir_path):
            os.mkdir(os_mkdir_path)
        # 判断excel表格是否存在           工作簿文件名称
        os_excel_path = os_mkdir_path + '数据.xls'
        if not os.path.exists(os_excel_path):
            # 不存在,创建工作簿(也就是创建excel表格)
            workbook = xlwt.Workbook(encoding='utf-8')
            """工作簿中创建新的sheet表"""  # 设置表名
            worksheet1 = workbook.add_sheet("电影", cell_overwrite_ok=True)
            """设置sheet表的表头"""
            sheet1_headers = ('电影名', '标签', '评分', '评论人数', '评语')
            # 将表头写入工作簿
            for header_num in range(0, len(sheet1_headers)):
                # 设置表格长度
                worksheet1.col(header_num).width = 2560 * 3
                # 写入            行, 列,           内容
                worksheet1.write(0, header_num, sheet1_headers[header_num])
            # 循环结束,代表表头写入完成,保存工作簿
            workbook.save(os_excel_path)
        # 判断工作簿是否存在
        if os.path.exists(os_excel_path):
            # 打开工作簿
            workbook = xlrd.open_workbook(os_excel_path)
            # 获取工作薄中所有表的个数
            sheets = workbook.sheet_names()
            for i in range(len(sheets)):
                for name in data.keys():
                    worksheet = workbook.sheet_by_name(sheets[i])
                    # 获取工作薄中所有表中的表名与数据名对比
                    if worksheet.name == name:
                        # 获取表中已存在的行数
                        rows_old = worksheet.nrows
                        # 将xlrd对象拷贝转化为xlwt对象
                        new_workbook = copy(workbook)
                        # 获取转化后的工作薄中的第i张表
                        new_worksheet = new_workbook.get_sheet(i)
                        for num in range(0, len(data[name])):
                            new_worksheet.write(rows_old, num, data[name][num])
                        new_workbook.save(os_excel_path)

在书写时注意Excel表名要与上面data数据一致,否则数据难以保存。

最后我们写一个run方法讲整体函数进行调用

这里说明一下存到Excel表格内有数据要求即

data{
    '表名':[数据]
}

如果不按要求写data很难将数据保存在Excel表格内!!而且在书写时注意Excel表名要与上面data数据一致,否则数据难以保存。

最后我们写一个run方法讲整体函数进行最后的调用

    def run(self):
        self.get_html()
 

然后运行发现数据保存成功!这就是咱们第一个实战小项目啦!

最后

在学习python中有任何困难不懂的可以微信扫描下方CSDN官方认证二维码加入python交流学习
多多交流问题,互帮互助,这里有不错的学习教程和开发工具。

👉[[CSDN大礼包:《python安装包&全套学习资料》免费分享]]安全链接,放心点击

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python必备开发工具

在这里插入图片描述

四、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

六、Python练习题

检查学习结果。
在这里插入图片描述

七、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述
最后,千万别辜负自己当时开始的一腔热血,一起变强大变优秀。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值