国内的电影评分网站,要数豆瓣最有名。这次我们将爬取豆瓣至今TOP250的电影的详细信息。
豆瓣有专门一个 TOP250 的电影链接 -> https://movie.douban.com/top250,我们在此url基础上进行爬取。

发送请求

首先我们模拟浏览器发送请求,将数据保存为html网页格式,查看返回数据是否正常。

import requests
from bs4 import BeautifulSoup
import pandas as pd
import re#URL
url = 'https://movie.douban.com/top250'
#请求头
headers = {   "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36'
}
#发送请求
response = requests.get(url,headers = headers)
#解码
data = response.content.decode('utf-8')
#写入文件
with open('douban.html','w',encoding = 'utf8') as f:f.write(data)


返回的数据正常,接下来是解析数据,我们使用BeautifulSoup 解析。浏览器右击检查查看html代码。

解析数据

查看html代码我们发现电影信息都在li标签内

第一步,取出每部电影

# 转类型 bs4.BeautifulSoup'
soup = BeautifulSoup(data,'lxml')
# select----css选择器---选择<div id ='content' >下li标签
movie_list = soup.select('div[id="content"] li')
print(len(movie_list))
for i in movie_list:print(i)

第二步,解析数据详情

电影名字在类’title’内

评分在类’rating_num’内

简介在类’quote’内

其他信息在类’bd’下p标签

#解析出每部电影的信息
movies_name = []
movies_grade = []
movies_messages = []
movies_other = []
movies_year = []
movies_state = []
movies_sort = []#匹配年份
pattern = re.compile('[0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3}')for movie in movie_list:#电影名movies_name.append(movie.select_one('.title').get_text())#评分movies_grade.append(movie.select_one('.rating_num').get_text())#简介movies_messages.append(movie.select_one('.quote').get_text().replace('\n',''))#其他信息movies_other.append(movie.select_one('.bd p').get_text())
#把其他信息分离
for  movie_other in  movies_other:#删除空白字符movie_other = "".join(movie_other.split())#拆分字符串  #这里数据格式不是完全一样 有些导演名字太长没有显示主演 要进入电影详情页才能提取完整数据 #所以我们不提取导演、主演信息,只提取年份、国家及分类信息movie_other = movie_other.split('/')#年份  使用正则匹配movies_year.append(pattern.findall(movie_other[-3])[0])#movies_year.append(movie_other[-3][-4::])#国家movies_state.append(movie_other[-2])#分类movies_sort.append(movie_other[-1])#print(movie_other)print(movies_name)
print(movies_grade)
print(movies_messages)
#print(movies_other)
print(movies_year)
print(movies_state)
print(movies_sort)

提取结果

第三步,翻页

到目前为止,我们只提取了第一页的信息,下面我们找找翻页的url规律


可以看出,https://movie.douban.com/top250?start=0&filter=
将start的值每次加25即可实现翻页

#URL
base_url = 'https://movie.douban.com/top250?start={}&filter='
#请求头
headers = {   "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36'
}
#构建所有的url
url_list = []
for page in range(0,10):page = 25*pageurl = base_url.format(page)url_list.append(url)

构建全部url访问时爆出一个错误

检查后发现后面的有些电影没有简介

使用try捕获错误,使用空格替换。

        #简介try:movies_messages.append(movie.select_one('.quote').get_text().replace('\n',''))except AttributeError:movies_messages.append(' ')

**

第四步,写入文件

**

#使用panda模块将数据写入excel
movies_dict = {'电影名': movies_name,'分类': movies_sort,'评分': movies_grade,'年份': movies_year,'国家': movies_state,'简介': movies_messages
}
# 建立DataFrame对象
file = pd.DataFrame(movies_dict)
#写入文件
file.to_excel('./duoban.xlsx', encoding='gbk',index=False)

最后附上完整代码

import requests
from bs4 import BeautifulSoup
import pandas as pd
import re#URL
base_url = 'https://movie.douban.com/top250?start={}&filter='
#请求头
headers = {   "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36'
}
#构建所有的url
url_list = []
for page in range(0,10):page = 25*pageurl = base_url.format(page)url_list.append(url)movies_name = []
movies_grade = []
movies_messages = []
movies_other = []
movies_year = []
movies_state = []
movies_sort = []#匹配年份
pattern = re.compile('[0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3}')for url in url_list:print(url)#发送请求response = requests.get(url,headers = headers)#解码data = response.content.decode('utf-8')#写入文件#with open('douban.html','w',encoding = 'utf8') as f:#    f.write(data)# 转类型 bs4.BeautifulSoup'soup = BeautifulSoup(data,'lxml')# select----css选择器---选择<div id ='content' >下li标签movie_list = soup.select('div[id="content"] li')#print(len(movie_list))#for i in movie_list:#    print(i)#解析出每部电影的信息for movie in movie_list:#电影名movies_name.append(movie.select_one('.title').get_text())#评分movies_grade.append(movie.select_one('.rating_num').get_text())#其他信息movies_other.append(movie.select_one('.bd p').get_text())#简介try:movies_messages.append(movie.select_one('.quote').get_text().replace('\n',''))except AttributeError:movies_messages.append(' ')#把其他信息分离for  movie_other in  movies_other:#删除空白字符movie_other = "".join(movie_other.split())#拆分字符串  #这里数据格式不是完全一样 有些导演名字太长没有显示主演 要进入电影详情页才能提取完整数据 #所以我们不提取导演、主演信息,只提取年份、国家及分类信息movie_other = movie_other.split('/')#年份  使用正则匹配movies_year.append(pattern.findall(movie_other[-3])[0])#movies_year.append(movie_other[-3][-4::])#国家movies_state.append(movie_other[-2])#分类movies_sort.append(movie_other[-1])#print(movie_other)movies_other = []
#print(movies_name)
#print(movies_grade)
#print(movies_messages)
#print(movies_other)
#print(movies_year)
#print(movies_state)
#print(movies_sort)
#print(len(movies_name),len(movies_grade),len(movies_year),len(movies_state),len(movies_sort))#使用panda模块将数据写入excel
movies_dict = {'电影名': movies_name,'分类': movies_sort,'评分': movies_grade,'年份': movies_year,'国家': movies_state,'简介': movies_messages
}
# 建立DataFrame对象
file = pd.DataFrame(movies_dict)
#写入文件
file.to_excel('./duoban.xlsx', encoding='gbk',index=False)

爬取豆瓣 TOP250 电影排行榜相关推荐

  1. 爬取豆瓣TOP250电影排行榜

    正则表达式的概念 使用单个字符串来描述一系列符合某个句法规则的字符串 是对字符串操作的一种逻辑公式 应用场景:处理文本和数据 正则表达式过程:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配, ...

  2. PowerBI也能做爬虫:爬取豆瓣Top电影排行榜

    对于简单的页面数据爬取,其实使用PowerBI就可以可视化直接实现了,不需要另外写爬虫程序.本文以爬取豆瓣Top250电影排行榜示例说明下操作的基本过程. 一.分析URL规律及网页结构 打开豆瓣电影T ...

  3. [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

    这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对 ...

  4. 爬取豆瓣top250电影并分析

    爬取豆瓣top250电影,提取评论关键词,然后将同一国家的关键词做成一个词云,轮廓是每个国家的地图轮廓 爬取数据 需要爬取电影名称.导演.年份.地区和前10个评论除了地区,其他的都没什么问题,我们来研 ...

  5. scrapy爬取豆瓣top250电影数据

    scrapy爬取豆瓣top250电影数据 scrapy框架 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. sc ...

  6. 【实战1】用BeatuifulSoup解析器爬取豆瓣Top250电影的名称

    [实战1]用BeatuifulSoup解析器爬取豆瓣Top250电影的名称 一. 爬虫的普遍步骤 二. 项目目标分析 三.完整爬取代码 参考链接: https://www.bilibili.com/v ...

  7. 【实战2】爬取豆瓣Top250电影的海报

    [实战2]爬取豆瓣Top250电影的海报 一. 项目目标分析 二. 完整代码 参考链接: https://www.bilibili.com/video/BV1ZJ411N7Fq?p=4 一. 项目目标 ...

  8. Python爬取豆瓣Top250电影中2000年后上映的影片信息

    Python爬取豆瓣Top250电影中2000年后上映的影片信息 前言 双十一前加在京东购物车的一个东西,价格330,Plus会员用券后差不多310.双十一当天打开看了下399,还得去抢满300减10 ...

  9. python采用requests+bs4爬取豆瓣top250电影信息

    爬取豆瓣top250电影说明 (链接:https://movie.douban.com/top250,可爬取一页或者多页(输出电影的正标题(肖申克的救赎),副标题( The Shawshank Red ...

  10. 爬取豆瓣TOP250电影的评分、评价人数、短评等信息,并在其保存在sql数据库中。

    爬取目标 爬取豆瓣TOP250电影的评分.评价人数.短评等信息,并在其保存在sql数据库中. 最终实现效果如图: 确定爬取的URL 爬取的网页地址为:https://movie.douban.com/ ...

最新文章

  1. App Feedback
  2. python学习笔记简书_Python学习笔记
  3. Glib2版本差异初始化(三)
  4. 计算机端口联机,网络端口之二端口传输机制
  5. java EE :GenericServlet 抽象类、ServletConfig 接口
  6. 《西河大鼓——调寇》(艳桂荣音配像)
  7. 10 分钟看懂消息队列 RocketMQ
  8. 【更新】PDF控件Spire.PDF V3.9.463发布 | 修复多个PDF转换bug
  9. VirtualBox安装及使用说明和虚拟机安装XP系统图文教程
  10. nlp 停用词处理java_NLP入门:文本预处理(一)停用词
  11. NNDL 实验三 线性回归
  12. 第三方调用微信支付接口
  13. 恩智浦(飞思卡尔)智能车舵机和电机PID控制
  14. 单片机学习 8-LED点阵实验
  15. 启动计算机 登管理员用户,Windows xp系统使用管理员账户登入系统的技巧
  16. 谷歌邮箱无法登录问题
  17. 初始C语言之简单认识C语言-1
  18. php中间件最简单实现,my_test_simple_framework
  19. K8s-临时容器 Ephemeral Containers
  20. 【每天读一点英文】gnuhpc:The World As I See It(节选)

热门文章

  1. python代码 练习3:空气质量查询工具
  2. ERC-3525 通过倒计时|SFT 是什么?有什么用?
  3. 明翰大数据Spark与机器学习笔记V0.1(持续更新)
  4. DB2日期函数DATE函数
  5. STM32对于1997与2007电表数据规约的解析
  6. K8S教程(7)使用探针对容器进行健康检查
  7. Altium Designer16 精心总结
  8. 有一种友谊可以美的让人心颤——CHANDLER和JOEY 转贴 来自friends论坛
  9. C语言知识层次结构图
  10. windows10下使用DNW下载