python爬虫小练习——爬取豆瓣电影top250

爬取豆瓣电影top250

需求分析

将爬取的数据导入到表格中,方便人为查看。

实现方法

三大功能
1,下载所有网页内容。
2,处理网页中的内容提取自己想要的数据
3,导入到表格中

分析网站结构需要提取的内容

在这里插入图片描述

代码

import requests
from bs4 import BeautifulSoup
import pprint
import json
import pandas as pd
import time

# 构造分页数字列表
page_indexs = range(0, 250, 25)
list(page_indexs)

# 请求头
headers = {
    'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/1'
}

# 下载所有的网页然后交给下一个函数处理
def download_all_htmls():
    htmls = []
    for idx in page_indexs:
        url = "https://movie.douban.com/top250?start={}&filter=".format(idx)
        print("craw html", url)
        r = requests.get(url, headers=headers)
        if r.status_code != 200:
            raise Exception("error")
        htmls.append(r.text)
        time.sleep(0.5)
    return htmls



# 解析HTML得到数据

def parse_single_html(html):
    # 使用BeautifulSoup处理网页,传入参数html,使用html.parser模式处理
    soup = BeautifulSoup(html, 'html.parser')

    # 使用BeautifulSoup匹配想要的内容,使用find函数
    article_items = (
        soup.find("div", class_="article")
            .find("ol", class_="grid_view")
            .find_all("div", class_="item")
    )
    datas = []

    # 内容比较多分步提取内容
    for article_item in article_items:
        rank = article_item.find("div", class_="pic").find("em").get_text()
        info = article_item.find("div", class_="info")
        title = info.find("div", class_="hd").find("span", class_="title").get_text()
        stars = (
            info.find("div", class_="bd")
                .find("div", class_="star")
                .find_all("span")

        )
        rating_star = stars[0]["class"][0]
        rating_num = stars[1].get_text()
        comments = stars[3].get_text()

        datas.append({
            "rank": rank,
            "title": title,
            "rating_star": rating_star.replace("rating", "").replace("-t", ""),
            "rating_num": rating_num,
            "comments": comments.replace("人评价", "")
        })
    return datas
    pprint.pprint()


if __name__ == '__main__':

    # 下载所有的网页内容
    htmls = download_all_htmls()
    # pprint.pprint(parse_single_html(htmls[0]))

    # 解析网页内容并追到all_datas的列表中
    all_datas = []
    for html in htmls:
        all_datas.extend(parse_single_html(html))


    # 使用pandas模块,批量导入到表格中
    df = pd.DataFrame(all_datas)
    df.to_excel("doubanTOP250.xlsx")

效果图

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

参考文章

https://www.bilibili.com/video/BV1CY411f7yh/?p=15

  • 13
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是Python爬取豆瓣音乐TOP250数据的代码实例: ```python import requests from bs4 import BeautifulSoup url = 'https://music.douban.com/top250' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} def get_music_info(url): res = requests.get(url, headers=headers) soup = BeautifulSoup(res.text, 'html.parser') music_list = soup.find('div', class_='article').find_all('tr', class_=lambda x:x and x.startswith('item')) for music in music_list: rank = music.find('td', class_='').get_text().strip() music_name = music.find('div', class_='pl2').find('a').get_text().strip() music_info = music.find('div', class_='pl2').find('p').get_text().strip().split('/') music_artist = music_info[0].strip() music_album = music_info[1].strip() music_year = music_info[2].strip() if len(music_info) == 4 else '' music_rating = music.find('span', class_='rating_nums').get_text().strip() music_votes = music.find('span', class_='pl').get_text().strip() print("排名:{}\n歌曲名:{}\n歌手:{}\n专辑名:{}\n发行年份:{}\n评分:{}\n评论数:{}\n".format(rank, music_name, music_artist, music_album, music_year, music_rating, music_votes)) for i in range(0, 250, 25): get_music_info(url + '?start=' + str(i)) ``` 这个程序使用了requests和BeautifulSoup库来爬取豆瓣音乐TOP250的数据。程序首先定义了请求的URL和请求头部,然后使用requests库来获取网页的HTML文本内容,并使用BeautifulSoup库来解析HTML文本内容。 程序中的`get_music_info`函数用来获取每个音乐的详细信息,并将信息打印出来。在主程序中,我们将URL的`start`参数从0循环到225,每次调用`get_music_info`函数来获取一页的数据。 希望这个实例能够帮到你!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值