Python 爬取豆瓣电影、书籍、音乐Top250

成果

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

源码

import requests
from bs4 import BeautifulSoup

from WebWorm.RandomHeader import getRandomHeader
import re


# 根据url返回HTML内容
def parse(url):
    # 设置随机头
    headers = {"user-agent": getRandomHeader()}
    # 请求URL
    request = requests.get(url, headers=headers)
    # 设置编码
    request.encoding = 'utf-8'
    # 请求到的内容
    html = request.text
    # 返回请求到的内容
    return html


# 爬取电影250
def film250():
    # 存放所有的电影的信息
    more = []
    for i in range(0, 250, 25):
        # 拼接URL
        url = 'https://movie.douban.com/top250?start=' + str(i)
        # 获得URL的HTML内容
        html = parse(url)
        # 解析HTML
        info = BeautifulSoup(html, "html.parser")
        # 获得页面中的li元素
        li = info.find(name="ol", attrs={"class": "grid_view"}).find_all('li')
        # 遍历li元素
        for i in li:
            # 存放一个电影的信息
            one = []

            # 获取电影名称
            span = i.find(name="div", attrs={"class": "hd"}).find('a').find_all('span')
            name = ''
            for k in span:
                # 拼接电影名称
                name += k.text.strip()

            # 获得电影评分
            score = i.find(name="div", attrs={"class": "bd"}).find(name="div", attrs={"class": "star"}).find(
                name="span", attrs={"class": "rating_num"}).text

            try:
                # 获得电影的引文
                quote = i.find(name="p", attrs={"class": "quote"}).find('span').text
            except:
                quote = "该电影没有引文"

            # 把信息放入数组
            one.append(name)
            one.append(score)
            one.append(quote)

            # 把一个电影信息放入大数组
            more.append(one)
    # 把数组的信息写入文件
    with open('film250.txt', mode='w', encoding='utf-8') as file:
        for i in more:
            # 拼接分隔符
            info = '|||'.join(i)
            # 把数据写入文件
            file.write(info + '\n')
    print('爬取电影250成功')


# 爬取书籍250
def book250():
    # 存放所有书籍的信息
    more = []
    for i in range(0, 250, 25):
        # 拼接URL
        url = 'https://book.douban.com/top250?start=' + str(i)
        # 获取HTML页面
        html = parse(url)
        # 解析HTML
        info = BeautifulSoup(html, "html.parser")
        # 获得页面中的table元素
        table = info.find(name="div", attrs={"class": "indent"}).find_all('table')
        # 遍历table
        for i in table:
            # 存放一本书的所有信息
            one = []
            # 获取书籍名称
            name = i.find(name="div", attrs={"class": "pl2"}).find('a').text.strip().replace(' ', '').replace('\n', '')
            # 获取书籍作者
            author = i.find(name="p", attrs={"class": "pl"}).text
            # 获取书籍评分
            score = i.find(name="div", attrs={"class": "star clearfix"}).find(name="span",
                                                                              attrs={"class": "rating_nums"}).text
            # 获取书籍引言
            try:
                quote = i.find(name="p", attrs={"class": "quote"}).find('span').text
            except:
                quote = '该书没有引文'
            # 把信息加入数组
            one.append(name)
            one.append(author)
            one.append(score)
            one.append(quote)
            # 把一本书籍的信息加入大数组
            more.append(one)
    # 把数组里的信息写入文件
    with open('book250.txt', mode='w', encoding='utf-8') as file:
        for i in more:
            # 拼接分隔符
            info = '|||'.join(i)
            # 把数据写入文件
            file.write(info + '\n')
    print('爬取书籍250成功')


# 爬取音乐250
def music250():
    # 存放所有音乐的信息
    more = []
    for i in range(0, 250, 25):
        # 拼接URL
        url = 'https://music.douban.com/top250?start=' + str(i)
        # 获取HTML页面
        html = parse(url)
        # 解析HTML
        info = BeautifulSoup(html, "html.parser")
        # 获得页面中的table元素
        table = info.find(name="div", attrs={"class": "indent"}).find_all('table')
        for i in table:
            # 存放一个音乐的全部信息
            one = []
            # 获取音乐名称
            name = i.find(name="div", attrs={"class": "pl2"}).find('a').text.strip().replace('\n', '')
            name = re.sub("[ ]{2,}", "/", name)
            # 获取音乐作者
            author = i.find(name="p", attrs={"class": "pl"}).text
            # 获取音乐评分
            score = i.find(name="div", attrs={"class": "star clearfix"}).find(name="span",
                                                                              attrs={"class": "rating_nums"}).text
            # 把音乐信息加入数组
            one.append(name)
            one.append(author)
            one.append(score)
            # 把一个音乐信息加入大数组
            more.append(one)
    # 把数组中信息保存为文件
    with open('music250.txt', mode='w', encoding='utf-8') as file:
        for i in more:
            # 拼接分隔符
            info = '|||'.join(i)
            # 把数据写入文件
            file.write(info + '\n')
    print('爬取音乐250成功')


if __name__ == '__main__':
    # 爬取电影
    film250()
    # 爬取书籍
    book250()
    # 爬取音乐
    music250()

总结

只爬取了自我感觉价值比较高的字段,例如:电影名、评分、引言等。

有问题及时反馈,共同成长。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值