Python爬取豆瓣Top250电影

前言:
最近在学习python的过程中,收获很多,特别是爬取网页信息,用到了BeautifulSoup这个库,它的功能很强大,是本次爬取豆瓣电影必不可少的工具。

那么BeautifulSoup是什么呢?
BeautifulSoup是Python的一个库,主要用来在网页中抓取数据,当然也可以用来处理导航,搜索,修改分析树的功能。

那么如何安装BeautifulSoup这个库呢?
BeautifulSoup最新的版本是BeautifulSoup4,已经移植到了bs4这个库里了,所有我们只需要导入bs4这个库,由于爬取出来的数据需要写入表格,这里我们使用python专门使用表格的库openpyxl

#首先安装bs4,openpyxl库
!pip install bs4
!pip install openpyxl

然后导入我们需要的库,具体需要的库有用于发送网络请求的requests库,还有正则表达式等等

import requests
import re
import codecs
from bs4 import BeautifulSoup
from openpyxl import Workbook

然后我们创建一个工作表,用来写入我们爬取的结果

wb = Workbook()
dest_filename = '电影2.xlsx'
ws = wb.active
ws.title = "电影top250"

需要爬取的豆瓣网的地址

DOWNLOAD_URL = 'http://movie.douban.com/top250/'

获取url地址页面内容

def downlaod_page(url):
    """获取url地址页面内容"""
    headers = {'User-Agent':'Mozilla/5.0(Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36'}
    data = requests.get(url,headers=headers).content
    return data

获取每一页电影的信息,包括电影名字,评价人数,评分,短评等等信息

def get_li(doc):
    soup = BeautifulSoup(doc,'html.parser')
    ol = soup.find('ol',class_='grid_view')
    name=[] # 名字
    star_con = [] #评价人数
    score = [] #评分
    info_list = [] #短评
    for i in ol.find_all('li'):
        detail = i.find('div',attrs={'class':'hd'})
        movie_name = detail.find('span',attrs={'class':'title'}).get_text() #电影名字
        level_star = i.find('span',attrs={'class':'rating_num'}).get_text() #评分
        star = i.find('div',attrs={'class':'star'})
        star_num = star.find(text=re.compile('评价')) #评价
        
        info = i.find('span',attrs={'class':'inq'}) #短评
        if info: #判断是否有短评
            info_list.append(info.get_text())
        else:
            info_list.append('无')
            
        score.append(level_star)
        name.append(movie_name)
        star_con.append(star_num)
        
    page = soup.find('span',attrs={'class':'next'}).find('a') #获取下一页
    if page:
        print(DOWNLOAD_URL + page['href'])
        return name,star_con,score,info_list,DOWNLOAD_URL + page['href']
    return name,star_con,score,info_list,None

最后将所有数据写入工作表并保存

def main():
    url = DOWNLOAD_URL
    name = []
    star_con = []
    score = []
    info = []
    while url:
        doc = downlaod_page(url)
        movie,star,level_num,info_list,url = get_li(doc)
        name = name + movie
        star_con = star_con + star
        score = score + level_num
        info = info + info_list
    for(i,m,o,p) in zip(name,star_con,score,info):
        col_A = 'A%s' % (name.index(i) + 1)
        col_B = 'B%s' % (name.index(i) + 1)
        col_C = 'C%s' % (name.index(i) + 1)
        col_D=  'D%s' % (name.index(i) + 1)
        ws1[col_A] = i
        ws1[col_B] = m
        ws1[col_C] = o
        ws1[col_D] = p
    wb.save(filename=dest_filename)

最后在程序的入口调用mian函数

if __name__ == '__main__':
    main()
        

爬取结果:


image.png

总结:在本次爬取的过程中,也遇到了许多问题,好在都一一解决了,感觉还是蛮有趣的,下来还需要深入理解这个过程。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,835评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,900评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,481评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,303评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,375评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,729评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,877评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,633评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,088评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,443评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,563评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,251评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,827评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,712评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,943评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,240评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,435评论 2 348

推荐阅读更多精彩内容