前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python爬虫获取豆瓣电影TOP250

python爬虫获取豆瓣电影TOP250

作者头像
大数据梦想家
发布2021-01-22 16:05:22
8740
发布2021-01-22 16:05:22
举报

在之前的博客中,小菌分享了几篇关于python爬虫的小程序,受到了许多小伙伴们的认可,小菌还是比较激动٩(๑>◡<๑)۶,毕竟小菌毕竟不是python方向的,很多的内容都是自己找资料自学的。同样本篇博客,小菌将继续分享实用的爬虫—获取豆瓣电影Top250的内容,并保存在MySQL数据库中。

关于豆瓣电影在百度百科上的描述,如下:

豆瓣电影提供最新的电影介绍及评论包括上映影片的影讯查询及购票服务。你可以记录想看、在看和看过的电影电视剧,顺便打分、写影评。极大地方便了人们的生活。

是不是心动了,嘿嘿~我们先根据网址https://movie.douban.com/top250来到豆瓣Top250的官网页面。

在这里插入图片描述
在这里插入图片描述

我们发现该网页共有十页的数据!

在这里插入图片描述
在这里插入图片描述

关于如何获取到这些数据呢?我们需要现在MySQL中将我们储存信息的表先创建出来。 在MySQL执行以下建表语句:

代码语言:javascript
复制
`

create table doubanmovie
(
	name TEXT null,
	director TEXT null,
	actor TEXT null,
	style TEXT null,
	country TEXT null,
	release_time TEXT null,
	time TEXT null,
	score TEXT null
);

`

我们可以看到此时数据表已经创建好,此时还没有数据。

在这里插入图片描述
在这里插入图片描述

接下来就要开始爬虫数据装进我们数据库的表格中了。话不多说,先上代码:

代码语言:javascript
复制
"""
@File    : 豆瓣电影Top250(手动).py
@Time    : 2019/10/28 9:27
@Author  : 封茗囧菌
@Software: PyCharm

      转载请注明原作者
	  创作不易,仅供分享
 
"""

import requests
from lxml import etree
import re
import pymysql
import time
# 导入相关的库文件
# Request  库用于请求网页
# Lxml 和 re 库用户解析爬取网页数据
# PyMySQL 库 用于对MySQL 数据库的操作
# time 库的sleep() 方法 可以让程序暂停


# conn为连接对象,用于连接数据库
conn = pymysql.connect(host='localhost', user='root', passwd='root', db='day0720', port=3306, charset='utf8')

# cursor 为光标对象,用于操作MySQL数据库
cursor = conn.cursor()

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}   # 加入请求头


def get_movie_url(url):    #  定义用于获取详情页URL的函数
    html = requests.get(url, headers=headers)
    selector = etree.HTML(html.text)
    movie_hrefs = selector.xpath("//div[@class='hd']/a/@href")
    for movie_href in movie_hrefs:
        get_movie_info(movie_href)      # 调用获取详情页信息的函数


def get_movie_info(url):     # 定义获取详情页信息的函数
    html = requests.get(url, headers=headers)
    selector = etree.HTML(html.text)
    try:
        name = selector.xpath('//*[@id="content"]/h1/span[1]/text()')[0]
        director = selector.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')[0]

        # 当遇到标签套标签的情况,想获取里面的文本值,可以使用string(.)
        actors = selector.xpath('//*[@id="info"]/span[3]/span[2]')[0]
        actor = actors.xpath('string(.)')
        # 这里用了正则表达式
        style = re.findall('<span property="v:genre">(.*?)</span>', html.text, re.S)[0]
        country = re.findall('<span class="pl">制片国家/地区:</span> (.*?)<br/>', html.text, re.S)[0]
        release_time = re.findall('上映日期:</span>.*?>(.*?)</span>', html.text, re.S)[0]
        time = re.findall('片长:</span>.*?>(.*?)</span>', html.text, re.S)[0]
        score = re.findall('<strong class="ll rating_num" property="v:average">(.*?)</strong>',html.text, re.S)[0]

        # 获取信息插入数据库
        cursor.execute(
            "insert into doubanmovie1 (name,director,actor,style,country,release_time,time,score) values(%s,%s,%s,%s,%s,%s,%s,%s)",
            (str(name), str(director), str(actor), str(style), str(country), str(release_time), str(time), str(score)))

        # pass掉IndexError错误
    except IndexError:
        pass

        # 程序主入口


if __name__ == '__main__':
    urls = ['https://movie.douban.com/top250?start={}'.format(str(i)) for i in range(0, 250, 25)]
    for url in urls:
        # 构造urls 并循环调用函数
        get_movie_url(url)
        # 睡眠2秒
        time.sleep(2)
    conn.commit()

代码分析:

代码语言:javascript
复制
(1)第1~5行导入程序程序所需要的库,Requests库用于请求网页,Lxml库和re库用于解析爬取
网页数据,PyMySQL库用于对MySQL数据库的操作,time库的sleep()方法可以让程序暂停。
(2)第7~9行用于连接MySQL数据库和集合
(3)第11~14行通过Chrome浏览器的开发者工具,复制User-Agent,用于伪装成浏览器,
   便于爬虫的稳定性.
(4)第16~21行代码定义了获取详细页链接的函数,这里通过Xpath语法来提取标签中的href信息,
   最后调用获取爬虫信息的get_movie_info()函数。
(5)第23~44行定义了获取电影信息的函数,通过Xpath语法和正则表达式方法来获取爬虫信息,
   最后存储在了MySql数据库中。

声明: 在爬虫过程中,出现了IndexError的错误,这是因为有些电影的链接已经不存在了,这里通过try()函数来处理异常,以使爬虫程序继续运行而不报错!

运行程序,效果图如下:

在这里插入图片描述
在这里插入图片描述

可以看见我们的数据库中,存储着豆瓣电影Top250的数据,说明我们的爬虫程序成功了!那本次的分享也就到这里了,学到了的小伙伴们不要忘了点赞并关注小菌吖~点赞加关注,小白不迷路ヾ(๑╹◡╹)ノ"

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档