【爬虫二】爬取豆瓣音乐榜单



前言

  借助有效率的工具,可以让我们更加方便的写出爬虫程序。本篇使用request和bs4库爬取豆瓣音乐榜单。

介绍

豆瓣音乐榜单:https://music.douban.com/top250
图片描述
bs4:Beautiful Soup 4 是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式。Beautiful Soup会帮你节省数小时甚至数天的工作时间。

一、获取网页html

def download_page(url):
    headers = {
        'User-Agent':'查看自己的User-Agent,粘贴到此处'
    }

    data = requests.get(url, headers=headers).content
    return data

  不添加headers可能导致403,无法获取网页源码,这是因为操作被服务器认为是爬虫而拒绝访问。服务器通过校验请求的U-A来识别爬虫,这是一种相对简单的反爬虫机制。通过模拟浏览器的U-A,可以解决这个问题。

  通常,浏览器在向服务器发送请求的时候,会有一个请求头——User-Agent,它用来标识浏览器的类型。当我们使用requests来发送请求的时候,默认的User-Agent是python-requests/2.8.1。如此我们尝试将User-Agent伪装成浏览器。我们通过手动指定User-Agent为Chrome浏览器(F12–>Network中查看),再次访问得到网页源码。

二、获取当前页歌名

def parse_html(html):
    global count
    soup = BeautifulSoup(html, "html.parser")
    music_list_soup = soup.find('div', attrs={'class': 'indent'})

    music_name_list = []
    for music_li in music_list_soup.find_all('table'):
        detail = music_li.find('div', attrs={'class': 'pl2'})
        count += 1
        music_name = 'Top ' + str(count)
        music_name = music_name + detail.find('a').getText() + '\n'
        music_name_list.append(music_name)

    next_page = soup.find('span', attrs={'class': 'next'}).find('a')
    if next_page:
        return music_name_list, next_page['href']
    else:
        return music_name_list, None

  我们使用了beautifulsoup来分析网页源码, 创建bs对象soup,并使用解析器html.parser来解析源码。
  
按F12–>Element查看网页源码,发现<div class='indent'>标签下存在歌单(table标签);
图片描述
用for循环获取所有table,并对每一个table进行分析;

<div, class='pl2'>标签下的<a>标签下发现歌名,
图片描述

用此detail.find('a').getText() 函数获取a标签下的文字内容,并添加到列表中music_name_list.append(music_name) ,再把列表的元素写进文件就可以了。

注: BeautifulSoup中的find和findAll用法相同,不同之处为find返回的是findAll搜索值的第一个值。

三、翻页

  next_page是为了让程序能够翻页,next_page['href'] ,获取下一页url,通过while循环来反复访问,进而可以获取完整歌单。
图片描述

四、代码

  最后,完整程序代码如下:

#!/usr/bin/env python
# encoding=utf-8

import requests
from bs4 import BeautifulSoup
import codecs


def download_page(url):
    headers = {
        'User-Agent':'查看自己的User-Agent,粘贴到此处'
    }

    data = requests.get(url, headers=headers).content
    return data

def parse_html(html):
    global count
    soup = BeautifulSoup(html, "html.parser")
    music_list_soup = soup.find('div', attrs={'class': 'indent'})

    music_name_list = []
    for music_li in music_list_soup.find_all('table'):
        detail = music_li.find('div', attrs={'class': 'pl2'})
        count += 1
        music_name = 'Top ' + str(count)
        music_name = music_name + detail.find('a').getText() + '\n'
        music_name_list.append(music_name)

    next_page = soup.find('span', attrs={'class': 'next'}).find('a')
    if next_page:
        return music_name_list, next_page['href']
    else:
        return music_name_list, None

def main():
    url = 'https://music.douban.com/top250'
    fp = codecs.open('music', 'w', encoding='utf-8')
    while url:
        html = download_page(url)
        musics, url = parse_html(html)
        fp.write(''.join(musics))

    print 'done\n'


if __name__ == '__main__':
    count = 0
    main()



### 回答1: 为了爬取豆瓣电影Top250,并进行简单的最新可视化分析,我们需要先了解一下爬虫和数据分析的基础知识。 爬虫是一种自动化程序,可以模拟人类浏览网页的行为,从网页中提取出所需的信息。在我们的情况下,我们需要爬取豆瓣电影的Top250列表。 首先,我们需要使用Python编写一个爬虫程序,使用Web scraping技术访问豆瓣电影的网页,并提取出电影名称、评分、导演、主演等信息。可以使用Python中的第三方库BeautifulSoup或Scrapy来实现网页解析和数据提取的功能。 爬取到数据后,我们可以使用Python中的Pandas进行数据处理和分析。首先,我们可以将爬取的信息保存为CSV或Excel文件,方便后续的数据分析操作。 接下来,我们可以使用Python中的Matplotlib或Seaborn库进行数据可视化分析。可以通过绘制柱状图、条形图、散点图等来展示电影评分、导演、主演等数据之间的关系。可以使用电影评分作为横轴,电影名称作为纵轴,绘制出豆瓣电影Top250的评分分布图。 此外,我们还可以使用Python中的WordCloud库来生成电影关键词的词云图。可以通过对电影名称、导演、主演等字段进行文本分析,提取出关键词,并将其可视化为词云图,展示出豆瓣电影Top250的特点和概况。 在完成数据可视化分析后,我们可以对电影的评分进行排序,找出豆瓣电影Top250中评分最高或最低的电影,并进行详细的电影分析和评论统计。 综上所述,通过爬虫爬取豆瓣电影Top250,并进行简单的最新可视化分析,我们可以从整体和细节上了解豆瓣电影Top250的特点、评分分布以及电影关键词等信息。这个过程需要用到Python编程和相关的数据处理、可视化分析库。 ### 回答2: 爬虫是一种自动化程序,它可以模拟人的行为在网页上获取数据。利用爬虫技术,我们可以爬取豆瓣电影网站上的电影信息,比如评分、评价人数、导演、演员等等。而豆瓣电影的TOP250榜单是根据用户的评分和评价人数来排序的,因此非常适合用来进行分析。 首先,我们需要使用爬虫技术来获取豆瓣电影TOP250的电影信息。我们可以利用Python编写爬虫程序,使用合适的库如Requests和BeautifulSoup来发送HTTP请求并解析网页内容,从中提取出我们需要的电影信息。 获取到电影信息后,我们可以进行一些简单的最新分析。比如,我们可以计算TOP250电影的平均评分、评价人数的平均数等。这些数据将帮助我们了解整个TOP250榜单的质量和受欢迎程度。 此外,我们还可以对电影的类型、导演、演员进行分析。通过统计TOP250榜单中各个类型、导演、演员的出现次数,我们可以了解到哪些类型的电影、哪些导演、哪些演员更受欢迎。 最后,为了更好地展示分析结果,我们可以使用数据可视化工具如Matplotlib或Seaborn来生成图表。比如,我们可以绘制出TOP250电影的评分分布图,或者使用饼图展示TOP250电影中各个类型的比例等。 综上所述,通过爬虫爬取豆瓣电影TOP250并进行简单最新分析,我们可以了解到TOP250电影的整体质量和受欢迎程度,以及各种类型、导演、演员在榜单中的表现。通过数据可视化,我们可以更直观地展示分析结果。这些分析可帮助电影制片方或观众了解电影市场的趋势和受欢迎的电影特点。 ### 回答3: 爬虫是一种自动化工具,可以帮助我们从互联网上获取数据。通过使用爬虫,我们可以爬取豆瓣电影网站的TOP250电影信息,并进行可视化分析。 首先,我们需要使用Python编写一个爬虫程序。该程序使用爬虫框架(如Scrapy或BeautifulSoup)来从豆瓣电影网站中获取电影的相关信息,例如电影名称、评分、导演、演员等。我们可以设置一个循环,逐页爬取TOP250电影的信息,并将爬取的数据保存到本地文件中。 接下来,我们可以将保存的数据加载到数据分析工具(如Pandas)中进行分析。我们可以通过统计电影评分的分布情况、观察评分与电影类型之间的关系,或者分析电影导演的数量分布等等。这些分析可以帮助我们了解豆瓣电影TOP250的特点和趋势。 在可视化方面,我们可以使用数据可视化工具(如Matplotlib、Seaborn或Plotly)创建图表、图像和可视化效果,以更直观地展示数据分析的结果。例如,我们可以根据电影评分绘制直方图或密度图,用饼图展示不同类型电影的占比,或者绘制演员和导演之间的网络图。 最后,我们可以将可视化结果输出为图片或HTML文件,以便与他人分享或展示。此外,我们还可以将可视化结果整合到Web应用程序或数据报告中,提供更丰富的交互和展示效果。 总而言之,通过爬虫爬取豆瓣电影TOP250并进行可视化分析,可以帮助我们更深入地了解豆瓣电影排行榜的特点和变化趋势,以及电影评分、类型和导演之间的关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值