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 模块测试:爬虫对信息的处理部分 测试方法: 实际运行一下代码: 可以看见,信息都已经爬取出来了 其他补充说明: 原本系 ...
随机推荐
- HBase 相关API操练(二):Java API
一.HBase Java编程 (1)HBase是用Java语言编写的,它支持Java编程: (2)HBase支持CRUD操作:Create,Read,Update和Delete: (3)Java AP ...
- Java微信公众平台开发(十)--微信用户信息的获取
前面的文章有讲到微信的一系列开发文章,包括token获取.菜单创建等,在这一篇将讲述在微信公众平台开发中如何获取微信用户的信息,在上一篇我们有说道微信用户和微信公众账号之间的联系可以通过Openid关 ...
- win8.1x64下完美运行IE6
IE6我相信是所有前端人员永远都绕不过去的坎,操作的版本越来越高,离xp越来越远,难道你还在win8下安装个虚拟机来运行IE6吗?这样即消耗系统资源,来回的切换也麻烦,关键是只为了一个测试哦,没必要这 ...
- 如何在数据库中导入excel文件内的数据
如何在数据库中轻松导入excel格式的文件 1)打开sql server,找到要导入数据的数据库,右键>>任务>>导入数据 2)按照图示选择要导入的excel 3)选择导入到哪 ...
- weex 项目开发 weexpack 项目 打包、签名、发布
一. weexpack build android 和 weexpack run android 的 区别. (1)单纯打包 weexpack build android (2)打包并运行 wee ...
- 不该被忽视的CoreJava细节(一)
一.系列文章导言 <不该被忽视的CoreJava细节>系列文章将会持续更新.我希望自己通过这一系列文章的写作,能与读者一起进步,逐步完善对Java体系结构的了解. 二.本期关注点 几乎翻看 ...
- tomcat jdk官网下载教程
Tomcat不同版本官网下载: 1.官网地址:http://tomcat.apache.org/ 2.点击要下载的版本进入下载页,点击Archives进入版本选择页,然后选择对应的版本文件夹,进去后点 ...
- 使用adbWireless无线调试Android真机设备[转]
开发Android的朋友都知道,真机调试需要把手机与PC相连,然后把应用部署到真机上进行安装和调试.长长的USB线显得很麻烦,而且如果需要USB接口与其他设备连接的话显得很不方便.今天介绍一种不通过U ...
- Win10 耳机无声音,扬声器有声音的解决办法
注:适用于WIN10及WIN10.ubuntu双系统耳机无声音的问题. 在WIN10的引导下,安装了Ubuntu的桌面版,作成了双系统,可是发现了一个问题:进入Win10后插耳机会没有声音,扬声器有声 ...
- POJ 3050 Hopscotch(dfs,stl)
用stack保存数字,set判重.dfs一遍就好.(或者编码成int,快排+unique #include<cstdio> #include<iostream> #includ ...