python爬取豆瓣电影top250_python3爬取豆瓣top250电影
需求:爬取豆瓣电影top250的排名、电影名称、评分、评论人数和一句话影评
环境:python3.6.5
准备工作:
豆瓣电影top250(第1页)网址:https://movie.douban.com/top250?start=0 或者 https://movie.douban.com/top250
每页展示25个电影,一共10张翻页
第2页:https://movie.douban.com/top250?start=25&filter=
第3页:https://movie.douban.com/top250?start=50&filter=
……
最后一页:https://movie.douban.com/top250?start=225&filter=
由此可见,除了首页代码其他9页(相对首页增加了一些字符串)以25递增
查看每页的html代码:
在浏览器空白区域点击“查看源代码”(不同的浏览器可能起的名字不一样),找到所需要的内容。
快速定位html有效信息的方法:
例如排名第一的电影是《肖申克的救赎》,在html源码中搜索(ctrl+F)这个名字(不要加书名号),快速定位大致位置,如下图
仔细研究html代码:
所有影片存放在ol列表中,每一部影片在一个li中,需要提取的信息在不同的标签中,如下图所示
代码逻辑为:查找ol→li→各个标签
需要用到的第三方库:
from bs4 import BeautifulSoup asbsfrom urllib import request
读取html源码(以首页为例)
1 h="https://movie.douban.com/top250"
2 resp =request.urlopen(h)3 html_data = resp.read().decode('utf-8')4 soup = bs(html_data,'lxml')5 #print(soup.prettify())
第5行的soup.prettify()输出的比较好看,但是有可能更改一些并列标签的前后位置,用这个输出只是看起来更人性化一些
查找ol标签,获取本页面上25部电影
通过class名称,因为这个class是唯一命名的,因此无需find_all,只需要find(这个是查找第一个)
1 movieList = soup.find('ol',attrs={'class':"grid_view"})
在ol内查找li标签,无class和id,只需标签名即可
1 movie = movieList.find_all('li')#获取每一个li(每个li是一个电影),以数组方式
返回结果是一位数组,每个元素是li标签
在每一个li标签内提取有用信息
1 for i in range(0,25):2 name = movie[i].find('span',class_="title").string#获得影片名称
3 score = movie[i].find('span',class_="rating_num").string#获得影片评分
4 num = movie[i].find('div',class_="star").find_all('span')[-1].string.strip('人评价')#获得影片评价人数
5 quote = movie[i].find('span',class_="inq")#获得影片短评
.string和get_text()在本代码中显示结果一样(有些代码中返回显示也是不同的),但是返回类型不同
注意第4行获取评价人数时,span标签内无class和id等,只能先把div中所有的信息提取(返回结果是一位数组),人数在数组中最后一个,通过数组方法[-1]提取这个标签,通过string提取标签内内容,再用strip字符串方法去掉“人评价”这几个字
还有一点需要注意是,有几部影片是没有短评的(通过运行程序的结果才能看到,返回的是None),如果需要显示的更加人性化一些,添加以下语句:
1 if quote isNone:2 quote = "暂无"
3 else:4 quote = quote.string
查找所有信息:不要想着把10页的html先拼接成一个html处理,这样的的html进行soup时只能提取到第一个标签内的,也就是说只能查到第一页的信息。因此总体思路还是遍历每一页的电影信息,然后将结果拼接成数组。如果只是print出来或者逐行写入歧途文件的话无需整合所有影片
写入txt文件,提取出的结果是二维数组
1 #将数组movieData250写入文件txt
2 importcodecs3 s ="—————————豆瓣电影top250——————————\r\n"
4 f = codecs.open("豆瓣电影top250.txt",'w','utf-8')5 f.write(s)6
7 for i inmovieData250:8 f.write(str(i)+'\r\n') #\r\n为换行符
9 f.close()
源代码:
1 #豆瓣电影前250信息,写入txt文件
2
3 from bs4 importBeautifulSoup as bs4 from urllib importrequest5 k =06 n = 1
7 movieData250 =[]8
9 #读取每一个网页25个电影信息
10 definfo25():11 movieData =[]12 for i in range(0,25):13 name = movie[i].find('span',class_="title").string#获得影片名称
14 score = movie[i].find('span',class_="rating_num").string#获得影片评分
15 num = movie[i].find('div',class_="star").find_all('span')[-1].string.strip('人评价')#获得影片评价人数
16 quote = movie[i].find('span',class_="inq")#获得影片短评
17 if quote isNone:18 quote = "暂无"
19 else:20 quote =quote.string21 #movieData[i] = [i+1,name,score,num,quote]
22 movieData.append([i+1+k,name,score,num,quote])23 #print(movieData)
24 returnmovieData25 #movieData250 = movieData250 + movieData
26
27
28
29 while(k ==0):30 h="https://movie.douban.com/top250"
31 resp =request.urlopen(h)32 html_data = resp.read().decode('utf-8')33 soup = bs(html_data,'lxml')34 #print(soup.prettify())
35 #movieList=soup.find('ol')#寻找第一个ol标签,得到所有电影
36 #movieList=soup.find('ol',class_="grid_view")#以下两种方法均可
37 movieList = soup.find('ol',attrs={'class':"grid_view"})38 movie = movieList.find_all('li')#获取每一个li(每个li是一个电影),以数组方式
39 movieData250 +=info25()40 k += 25
41
42 while(k<250):43
44 h = "https://movie.douban.com/top250?start=" + str(k) + "&filter="
45 resp=request.urlopen(h)46 html_data=resp.read().decode('utf-8')47 soup=bs(html_data,'lxml')48 #print(soup.prettify())
49 #movieList=soup.find('ol')#寻找第一个ol标签,得到所有电影
50 #movieList=soup.find('ol',class_="grid_view")#以下两种方法均可
51 movieList=soup.find('ol',attrs={'class':"grid_view"})52 movie=movieList.find_all('li')#获取每一个li(每个li是一个电影),以数组方式
53 movieData250 +=info25()54 k+=25
55
56 print(movieData250)57
58
59 #将数组movieData250写入文件txt
60 importcodecs61 s ="—————————豆瓣电影top250——————————\r\n"
62 f = codecs.open("豆瓣电影top250.txt",'w','utf-8')63 f.write(s)64
65 for i inmovieData250:66 f.write(str(i)+'\r\n') #\r\n为换行符
67 f.close()
输出的txt:
显示结果不是很友好~~~
python爬取豆瓣电影top250_python3爬取豆瓣top250电影相关推荐
- [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息
这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对 ...
- python大规模获取豆瓣影评_python爬取豆瓣电影排行榜(requests)
''' 爬取豆瓣电影排行榜 设计思路: 1.先获取电影类型的名字以及特有的编号 2.将编号向ajax发送get请求获取想要的数据 3.将数据存放进excel表格中 ''' 环境部署: 软件安装: 模块 ...
- python爬虫——爬取豆瓣TOP250电影
相信很多朋友在看一部电影的时候喜欢先去豆瓣找一下网友对该片的评价.豆瓣作为国内最权威的电影评分网站,虽然有不少水军和精日精美分子,但是TOP250的电影还是不错的,值得一看. 爬取目标 本文将爬取豆瓣 ...
- python爬取豆瓣排行榜电影(静态爬取)(二次爬取)
目录 python爬取豆瓣排行榜电影(静态爬取) 获取网站url 获取网站headers get请求访问url BeautifulSoup解析网站 爬取html数据 完整代码 python爬取豆瓣排行 ...
- Python爬取豆瓣Top250电影中2000年后上映的影片信息
Python爬取豆瓣Top250电影中2000年后上映的影片信息 前言 双十一前加在京东购物车的一个东西,价格330,Plus会员用券后差不多310.双十一当天打开看了下399,还得去抢满300减10 ...
- Python爬虫菜鸟入门,爬取豆瓣top250电影 (自己学习,如有侵权,请联系我删除)
Python爬虫菜鸟入门,爬取豆瓣top250电影 (自己学习,如有侵权,请联系我删除) import requests from bs4 import BeautifulSoup import ti ...
- Python爬虫小白教程(二)—— 爬取豆瓣评分TOP250电影
文章目录 前言 安装bs4库 网站分析 获取页面 爬取页面 页面分析 其他页面 爬虫系列 前言 经过上篇博客Python爬虫小白教程(一)-- 静态网页抓取后我们已经知道如何抓取一个静态的页面了,现在 ...
- Python爬取豆瓣Top250电影可见资料并保存为excel形式
Python爬取豆瓣Top250电影可见资料并保存为excel形式 利用requests第三方库实现网页的元素爬取,再使用openpyxl库进行信息的录入. 具体思路 1.分析网页的headers. ...
- python爬虫爬取豆瓣top250电影影评
信息系统课程项目,小组准备做一个电影推荐系统,自己选了觉得很有趣的资源模块,需要获取电影的评价资源等信息.花了大约一周看Web Scraping with Python这本书,对爬虫有了大体但是初略的 ...
- python selenium爬虫豆瓣_Scrapy+Selenium爬取豆瓣电影评论
首先需要对目标网站进行分析,具体的分析这里不详细介绍.目标网站:豆瓣某个电影评论页面 https://movie.douban.com/subject/1292052/reviews,这个电影是肖申克 ...
最新文章
- Makefile文件应用——huge项目
- Vue3 核心技能从入门到难点攻破,看这一篇就够了!
- 攻防世界-web-i-got-id-200-从0到1的解题历程writeup
- lnmp应用服务器安装手册
- 网络流 增广路 回退
- EasyExcel(笔记)
- flume avro java 发送数据_flume将数据发送到kafka、hdfs、hive、http、netcat等模式的使用总结...
- no connection could be made because the target machine actively refused it.问题解决
- Java中循环删除list中元素的方法总结(总结)
- 计算机网络—物理层(思维导图)
- 通俗易懂的理解 Redux(知乎)
- 10款滑动门代码_jquery 滑动门_js滑动门_tab滑动门_jquery 选项卡_js选项卡_tab选项卡效果(一)
- 常见的list转化map 实现
- excel宏 批量生成返回目录
- 服务器被攻击显示,怎么查看服务器被攻击
- linux之etc/fstab配置文件
- Sign in With Apple (苹果授权登录)
- arm GIC介绍之一
- 北京工业大学计算机考研录取名单,2018年北京工业大学考研拟录取名单公示——信息学部...
- vue iview表单验证,清除表单验证/去掉表单验证的*号
热门文章
- 管制条目的地DDS文件生成器,ATC3版
- 2022-2028年全球与中国工业用智能眼镜行业产销需求与投资预测分析
- c语言程序设计问号是什么意思,在C语言中,该语句在z=xy?x:y中是什么意思,问号表示什么意思...
- 墨言教育插画干货分享||日本插画为什么独树一帜,那么受欢迎
- 【51单片机】 利用定时器产生生日快乐歌
- python实现12306车票查询
- 推荐一个巨好用的查看gihub源码的插件-Octotree
- 小程序-JAVA服务端解密与微信绑定的手机号
- RAM的 Parity 与 ECC
- 一、科里奥利质量流量计