Python爬虫完整项目:豆瓣电影Top250(含完整代码)

经过前面几篇文章的铺垫,现在我们终于可以来获取自己想要的信息了,获取豆瓣电影Top250的电影链接,电影图片链接,电影名称,评分等等信息。

完整代码

# -*- coding = utf-8 -*-
# @Time : 2021-02-10 17:32
# @Author : 穆永恒
# @File : spider_1.py
# @Software: PyCharm

# 导入所用到的包
from bs4 import BeautifulSoup      # 网页解析,获取数据
import re        # 正则表达式,进行文字匹配
import urllib.request, urllib.error    # 指定URL,获取网页数据
import xlwt      # 进行excel操作
import sqlite3   # 进行SQLite数据库操作


# 主函数
def main():
    # 要爬取的网址
    baseurl = "https://movie.douban.com/top250?start="
    # 1.爬取网页
    datalist = getData(baseurl)
    # 3.保存数据
    savepath = "豆瓣电影Top250.xls"
    saveData(datalist, savepath)



# 创建想要提取内容的正则表达式(非常重要)
# 影片链接
findLink = re.compile(r'<a href="(.*?)">')  # 创建正则表达式对象(规则)
# 图片
findImgSrc = re.compile(r'<img.*src="(.*?)"')
# 片名
findTitle = re.compile(r'<span class="title">(.*)</span>')
# 影片评分
findRating = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
# 评价人数
findJudge = re.compile(r'<span>(\d*)人评价</span>')




# 爬取网页
def getData(baseurl):
    datalist = []
    for i in range(0, 10):
        n = str(i*25)   # 页数
        url = baseurl + n  # 每一页的网址
        html = askURL(url)  # 访问每一个网页的内容

        # 逐一解析数据
        soup = BeautifulSoup(html, "html.parser")
        # 找到所要信息所在的网页中的位置
        for item in soup.find_all('div', class_="item"):
            # print(item)
            data = []  # 保存一部电影的全部信息
            item = str(item)
            # 获取到影片的超链接
            link = re.findall(findLink, item)[0]   # 获取电影链接
            data.append(link)  # 添加电影链接
            imgSrc = re.findall(findImgSrc, item)[0]  # 获取图片链接
            data.append(imgSrc)
            title = re.findall(findTitle, item)  # 获取电影名称
            if(len(title) == 2):                 # 区分中文名称和外文名称
                data.append(title[0])
                otitle = title[1].replace("/", "")
                data.append(otitle)
            else:
                data.append(title[0])
                data.append(' ')  # 如果没有外文名称则用空格占位,防止混乱
            rating = re.findall(findRating, item)[0]   # 获取评分
            data.append(rating)
            judge = re.findall(findJudge, item)[0]   # 获取评价人数
            data.append(judge)
            
            datalist.append(data)  # 将一步电影的所有爬取信息存入datalist列表

    return datalist    # 返回所有电影信息


# 得到指定一个url的网页内容
def askURL(url):
    # 模拟浏览器头部信息,向豆瓣服务器发送消息(伪装)
    # 用户代理,表示告诉豆瓣服务器,我们是什么类型的机器/浏览器(本质上告诉浏览器,我们可以接受什么水平的文件内容)
    head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36"}

    request = urllib.request.Request(url, headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(request)
        html = response.read().decode("utf-8")
    except urllib.error.URLError as e:
        if hasattr(e, "code"):
            print(e.code)
        if hasattr(e, "reason"):
            print(e.reason)

    return html


# 保存数据
def saveData(datalist, savepath):
    workbook = xlwt.Workbook(encoding="utf-8")  # 创建workbook对象
    worksheet = workbook.add_sheet('sheet1')  # 创建工作表
    # 创建列名
    col = ("影片链接", "图片链接", "影片中文名称", "影片外文名称", "影片评分", "评价人数")
    for i in range(0, 6):  # 写入列名
        worksheet.write(0, i, col[i]) # 列名
    for i in range(0, 250):  # 写入电影信息
        print("第%d行" % i+1)
        data = datalist[i]
        for j in range(0, 6):
            worksheet.write(i+1, j, data[j])
    # 保存文件
    workbook.save(savepath)


if __name__ == "__main__":
    # 调用函数
    main()
    print("爬取完毕!")

以上就是爬取一个网页的完整代码,当然都是最基本的内容,以后如果想用的话,可以直接利用这个模板进行拓展,爬取到更多我们想要的数据,当然后面的课程还有将数据存入数据库和可视化的一些内容,后续再慢慢学习吧!

Keep Moving! Keep Learning!

大家一起加油!

上一篇:实操_Python爬取豆瓣TOP250


下一篇:JDK1.8 install,java程序runing机制 and IDEA first 程序