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 模块测试:爬虫对信息的处理部分 测试方法: 实际运行一下代码: 可以看见,信息都已经爬取出来了 其他补充说明: 原本系 ...
随机推荐
- Maven的学习资料收集--(三)使用Maven构建Web项目
新建Maven项目 File - New - Other 选择Maven Project 单击Next 保持默认即可单击Next 选择Archetype为 web app单击Next 输入一些必要信息 ...
- idea关闭sonar自动扫描
file-setting-other setting-sonar相关的setting全部关闭
- 零基础逆向工程27_Win32_01_宽字符_MessageBox_win32调试输出
1 多字节字符 ASCII码表:0 ~ 2^7-1 扩展ASCII码表:2^7 ~ 2^8-1 什么是GB2312:1980年,两个字节存储一个汉字:不通用,别国会有乱码. UCICODE:只有一个字 ...
- MATLAB之画确定区域内不重合的随机圆
MATLAB之画确定区域内不重合的随机圆 程序要求:在确定区域内,画互不重合的圆. 知识点: (1)A=p'; 转置运算 (2)ones(a,b)产生a行b列全1数组 (3)rand(a,b)产生a行 ...
- Retrofit2与RxJava用法大全
Retrofit2是square公司出品的一个网络请求库,网上有很多相关的介绍.我很久以前都想去研究了,但一直都有各种事情耽搁,现在就让我们一起去捋一捋,这篇主要讲解Retrofit2与RxJava的 ...
- iOS核心动画高级技巧之核心动画(三)
iOS核心动画高级技巧之CALayer(一) iOS核心动画高级技巧之图层变换和专用图层(二)iOS核心动画高级技巧之核心动画(三)iOS核心动画高级技巧之性能(四)iOS核心动画高级技巧之动画总结( ...
- centOS7虚拟机连接大网
1.启动vm服务 如果遇到无法启动时,需要还原vm默认配置解决 2.更改vm设置为NAT模式 3.centOS开启DHCP
- LeetCode Longest Substring Without Repeating Characters 最长不重复子串
题意:给一字符串,求一个子串的长度,该子串满足所有字符都不重复.字符可能包含标点之类的,不仅仅是字母.按ASCII码算,就有2^8=128个. 思路:从左到右扫每个字符,判断该字符距离上一次出现的距离 ...
- U盘小偷——C++实现U盘插入检测和文件扫描拷贝
前几天女朋友说老师上课的PPT不共享,没法复习,想着写个U盘小偷拷贝PPT来着,后来觉得这样的行为这是不对的,万一不小心复制了老师的专利啥的,或者一些不可描述的东西,就闹大了. 虽然没有采取实际行动, ...
- Win 10 Google 云端硬盘 网页证书问题导致无法登录解决办法
操作方法 按照图示,将以下3项勾去并确定. 效果 设置以后,可成功访问: