python 爬虫豆瓣top250
网页api:https://movie.douban.com/top250?start=0&filter=
用到的模块:urllib,re,csv
捣鼓一上午终于好了,有些小问题

(top218有bug)具体问题:上图没有主演:用到正则表达式时取出过多的值,下图则是正常取值

所以取前200名,具体python代码实现如下,望大佬指导
#! /usr/bin/python3
# -*- coding:UTF-8 -*-
from urllib import request
import re,csv class MovieTopForDouBan(object):
def __init__(self):
self.start = 0
self.param = '&filter='
self.headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}
self.file_path = 'D:\\'
self.head = ['排名','名称','别名','其他名称','导演','主演','年份','地区','类型','平均分','人数','短评']
self.movie_list=[] def get_page(self):
try:
url = 'https://movie.douban.com/top250?start=' + str(self.start)
req = request.Request(url, headers=self.headers)
response = request.urlopen(req)
page = response.read().decode('utf-8')
page_num = (self.start + 25) // 25
print('正在抓取第' + str(page_num) + '页数据...')
self.start += 25
return page
except request.URLError as e:
if hasattr(e, 'reason'):
print('抓取失败,失败原因:', e.reason) def get_movie_info(self):
pattern = re.compile(u'<div.*?class="item">.*?<em class="">(.*?)</em>'
u'.*?<span.*?class="title">(.*?)</span>'
u'.*?<span.*?class="title">(.*?)</span>'
u'.*?<span.*?class="other">(.*?)</span>'
u'.*?<div.*?class="bd">.*?<p.*?class="">'
u'.*?导演:(.*?) .*?主演: (.*?)<br>'
u'(.*?) / (.*?) / (.*?)</p>.*?<div.*?class="star">'
u'.*?<span.*?class="rating_num".*?property="v:average">(.*?)</span>'
u'.*?<span>(.*?)人评价</span>.*?</div>'
u'.*?<span.*?class="inq">(.*?)</span>.*?</p>', re.S)
while self.start <= 176:#取前俩百 (top:218 电影名:初恋这件小事)有bug
page=self.d=self.get_page()
movies=re.findall(pattern,page)
for movie in movies:
data =list(movie)
data[2] = data[2].lstrip(' / ')
data[3] = data[3].lstrip(' / ')
data[6] = data[6].lstrip()
data[8] = data[8].rstrip()
self.movie_list.append(data) def write_text(self):
print('开始向文件写入数据....')
with open(self.file_path+'movie_info.txt','w',encoding='utf-8') as file_TopText:
try:
for movie in self.movie_list:
file_TopText.write('电影排名:' + movie[0] + '\r\n')
file_TopText.write('电影名称:' + movie[1] + '\r\n')
file_TopText.write('外文名称:' + movie[2] + '\r\n')
file_TopText.write('电影别名:' + movie[3] + '\r\n')
file_TopText.write('导演姓名:' + movie[4] + '\r\n')
file_TopText.write('主演姓名:' + movie[5] + '\r\n')
file_TopText.write('上映年份:' + movie[6] + '\r\n')
file_TopText.write('制作国家/地区:' + movie[7] + '\r\n')
file_TopText.write('电影类别:' + movie[8] + '\r\n')
file_TopText.write('电影评分:' + movie[9] + '\r\n')
file_TopText.write('参评人数:' + movie[10] + '\r\n')
file_TopText.write('简短影评:' + movie[11] + '\r\n\r\n')
print('抓取结果写入文件成功...')
except Exception as e:
print(e)
print('数据写入完毕....') def write_csv_file(self):
path = self.file_path + 'movie_info.csv'
common=0
try:
with open(path, 'w', newline='',encoding='utf-8') as csv_file:
writer = csv.writer(csv_file, dialect='excel')
if self.head is not None:
writer.writerow(self.head)
for row in self.movie_list:
writer.writerow(row)
common+=1
print("将CSV文件写入路径%s成功。" % path)
except Exception as e:
print("将CSV文件写入路径: %s, 信息: %s" % (path, e))
print(common) def main(self):
print('开始从豆瓣电影抓取数据........')
self.get_movie_info()
self.write_text()
#self.write_csv_file()
print('数据抓取完毕...') if __name__ == '__main__':
movie = MovieTopForDouBan()
movie.main()
d盘根目录生成一个movie_info.txt 文件

python 爬虫豆瓣top250的更多相关文章
- python爬虫---豆瓣Top250电影采集
代码: import requests from bs4 import BeautifulSoup as bs import time def get_movie(url): headers = { ...
- Forward团队-爬虫豆瓣top250项目-项目总结
托管平台地址:https://github.com/xyhcq/top250 小组名称:Forward团队 组长:马壮 成员:李志宇.刘子轩.年光宇.邢云淇.张良 我们这次团队项目内容是爬取豆瓣电影T ...
- Forward团队-爬虫豆瓣top250项目-项目进度
项目地址:https://github.com/xyhcq/top250 我们的项目是爬取豆瓣top250的电影的信息,在做这个项目前,我们都没有经验,完全是从零开始,过程中也遇到了很多困难,不过我们 ...
- Forward团队-爬虫豆瓣top250项目-设计文档
组长地址:http://www.cnblogs.com/mazhuangmz/p/7603594.html 成员:马壮,李志宇,刘子轩,年光宇,邢云淇,张良 设计方案: 1.能分析HTML语言: 2. ...
- 《Forward团队-爬虫豆瓣top250项目-设计文档》
成员:马壮,李志宇,刘子轩,年光宇,邢云淇,张良 设计方案: 1.能分析HTML语言: 2.提取重要数据,并保存为文本文档: 3.用PY代码调取文本文档的数据: 4.编写提取部分数据的python代码 ...
- 《Forward团队-爬虫豆瓣top250项目-开发文档》
码云地址:https://github.com/xyhcq/top250 模块功能:获取豆瓣top250网页的源代码,并分析. def getHTMLText(url,k): # 获取网页源代码 tr ...
- python爬虫: 豆瓣电影top250数据分析
转载博客 https://segmentfault.com/a/1190000005920679 根据自己的环境修改并配置mysql数据库 系统:Mac OS X 10.11 python 2.7 m ...
- Forward团队-爬虫豆瓣top250项目-需求分析
一. 需求:1.爬取豆瓣电影top250. 2.获取电影名称,排名,分数,简介,导演,演员. 3.将爬取到的数据保存,以便随时查看. 3.可以将获取到的数据展示给用户. 二. 参考: 豆瓣api参考资 ...
- Forward团队-爬虫豆瓣top250项目-模块测试
项目托管平台地址:https://github.com/xyhcq/top250 模块测试:爬虫对信息的处理部分 测试方法: 实际运行一下代码: 可以看见,信息都已经爬取出来了 其他补充说明: 原本系 ...
随机推荐
- Zookeeper崩溃恢复过程(Leader选举)
1. 崩溃恢复 a). leader选择过程可以保证新leader是ZXID最大的节点 b). ZAB协议确保丢弃那些只在leader上被提出的事务,场景 leader发出PROPOSAL收到ACK, ...
- 新浪php面试题
1. echo count("abc"); 输出什么?答:"1" count — 计算数组中的单元数目或对象中的属性个数int count ( mixed $v ...
- 海海DRM视频保护解密流程分析
环境及工具 手机 :小米手机 MI 2A 系统版本: Android 4.1.1 工具 : IDA pro 6.6 .C32Asm .VS2005 一:第一次打开加密视频会出现如下验证: ...
- VMware虚拟机配置文件(.vmx)损坏修复
我的虚拟机为VM14 装的ubuntu14.04server版 遇到ubuntu打不开,上网查阅了博客写的解决办法,尝试并解决了,以下分享个人心得: 首先进入虚拟机中系统安装的位置 查看日志文件 ...
- 如何在Ubuntu server中修改IP
详细请移步至博客https://blog.csdn.net/shenzhen_zsw/article/details/74025066 方法一. sudo ifconfig eth0 100.100 ...
- c++ vector & 二维数组 & MessageBox
vector: https://www.cnblogs.com/mr-wid/archive/2013/01/22/2871105.html c++ 二维数组: int **p; p = new in ...
- java Vamei快速教程22 内存管理和垃圾回收
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 整个教程中已经不时的出现一些内存管理和垃圾回收的相关知识.这里进行一个小小的总结. ...
- linux 命令——11 nl (转)
nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等 ...
- World Wind Java开发之十二——加载粗制三维模型(ExtrudedPolygon)(转)
ww可以根据DLG图批量生成假三维模型,这对于小区等特征相似的建筑物模型的构建是非常有用的.下面来看如何一步步实现假三维模型的加载: 1.Shp文件的制作 首先在arcmap下数字化几个建筑物,并新建 ...
- hdu1863 畅通工程---MST&连通
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1863 题目大意: 中文题,求MST权值,如果不连通,输出? 解题思路: 这道题帮我找出了之前模板中的 ...