实战1:【爬虫】爬取豆瓣TOP250的电影数据

写在前面

个人介绍: 本人91年生,目前30岁了,还是处于学习python的阶段,希望与大家多多交流,如果大家能点个关注或者评论一下的话对我来说是极大的鼓励,有不足之处更请批评指正,希望能与您共同进步!
想说的话: 上次写博文是在11月6日,一转眼过去好几天时间了,这几天中自己也在不断学习python知识,也对之前的博文(hashlib模块、time模块)进行了修订、更新。学习最重要的就是不断吸收新的知识和不断的输出,有的时候感觉学会了,但是想要将学会的东西写出来还是很费时间的,本篇博文从实战入手写一个爬虫,将学过的知识一点点串联起来。

本篇文章参考:《Python网络爬虫从入门到实战》
作者:唐松


开干

功能:爬取豆瓣TOP250的电影数据
网址:https://movie.douban.com/top250

网站分析

目的: 使用构造的字典来伪装一个浏览器请求,防止爬虫被网站禁用
登录网站后,使用开发者工具获取网页信息。将重要的信息写入字典,形式如下

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
    'Host': 'movie.douban.com'}
# 仔细看字典中一共就两对键值对,key分别为:User-Agent和Host

登录网站观察:
每一页有25个电影的介绍,要获取完整的250个电影的介绍需要总共10页的内容,点击第二页可以发现网址发生了变化,后面加上了?start=25这个小尾巴。第三页的地址后面加上了?start=50,可见每多一页,就给网页地址的start参数加上25。

第二页


项目实践

尝试使用requests模块获取电影网页代码。

import requests


def get_movies():
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
        'Host': 'movie.douban.com'}
    for i in range(0, 10):
        link = 'https://movie.douban.com/top250?start=' + str(i * 25)
        r = requests.get(link, headers=headers, timeout=10)
        print(str(i + 1), '页响应状态码:', r.status_code)
        print(r.text)


get_movies()

观察HTML结构

每个电影名都会在这种结构下,以《控方证人》这个电影为例,它存放在一个class='hd’的div中的a中的span中,可能有点绕。。

<div class="hd">
	<a href="https://movie.douban.com/subject/1296141/" class="">
		<span class="title">控方证人</span>
        <span class="title">&nbsp;/&nbsp;Witness for the Prosecution</span>
        <span class="other">&nbsp;/&nbsp;雄才伟略  /  情妇</span>
    </a>
	<span class="playable">[可播放]</span>
</div>

完整代码

import requests
from bs4 import BeautifulSoup


def get_movies():
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
        'Host': 'movie.douban.com'}
    movie_list = []
    for i in range(0, 10):
        link = 'https://movie.douban.com/top250?start=' + str(i * 25)
        r = requests.get(link, headers=headers, timeout=10)
        print(f'{i + 1}页响应状态码:', r.status_code)
        soup = BeautifulSoup(r.text, 'lxml')
        div_list = soup.find_all('div', class_='hd')
        for each in div_list:
            movie = each.a.span.text.strip()
            movie_list.append(movie)
    return movie_list


movies = get_movies()
print(movies)


结果

输出


写在最后

希望大家通过这个小的爬虫学到一些基本的思想和用法,在生活中爬取自己想要的信息。
希望在学习的路上与您多多交流,有什么问题或者有何指教可在下方回复,谢谢。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值