Python - 爬取豆瓣电影排行(T250)的信息

1.分析

针对所爬去的Url进行分析:

爬取的网址是:https://movie.douban.com/top250?start=0&filter=

分析网址'?'符号后的参数,第一个参数'start=0',这个代表页数,‘=0’时代表第一页,‘=25’代表第二页,以此类推。

1.1页面分析

明确要爬取的元素 :排名、名字、导演、评语、评分

1.2 页面代码分析

2.网站信息爬取

2.1 获取每部分电影信息

def get_html(web_url):
    header = {
        "User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) 
    AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"}
    html = requests.get(url=web_url,headers= header).text
    soup = BeautifulSoup(html,'lxml')
    data = soup.find('ol').find_all('li') #截取需要的内容
    return data

【代码说明】

requests.get()函数,会根据参数中url的链接,返回response对象

.text会将response对象转换成str类型

find_all()函数,会将html文本中的ol标签下的每一个li标签中的内容筛选出来

2.2 筛选信息保存进入文本

def get_info(all_move):

    f = open("./douban.txt", "a",encoding='UTF-8')

    for info in all_move:
        #排名
        nums = info.find('em')
        num = nums.get_text()

        #名字
        names = info.find("span")  # 名字比较简单 直接获取第一个span就是
        name = names.get_text()

        #导演
        charactors = info.find("p")  # 这段信息中有太多非法符号你需要替换掉
        charactor = charactors.get_text().replace(" ", "").replace("\n", "")  # 使信息排列规律
        charactor = charactor.replace("\xa0", "").replace("\xee", "").replace("\xf6", "").replace("\u0161", "").replace(
            "\xf4", "").replace("\xfb", "").replace("\u2027", "").replace("\xe5", "")

        #评语
        remarks = info.find_all("span", {"class": "inq"})
        if remarks:  # 这个判断是因为有的电影没有评语,你需要做判断
            remark = remarks[0].get_text().replace("\u22ef", "")
        else:
            remark = "此影片没有评价"
        print(remarks)

        #评分
        scores = info.find_all("span", {"class": "rating_num"})
        score = scores[0].get_text()

        f.write(num + '、')
        f.write(name + "\n")
        f.write(charactor + "\n")
        f.write(remark + "\n")
        # f.write(score)
        f.write("\n\n")

    f.close()  # 记得关闭文件

注意爬取元素的时候,会有非法符号(因为这些符号的存在,会影响你写入文本中),所以需要将符号用replace函数替换.

【Tips】注意写数据时将格式改为“UTF-8”,不然所写信息为乱码

3.全部代码(如下)

#coding:utf-8
from bs4 import BeautifulSoup
import requests
import os

def get_html(web_url):
    header = {
        "User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"}
    html = requests.get(url=web_url,headers= header).text
    soup = BeautifulSoup(html,'lxml')
    data = soup.find('ol').find_all('li') #截取需要的内容
    return data

def get_info(all_move):

    f = open("./douban.txt", "a",encoding='UTF-8')

    for info in all_move:
        #排名
        nums = info.find('em')
        num = nums.get_text()

        #名字
        names = info.find("span")  # 名字比较简单 直接获取第一个span就是
        name = names.get_text()

        #导演
        charactors = info.find("p")  # 这段信息中有太多非法符号你需要替换掉
        charactor = charactors.get_text().replace(" ", "").replace("\n", "")  # 使信息排列规律
        charactor = charactor.replace("\xa0", "").replace("\xee", "").replace("\xf6", "").replace("\u0161", "").replace(
            "\xf4", "").replace("\xfb", "").replace("\u2027", "").replace("\xe5", "")

        #评语
        remarks = info.find_all("span", {"class": "inq"})
        if remarks:  # 这个判断是因为有的电影没有评语,你需要做判断
            remark = remarks[0].get_text().replace("\u22ef", "")
        else:
            remark = "此影片没有评价"
        print(remarks)

        #评分
        scores = info.find_all("span", {"class": "rating_num"})
        score = scores[0].get_text()

        f.write(num + '、')
        f.write(name + "\n")
        f.write(charactor + "\n")
        f.write(remark + "\n")
        # f.write(score)
        f.write("\n\n")

    f.close()  # 记得关闭文件


if __name__ == "__main__":
    File_Path = os.getcwd()[:-4] + 'Test\\'  # 获取到当前文件的目录,并检查是否有report文件夹,如果不存在则自动新建report文件
    if not os.path.exists(File_Path):
        os.makedirs(File_Path)

    page = 0  # 初始化页数,TOP一共有250部   每页25部
    while page <= 225:
        web_url = "https://movie.douban.com/top250?start=%s&filter=" % page
        all_move = get_html(web_url)  # 返回每一页的网页
        get_info(all_move)  # 匹配对应信息存入本地
        page += 25

【结果展示】


参考链接:https://www.cnblogs.com/haichong/p/8067874.html

Wimb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wimb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值