第一个爬虫经历----豆瓣电影top250(经典案例)

Posted on   樱木007  阅读(324)  评论(0编辑  收藏  举报

      因为要学习数据分析,需要从网上爬取数据,所以开始学习爬虫,使用python进行爬虫,有好几种模拟发送请求的方法,最基础的是使用urllib.request模块(python自带,无需再下载),第二是requests模块(第三方库,需要pip install requests),第三是直接使用scaper模块(第三方库,需要下载)。

      本次开发使用的工具是jupyter notebook,使用到的模块主要有requests(模拟http请求,详情请看http://2.python-requests.org/zh_CN/latest/user/quickstart.html),BeautifulSoup(处理请求的数据,以dom的形式进行处理,详细查看https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/),pandas(将处理后的数据存储为DataFrame,如果想详细了解此库可以查看https://www.cnblogs.com/lvpengbo/p/10851096.html),re(正则表达式库 https://docs.python.org/zh-cn/3/library/re.html)。

    具体代码如下:

复制代码
import requests
import pandas as pd
import re
from bs4 import BeautifulSoup
url='https://movie.douban.com/top250?start={}&filter='
headers={"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"}
movie_list=[]
movie_rank=[]
movie_score=[]
people_num=[]
movie_year=[]
county_list=[]
director_list=[]
quote_list=[]
for i in range(10):
    start=i*25
    request_url=url.format(start)
    response=requests.get(request_url,headers=headers)
    data=response.content.decode('utf-8')
    soup=BeautifulSoup(data,'html.parser')
    all_item_divs=soup.find_all(class_='item')
    for item in all_item_divs:
        movie_list.append(item.find('span').get_text())
        movie_rank.append(item.find('em').get_text())
        movie_score.append(item.find('span',class_='rating_num').get_text())
        num=item.find('div',class_='star').contents[7].get_text()
        people_num.append(int(re.findall('\d+',num)[0]))
        br_value=item.find('p').get_text()
        movie_year.append(re.findall('\d+',br_value)[0].strip())
        director=list(filter(None,br_value.split('/')[0].split(':')[1].split(' ')))[0]
        director_list.append(director)
        county_list.append(br_value.split('/')[2].strip())
        if item.find('span',class_='inq')==None:
            quote_list.append('')
        else:
            quote_list.append(item.find('span',class_='inq').get_text()) 
df=pd.DataFrame(
    {'排名':movie_rank,
     '电影名称':movie_list,
     '上映日期':movie_year,
     '国家':county_list,
      '导演':director_list,
     '评分':movie_score,
     '评论人数':people_num,
    '经典台词':quote_list})
df.to_csv('豆瓣250.csv')
复制代码

 数据集结果:国家这列有问题,字符串切割的问题,主演和电影类型也是因为字符串切割问题没有获取到

 

 

    

    

     

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义

随笔 - 88, 文章 - 0, 评论 - 18, 阅读 - 47077

Copyright © 2025 樱木007
Powered by .NET 9.0 on Kubernetes

点击右上角即可分享
微信分享提示