基于bs4+requests的豆瓣电影爬虫

简介: 1.爬取豆瓣电影前250详情页面豆瓣电影前250详情页面持久化为250个htm文件,打包文件下载链接: https://pan.baidu.com/s/1_zlZJQJtl9pPEJUGYVMYaw 密码: ehrq文件解压后的文件夹命名为doubanSourcePages,下面代码复制到py文件中,py文件和doubanSourcePages文件夹在同一级目录下。

1.爬取豆瓣电影前250详情页面

豆瓣电影前250详情页面持久化为250个htm文件,打包文件下载链接: https://pan.baidu.com/s/1_zlZJQJtl9pPEJUGYVMYaw 密码: ehrq
文件解压后的文件夹命名为doubanSourcePages,下面代码复制到py文件中,py文件和doubanSourcePages文件夹在同一级目录下

from bs4 import BeautifulSoup as bs
import re
import pandas as pd

def cssFind(movie,cssSelector,nth=1):
    if len(movie.select(cssSelector)) >= nth:
        return movie.select(cssSelector)[nth-1].text.strip()
    else:
        return ''

def reFind(pattern,sourceStr,nth=1):
    if len(re.findall(pattern,sourceStr)) >= nth:
        return re.findall(pattern,sourceStr)[nth-1]
    else:
        return ''

if __name__ == "__main__":
    movie_list =[]
    for i in range(1,251):
        print("正在解析排名第%d页"%i)
        fileName = "doubanSourcePages/%03d.html"%i
        try:
            with open(fileName,encoding='utf8') as file:
                soup = bs(file,'lxml')
            movie = {}
            movie['得分'] = cssFind(soup, 'strong[class="ll rating_num"]')
            movie['片名'] = cssFind(soup, 'span[property="v:itemreviewed"]')
            info = cssFind(soup, "div[id='info']")
            for item in info.split('\n')[:9]:
                key = item.split(":")[0]
                value = item.split(":")[1]
                movie[key] = value
            movie_list.append(movie)
            movie['标签'] = ','.join([k.text for k in soup.select("div.tags a")])
            movie['图片链接'] = soup.select('a.nbgnbg img')[0]['src']
        except:
            print("解析排名第%d页失败"%i)
            movie_list.append({})
    df = pd.DataFrame(movie_list,columns=movie_list[0].keys())
    df.to_excel("豆瓣电影详情信息.xlsx")

2.详情页面持久化

代码如下:

from bs4 import BeautifulSoup as bs
import requests
from time import sleep

def save_webPage(url,fileName):
    response = requests.get(url)
    response.encoding = 'utf-8'
    with open(fileName,'w',encoding='utf-8') as file:
        file.write(response.text)

if __name__ == "__main__":
    #解析网页并将每条电影信息插入mysql数据库
    url_before = "https://movie.douban.com/top250?start={}"
    count = 0
    for i in range(0,250,25):
        url = url_before.format(i)
        fileName = "{}-{}.html".format(i+1,i+25)
        save_webPage(url,fileName)
        response = requests.get(url)
        response.encoding = 'utf-8'
        soup = bs(response.text, 'lxml')
        movie_list = soup.select("ol.grid_view li")
        for movie in movie_list:
            nextUrl = movie.select("div.hd a")[0]['href']
            count +=1
            fileName = "%03d.html"%count
            print("正在把排名第%d的电影详情页面保存到本地"%count)
            save_webPage(nextUrl,fileName)
        sleep(3)

3.人员随机分组

import random

def getGroup(lt,n):
    lt_len = len(lt)
    left = lt_len%n
    m = lt_len//n
    group_number_list = [m] * (n-left) + [m+1] * left
    random.shuffle(group_number_list)
    group_list = []
    print(group_number_list)
    for group_number in group_number_list:
        group = random.sample(lt,group_number)
        print(group)
        for i in group:
            lt.remove(i)
        group_list.append(group)
    return group_list

if __name__ == "__main__":
    name_str = "陶宇,王燕琪,雷杰,韦民童,余鹏,李波,雷坤,"\
        "石月,丁松,郑志杰,陶雨,程韶曦,葛振刚,王雪虎,李响,仲雯,王海宾"
    name_list = name_str.split(',')
    getGroup(name_list,4)
目录
相关文章
|
2月前
|
数据采集 数据可视化 算法
【优秀python案例】基于Python的豆瓣电影TOP250爬虫与可视化设计与实现
本文设计并实现了一个基于Python的豆瓣电影TOP250爬虫与可视化系统,通过获取电影评分、评论并应用词云和饼图等可视化技术,为用户提供了电影评价的直观展示和深入分析。
【优秀python案例】基于Python的豆瓣电影TOP250爬虫与可视化设计与实现
|
15天前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
在网络数据的海洋中,网络爬虫遵循HTTP协议,穿梭于互联网各处,收集宝贵信息。本文将从零开始,使用Python的requests库,深入解析HTTP协议,助你构建自己的网络爬虫帝国。首先介绍HTTP协议基础,包括请求与响应结构;然后详细介绍requests库的安装与使用,演示如何发送GET和POST请求并处理响应;最后概述爬虫构建流程及挑战,帮助你逐步掌握核心技术,畅游数据海洋。
47 3
|
15天前
|
数据采集 API 开发者
🚀告别网络爬虫小白!urllib与requests联手,Python网络请求实战全攻略
在网络的广阔世界里,Python凭借其简洁的语法和强大的库支持,成为开发网络爬虫的首选语言。本文将通过实战案例,带你探索urllib和requests两大神器的魅力。urllib作为Python内置库,虽API稍显繁琐,但有助于理解HTTP请求本质;requests则简化了请求流程,使开发者更专注于业务逻辑。从基本的网页内容抓取到处理Cookies与Session,我们将逐一剖析,助你从爬虫新手成长为高手。
39 1
|
5天前
|
数据采集
做个爬虫吧:豆瓣《八佰》影评
做个爬虫吧:豆瓣《八佰》影评
14 0
|
7天前
|
数据采集
爬虫之bs4学习
爬虫之bs4学习
|
8天前
|
数据采集 Python
Flask获取post,get参数,以及 爬虫 requests的get,post参数详解
Flask获取post,get参数,以及 爬虫 requests的get,post参数详解
|
2月前
|
数据采集 XML 前端开发
五:《智慧的网络爬虫》— bs4数据解析
【8月更文挑战第4天】bs4(Beautiful Soup 4)是python的一个库,最主要的功能是从网页抓取数据,它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。BeautifulSoup会帮你节省数小时甚至数天的工作时间。在本篇文章的最后设置了一个爬取全国所有天气的项目作为本篇文章的总结,愿大家有所收获~
47 6
五:《智慧的网络爬虫》— bs4数据解析
|
2月前
|
数据采集 数据可视化 关系型数据库
【优秀python web设计】基于Python flask的猫眼电影可视化系统,可视化用echart,前端Layui,数据库用MySQL,包括爬虫
本文介绍了一个基于Python Flask框架、MySQL数据库和Layui前端框架的猫眼电影数据采集分析与可视化系统,该系统通过爬虫技术采集电影数据,利用数据分析库进行处理,并使用Echart进行数据的可视化展示,以提供全面、准确的电影市场分析结果。
|
2月前
|
数据采集 程序员 测试技术
比 requests 更强大 Python 库,让你的爬虫效率提高一倍!
比 requests 更强大 Python 库,让你的爬虫效率提高一倍!
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
104 4