python——爬虫示例读取豆瓣电影数据

使用python爬虫进行读取排名前250名电影名称、时间、导演、评分等信息。

1. 导入需要的库

功能
request获取网页数据
BeautifulSoup进行网页数据分析
xlwtExcel表格数据填写

2.获取user-agent 与Host

使用谷歌浏览器使用快捷键“F12”或者右击选择“检查”,打开谷歌调试界面。
使用浏览器访问:https://movie.douban.com/top250?start=0
这里写图片描述
按照上边的步骤读取网页的“user-agent”与“Host”
并且观察网页特性,发现一页仅仅显示25个电影信息,需要十页,而每一页命名规则仅仅是修改最后“start=0”
还有另一种方法获取Host
在这里插入图片描述

3. 使用谷歌浏览器获取相应类

这里写图片描述
通过寻找到的类来进行数据分析,例如我们想得到电影名称,首先调试页面中左上角选择按钮点击选择我们想要的区域,查看到我们需要的类为“hd”。

4. 使用BeautifulSoup进行数据分析

使用for循环遍历整个网页中查找到的类函数;然后直接在元素后边添加.a就可以提取遍历元素中<a>...</a>中的元素。
使用’text()'可以提取文本内容将设置<>中进行去除。

例如:使用each进行遍历,我们按照下边进行输出:

        print('---------------------each--------------------------------')
        print(each)
        print()
        print('---------------------each.a-----------------------------')
        print(each.a)
        print()
        print('---------------------each.a.span-----------------------------')
        print(each.a.span)
        print()
        print('---------------------each.a.span.text-------------------------')
        print(each.a.span.text)

得到第一个输出结果为:

---------------------each--------------------------------
<div class="hd">
<a class="" href="https://movie.douban.com/subject/1292052/">
<span class="title">肖申克的救赎</span>
<span class="title"> / The Shawshank Redemption</span>
<span class="other"> / 月黑高飞(港)  /  刺激1995(台)</span>
</a>
<span class="playable">[可播放]</span>
</div>

---------------------each.a-----------------------------
<a class="" href="https://movie.douban.com/subject/1292052/">
<span class="title">肖申克的救赎</span>
<span class="title"> / The Shawshank Redemption</span>
<span class="other"> / 月黑高飞(港)  /  刺激1995(台)</span>
</a>

---------------------each.a.span-----------------------------
<span class="title">肖申克的救赎</span>

---------------------each.a.span.text-------------------------
肖申克的救赎

5. 数据进行保存

将数据保存到Excel表格中,使用xlwt库中table.write()函数进行填写。
具体可以查看:python Excel数据读取与写入 - CSDN博客

6. 完整程序

下边是完整程序保存,注意使用的是python3运行环境。

import requests
import xlwt
from bs4 import BeautifulSoup

headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
    'Host':'movie.douban.com'
    }
movie_list = []
director_list = []
time_list = []
star_list = []
for i in range(0,10):
    link = 'https://movie.douban.com/top250?start=' + str(i*25)
    res = requests.get(link,headers=headers,timeout = 10)

    soup = BeautifulSoup(res.text,"lxml")
    div_list = soup.find_all('div', class_ = 'hd')
    div1_list = soup.find_all('div', class_='bd')
    div2_list = soup.find_all('div', class_='star')

    for each in div_list:
        movie = each.a.span.text.strip()
        movie_list.append(movie)

    for each in div1_list:
        info = each.p.text.strip()
        if len(info) < 3:
            continue
        time_start = info.find('20')
        if time_start < 0:
            time_start = info.find('19')
        end = info.find('...')
        time = info[end+32:end+36]
        time_list.append(time)

        end = info.find('主')
        director = info[4:end-3]
        director_list.append(director)

    for each in div2_list:
        info = each.text.strip()
        star = info[0:3]
        star_list.append(star)


file = xlwt.Workbook()

table = file.add_sheet('sheet name')

table.write( 0, 0, "排名")
table.write( 0, 1, "电影")
table.write( 0, 2, "时间")
table.write( 0, 3, "导演")
table.write( 0, 4, "评分")
for i in range(len(star_list)):
    table.write(i + 1, 0, i+1)
    table.write(i + 1, 1, movie_list[i])
    table.write(i + 1, 2, time_list[i])
    table.write(i + 1, 3, director_list[i])
    table.write(i + 1, 4, star_list[i])

    # print("名称:%s"%movie_list[i])
    # print("时间:%s" % time_list[i])
    # print("导演:%s" % director_list[i])
    # print("评分:%s" % star_list[i])
    # print()
    # print()
    
    
file.save('data.xls')
  • 13
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值