吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2344|回复: 4
收起左侧

[Python 转载] 【python】Python爬豆瓣电影top250导出Excel

[复制链接]
莫失莫忘angle 发表于 2020-9-29 14:18
本帖最后由 莫失莫忘angle 于 2020-9-29 16:44 编辑

以前写到csdn了  话说直接复制没有格式  那就重新在写一遍

首先需要安装好爬虫需要用到的python库  开发工具使用的是pycharm

1:request  网络请求模块

2:lxml   取数据的模块 这里用的是xpath  没有用bs4

3.xlwings    对Excel进行读写的模块

如果安装失败 或者安装缓慢 可以参考之前的博客 将pycharm镜像更换为清华大学镜像
一键直达
http://suo.im/63Iz1K

首先需要知道豆瓣电影的url是这样的

第二页:https://movie.douban.com/top250?start=25&filter=
第三页:https://movie.douban.com/top250?start=50&filter=
第四页:https://movie.douban.com/top250?start=75&filter=
也就是说每一页有25条数据  get请求的start参数就是起始的数据  结束的数据就是 25 50 75等等那么只需要在get请求中从0开始每次加25即可
因为是top250  所以加到225就不加了首先需要写好start参数变化的值  请求url封装成requesUrl方法

[Python] 纯文本查看 复制代码
 
if __name__ == "__main__":
    start = 0
    while start <= 225:
        requestUrl(start)
        start = start + 25


接下来封装requestUrl函数
[Python] 纯文本查看 复制代码
def requestUrl(start):
    url = "https://movie.douban.com/top250"
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
    }
    params = {
        "start": start,
        "filter": ""
    }
    response = requests.get(url=url, params=params, headers=header).text
    terr = etree.HTML(response)
    terr_lis = terr.xpath('//ol[@class="grid_view"]/li')
 
    for i in terr_lis:
        video_name = i.xpath('./div/div/div/a/span/text()')[0]
        video_score = i.xpath('./div/div/div/div/span[2]/text()')[0]
        video_evaluate = i.xpath('./div/div/div/div/span[4]/text()')[0]
        # print(text + ' 评分:' + number + "\n")
 


这里教大家一个小技巧
20200919165343144.png

这里可以直接copy出来xpath的路径 不用一个一个的写 很方便的

其中 video_name是电影名称   video_score是电影评分   video_evaluate电影的评论人数
到这里已经拿到了我们想要的数据
下面就是使用xlwings   导出数据


[Python] 纯文本查看 复制代码
    wb = xlwings.Book("e:\example.xlsx")
    sht = wb.sheets["sheet1"]
    sht.range('A1').value = "xlwiassssssssssssssssngs"



这是最基本的用法 首先打开文件 然后获取工作表
A1对应的是网格的位置  value就是需要写入的值  那么我们就知道A是固定的 1是动态的 所以只需要动态改变A后边的数据即可
完整代码如下

[Python] 纯文本查看 复制代码
import requests
from lxml import etree
import xlwings

video_name_colunm = 0
video_score_colunm = 0
video_evaluate_colunm = 0


def requestUrl(start):
    global video_name_colunm
    global video_score_colunm
    global video_evaluate_colunm

    url = "https://movie.douban.com/top250"
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
    }
    params = {
        "start": start,
        "filter": ""
    }
    response = requests.get(url=url, params=params, headers=header).text
    terr = etree.HTML(response)
    terr_lis = terr.xpath('//ol[@class="grid_view"]/li')

    for i in terr_lis:
        video_name = i.xpath('./div/div/div/a/span/text()')[0]
        video_score = i.xpath('./div/div/div/div/span[2]/text()')[0]
        video_evaluate = i.xpath('./div/div/div/div/span[4]/text()')[0]
        # print(text + ' 评分:' + number + "\n")

        video_name_colunm = video_name_colunm + 1
        video_name_xls = "A" + str(video_name_colunm)
        sht.range(video_name_xls).value = video_name

        video_score_colunm = video_score_colunm + 1
        video_score_xls = "B" + str(video_score_colunm)
        sht.range(video_score_xls).value = video_score

        video_evaluate_colunm = video_evaluate_colunm + 1
        video_evaluate_xls = "C" + str(video_evaluate_colunm)
        sht.range(video_evaluate_xls).value = video_evaluate
        sht.range(video_evaluate_xls).columns.autofit()
        print("正在写入----" + video_name)


if __name__ == "__main__":

    wb = xlwings.Book("e:\example.xlsx")
    sht = wb.sheets["sheet1"]
    start = 0
    while start <= 225:
        requestUrl(start)
        start = start + 25


这里新建了3个全局变量 并且初始化为0  每次+1 好了 这下结果就出来了  
e:\example.xlsx  这里必须要在E盘根目录下创建这个文件   可以自行修改


20200919171545361.png
20200919171604177.png
基本思路就是这样   想要导出什么数据 可以自己尝试

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
frankawen + 1 + 1 很好用 谢谢大佬 不会写代码的只能找抄作业
coolcalf + 1 + 1 Python第一课,做得好的就是这样。
squirrel1311 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

arklearn 发表于 2020-9-29 14:20
哇塞,感谢分享。这个等一下去试试。
bachelor66 发表于 2020-9-29 14:32
mark,回头再来学习下                        
squirrel1311 发表于 2020-9-29 16:10
为什么照抄的,还会出错啊,搞不懂了,小白一枚,哈哈
[Python] 纯文本查看 复制代码
Traceback (most recent call last):
  File "C:/Users/Administrator/PycharmProjects/untitled1/Demo.py", line 49, in <module>
    wb = xlwings.books("E:\001.xlsx")
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\xlwings\main.py", line 47, in __call__
    return self._wrap(impl=self.impl(name_or_index))
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\xlwings\main.py", line 3059, in impl
    return apps.active.books.impl
AttributeError: 'NoneType' object has no attribute 'books'
 楼主| 莫失莫忘angle 发表于 2020-9-29 16:34
squirrel1311 发表于 2020-9-29 16:10
为什么照抄的,还会出错啊,搞不懂了,小白一枚,哈哈
[mw_shl_code=python,true]Traceback (most recent  ...

好了 在复制一次 我少copy东西了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 23:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表