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文件的方法~

原文地址:https://www.cnblogs.com/lesliechan/p/11739897.html

时间: 2024-10-28 22:51:57

Python 爬取豆瓣TOP250实战的相关文章

用Python爬取豆瓣Top250的电影标题

所以我们可以这么写去得到所有页面的链接我们知道标题是在 target="_blank"> 标题的位置</a> 之中 所以可以通过正则表达式找到所有符合条件的标题 将内容写入到表格保存起来 下面贴入完整代码 import requests, bs4, re, openpyxl url = 'https://www.douban.com/doulist/3936288/?start=%s' urls = [] 多少页 pages = 10 for i in range(p

[python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对比,你可以进一步加深Python爬虫的印象.同时,文章给出了我以前关于爬虫的基础知识介绍,方便新手进行学习.        总之,希望文章对你有所帮助,如果存在不错或者错误的地方,还请海涵~ 一. DOM树结构分析 豆瓣Top250电影网址:https://movie.douban.com/top2

利用Python爬取豆瓣电影

目标:使用Python爬取豆瓣电影并保存MongoDB数据库中 我们先来看一下通过浏览器的方式来筛选某些特定的电影: 我们把URL来复制出来分析分析: https://movie.douban.com/tag/#/?sort=T&range=0,10&tags=%E7%94%B5%E5%BD%B1,%E7%88%B1%E6%83%85,%E7%BE%8E%E5%9B%BD,%E9%BB%91%E5%B8%AE 有3个字段是非常重要的: 1.sort=T 2.range=0,10 3.tag

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

需求:爬取豆瓣电影TOP250 *向用户展示电影的排名,分数,名字,简介,导演,演员,前10条影评信息,链接信息 实现思路: 分析豆瓣电影TOP250的url规则, 编写模块获取相关url 获取全部相关页面的html代码 分析html中有关"排名,分数,名字,简介,导演,演员,前10条影评信息,链接信息"的标签 结合第三方工具包实现信息的提取 编写将"搜集信息"展示出来的模块

python爬取豆瓣小组700+话题加回复啦啦啦python open file with a variable name

需求:爬取豆瓣小组所有话题(话题title,内容,作者,发布时间),及回复(最佳回复,普通回复,回复_回复,翻页回复,0回复) 解决:1. 先爬取小组下,所有的主题链接,通过定位nextpage翻页获取总过700+条话题: 2. 访问700+ 链接,在内页+start=0中,获取话题相关的四部分(话题title,内容,作者,发布时间),及最佳回复.回复: 3. 在2的基础上,判断是否有回复,如果有回复才进一步判断是否有回复翻页,回复翻页通过nextpage 获取start=100.start=2

python 爬取豆瓣电影评论,并进行词云展示及出现的问题解决办法

本文旨在提供爬取豆瓣电影<我不是药神>评论和词云展示的代码样例 1.分析URL 2.爬取前10页评论 3.进行词云展示 1.分析URL 我不是药神 短评 第一页url https://movie.douban.com/subject/26752088/comments?start=0&limit=20&sort=new_score&status=P 第二页url https://movie.douban.com/subject/26752088/comments?sta

Python爬虫入门 | 4 爬取豆瓣TOP250图书信息

先来看看页面长啥样的:https://book.douban.com/top250 我们将要爬取哪些信息:书名.链接.评分.一句话评价-- 1. 爬取单个信息 我们先来尝试爬取书名,利用之前的套路,还是先复制书名的xpath: 得到第一本书<追风筝的人>的书名xpath如下: //*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]/div[1]/a 得到xpath,我们就可以按照之前的方法来尝试一下: 返回的竟然是

python爬取豆瓣首页热门栏目详细流程

记录一下爬取豆瓣热门专栏的经过,通过这篇文章,你能学会requests,HTMLParser,json的基本使用,以及爬取网页内容的基本思路. 使用模块 1,获取豆瓣首页代码:首先我们需要访问豆瓣页面,获取首页的源码.这里推荐使用第三方库:requests,相比python内置的 urllib 模块,requests使用起来更简单,功能更全面 2,对获取的代码进行解析:对于解析html代码,已经有很多功能强大的框架能使用,如Scrapy,PySpider,Beautiful Soup等,这里我们

python爬取豆瓣250存入mongodb全纪录

用了一周的时间总算搞定了,跨过了各种坑,总算调试成功了,记录如下: 1.首先在cmd中用命令行建立douban爬虫项目 scrapy startproject douban 2.我用的是pycharm,导入项目后, 1)在items.py中定义爬取的字段 items.py代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 # -*- coding: utf-8 -*- import scrapy class DoubanBookItem(scrapy.Item):     name