Python 爬取豆瓣TOP250实战

Posted Leslie_Chan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 爬取豆瓣TOP250实战相关的知识,希望对你有一定的参考价值。

学习爬虫之路,必经的一个小项目就是爬取豆瓣的TOP250了,首先我们进入TOP250的界面看看。

 

 

 

 

 可以看到每部电影都有比较全面的简介。其中包括电影名、导演、评分等。

接下来,我们就爬取这些数据,并将这些数据制成EXCEL表格方便查看。

首先,我们用requests库请求一下该网页,并返回他的text格式。

 

 请求并返回成功!

接下来,我们提取我们所需要的网页元素。

点击“肖申克救赎”的检查元素。

 

 发现它在div class = "hd" -> span class = "title"里,所以我们import beautifulsoup,来定位该元素。

同时,用相同的方法定位电影的评价人数和评分以及短评。

代码如下:

soup = BeautifulSoup(res.text, \'html.parser\')

    names = []
    scores = []
    comments = []
    result = []
    #获取电影的所有名字
    res_name = soup.find_all(\'div\',class_="hd")
    for i in res_name:
        a=i.a.span.text
        names.append(a)

    #获取电影的评分
    res_scores = soup.find_all(\'span\',class_=\'rating_num\')
    for i in res_scores:
        a=i.get_text()
        scores.append(a)

    #获取电影的短评
    ol = soup.find(\'ol\', class_=\'grid_view\')
    for i in ol.find_all(\'li\'):

        info = i.find(\'span\', attrs={\'class\': \'inq\'})  # 短评
        if info:
            comments.append(info.get_text())
        else:
            comments.append("")

    return names,scores,comments

Ok,现在,我们所需要的数据都存在三个列表里面,names,scores,comments。

我们将这三个列表存入EXCEL文件里,方便查看。

调用WorkBook方法

wb = Workbook()
    filename = \'top250.xlsx\'
    ws1 = wb.active
    ws1.title = \'TOP250\'
    for (i, m, o) in zip(names,scores,comments):
        col_A = \'A%s\' % (names.index(i) + 1)
        col_B = \'B%s\' % (names.index(i) + 1)
        col_C = \'C%s\' % (names.index(i) + 1)
        ws1[col_A] = i
        ws1[col_B] = m
        ws1[col_C] = o
    wb.save(filename=filename)

运行结束后,会生成一个.xlsx的文件,我们来看看效果:

 

 Very Beatuful! 以后想学习之余想放松一下看看好的电影,就可以在上面直接查找啦。

以下是我的源代码:

import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook

def open_url(url):
    res = requests.get(url)
    return res


def get_movie(res):
    soup = BeautifulSoup(res.text, \'html.parser\')

    names = []
    scores = []
    comments = []
    result = []
    #获取电影的所有名字
    res_name = soup.find_all(\'div\',class_="hd")
    for i in res_name:
        a=i.a.span.text
        names.append(a)

    #获取电影的评分
    res_scores = soup.find_all(\'span\',class_=\'rating_num\')
    for i in res_scores:
        a=i.get_text()
        scores.append(a)

    #获取电影的短评
    ol = soup.find(\'ol\', class_=\'grid_view\')
    for i in ol.find_all(\'li\'):

        info = i.find(\'span\', attrs={\'class\': \'inq\'})  # 短评
        if info:
            comments.append(info.get_text())
        else:
            comments.append("")

    return names,scores,comments



def get_page(res):
    soup = BeautifulSoup(res.text,\'html.parser\')
     #获取页数
    page_num = soup.find(\'span\',class_ =\'next\').previous_sibling.previous_sibling.text
    return int(page_num)




def main():
    host = \'https://movie.douban.com/top250\'
    res = open_url(host)
    pages = get_page(res)
    #print(pages)
    names =[]
    scores = []
    comments = []
    for i in range(pages):
        url = host + \'?start=\'+ str(25*i)+\'&filter=\'
        #print(url)
        result = open_url(url)
        #print(result)
        a,b,c = get_movie(result)
        #print(a,b,c)
        names.extend(a)
        scores.extend(b)
        comments.extend(c)
    # print(names)
    # print(scores)
    # print(comments)
    wb = Workbook()
    filename = \'top250.xlsx\'
    ws1 = wb.active
    ws1.title = \'TOP250\'
    for (i, m, o) in zip(names,scores,comments):
        col_A = \'A%s\' % (names.index(i) + 1)
        col_B = \'B%s\' % (names.index(i) + 1)
        col_C = \'C%s\' % (names.index(i) + 1)
        ws1[col_A] = i
        ws1[col_B] = m
        ws1[col_C] = o
    wb.save(filename=filename)

if __name__ == \'__main__\':
    main()

 

生成EXCEL文件还有很多种方法,下次分享Pandas生成EXCEL文件的方法~

以上是关于Python 爬取豆瓣TOP250实战的主要内容,如果未能解决你的问题,请参考以下文章

python爬虫入门爬取豆瓣电影top250

python爬取豆瓣电影Top250(附完整源代码)

团队-Python 爬取豆瓣电影top250-需求分析

Python 2.7_利用xpath语法爬取豆瓣图书top250信息_20170129

团队-爬取豆瓣电影TOP250-开发文档

团队-爬取豆瓣Top250电影-开发文档