前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬取豆瓣的各分类书单以及近期热门电影和top250的电影

Python爬取豆瓣的各分类书单以及近期热门电影和top250的电影

原创
作者头像
用户7365393
修改2021-11-01 14:02:07
4570
修改2021-11-01 14:02:07
举报

pachon2.5.py      

代码语言:javascript
复制
# -- coding: utf-8 --
import urllib
import urllib2
import re
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
class book:     #豆瓣书籍的类
    def init(self, types, page):
        self.baseUrl = 'http://www.douban.com/tag/'
        self.types = types
        self.filename = 'doubanbook.txt'
        self.page = page

def getContents(self): #爬取源代码
    try:
        #if self.page == 0:
        url = self.baseUrl + self.types + '/book'
        #else:
        #   url = self.baseUrl + self.types + '/book?start=' + str(self.page)
        user_agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.65 Safari/537.36'
        headers = { 'User-Agent' : user_agent}
        request = urllib2.Request(url,headers = headers)
        response = urllib2.urlopen(request)
        content = response.read()  #.decode('utf-8')
        pattern = re.compile('<a href=.*?class="title".*?target="_blank">(.*?)</a>.*?>(.*?)</div>',re.S)
        items = re.findall(pattern,content)
        return items
    except urllib2.URLError, e:
        if hasattr(e, "reason"):
            print u"豆瓣链接错误,错误原因", e.reason
            return None

def writetext(self, items): #写入txt
    for item in items:
        print item[0],item[1]
        files = open(self.filename,'a')
        files.write(item[0])
        files.write(item[1])
        files.write('\n')
        files.close()

def strat(self): #启动函数
    self.writetext(self.getContents())
    print u"""出现乱码为正常现象,在与本脚本相同的文件夹下会多出一个,
 
doubanbook.txt的文件里面有所爬书籍,如你把本脚本放在桌面,
文件便会出现在桌面"""
        print u"结束输入 'O' , 联系作者输入 'A'"
        end = raw_input('>')
        if end == 'A':
            print u"QQ邮箱:1021644861@qq.com"
            raw_input('>')
        else:
            print "over"
------------------------------------------------class-------------------------
class movie:     #豆瓣近期热门电影的类
    def init(self):
        self.baseUrl = 'http://movie.douban.com/chart'
        self.filename = 'doubanmovie.txt'

def gethtml(self):
    try:
        url = self.baseUrl
        user_agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36'
        headers = { 'User-Agent' : user_agent }
        request = urllib2.Request(url, headers = headers)
        response = urllib2.urlopen(request)
        content = response.read()
        pattern = re.compile('<a class="nbg".*?title=(.*?)>.*?<span style=.*?>(.*?)</span>.*?<p class="pl">(.*?)</p>.*?<span class="rating_nums">(.*?)</span>',re.S)
        items = re.findall(pattern, content)
        return items
    except urllib2.URLError, e:
        if hasattr(e, "reason"):
            print u"豆瓣链接错误,错误原因", e.reason
            return None

def gettext(self,items): #写入txt
    for item in items:
        print item[0],item[1],item[2]
        files = open(self.filename,'a')
        files.write(item[0])
        files.write(item[1])
        files.write('\n')   #在写入的文件中加入换行符
        files.write(item[2])
        files.write('\n')
        files.write("评分")
        files.write(item[3])
        files.write('\n\n')
        files.close()

def strat(self):
    self.gettext(self.gethtml())
    print u"近期热门的新电影爬取完毕,是否需要获取书籍。"
    print u"输入任意键结束,'V'爬取书籍"
    fir = raw_input('>')
    if fir == 'V':
        bookstyle()
    else:
        print "over"

 
-------------------class---------------------------------------------------
class TOPmove:   #豆瓣总电影top类
    def init(self, page):
        self.baseurl = 'http://movie.douban.com/top250?start='
        self.page = page
        self.filename = 'dbTOPmove.txt'

def html(self):
    try:
        url = self.baseurl + str(self.page) + '&filter=&type='
        user_agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36'
        headers = { 'User-Agent' : user_agent }
        request = urllib2.Request(url, headers = headers)
        response = urllib2.urlopen(request)
        content = response.read()
        pattern = re.compile('<em.*?class="">(.*?)</em>.*?<span.*?class="title">(.*?)</span>.*?<p.*?class="">\s(.*?)<br>.*?\s(.*?)</p>.*?<em>(.*?)</em>.*?<span.*?class="inq">(.*?)</span>', re.S)
        items = re.findall(pattern, content)
        return items
    except urllib2.URLError, e:
        if hasattr(e, "reason"):
            print u"豆瓣链接错误,错误原因", e.reason
            return None

def wtext(self,items):
    remove = re.compile('&nbsp| {4}|;')  #在获取的排名中去除 &nbsp ; 空格
    for item in items:
        print (' '.join(map(lambda s: re.sub(remove,'',s),item)))
        files = open(self.filename,'a')
        files.write((' '.join(map(lambda s: re.sub(remove,'',s),item))))
        files.write('\n')
        files.write('\n')
        files.close()

def strat(self):
    self.wtext(self.html())
    print u"豆瓣电影TOP爬取完毕"
    print u"输入任意键结束,'V'爬取书籍"
    fir = raw_input('>')
    if fir == 'V':
        bookstyle()
    else:
        print "over"




 
---------------------------------------------------------------book--
def bookstyle():    #豆瓣爬取得书籍目录
    print u"请输入你要爬的书籍类型,查看所有类型输入 'V' "
    booktypes = raw_input(u">")
    while booktypes == 'V':
        print "###########################################"
        print   u"小说    外国文学    文学  随笔"
        print   u"中国文学  经典  散文  日本文学"
        print   u"村上春树  童话  诗歌  杂文"
        print   u"王小波   张爱玲 儿童文学    古典文学"
        print   u"余华    名著  钱钟书 当代文学"
        print   u"鲁迅    外国名著    诗词  茨威格"
        print   u"米兰·昆德拉    杜拉斯 港台"
        print   u"流行 · · · · · ·"
        print   u"                              "
        print   u"漫画    绘本  推理  青春"
        print   u"言情    科幻  悬疑  东野圭吾"
        print   u"武侠    韩寒  奇幻  日本漫画"
        print   u"耽美    亦舒  三毛  安妮宝贝"
        print   u"网络小说  郭敬明 穿越  推理小说"
        print   u"金庸    轻小说 几米  阿加莎·克里斯蒂"
        print   u"幾米    张小娴 魔幻  青春文学"
        print   u"J.K.罗琳    高木直子    沧月  古龙"
        print   u"科幻小说  落落  张悦然 蔡康永"
        print   u"文化 · · · · · ·"
        print   u"                              "
        print   u"历史    心理学 哲学  传记"
        print   u"文化    社会学 设计  艺术"
        print   u"政治    社会  建筑  宗教"
        print   u"电影    数学  政治学 回忆录"
        print   u"思想    国学  中国历史    音乐"
        print   u"人文    戏剧  人物传记    绘画"
        print   u"艺术史   佛教  军事  西方哲学"
        print   u"近代史   二战  自由主义    考古"
        print   u"美术"
        print   u"生活 · · · · · ·"
        print   u"                              "
        print   u"爱情    旅行  生活  励志"
        print   u"成长    摄影  心理  女性"
        print   u"职场    美食  游记  教育"
        print   u"灵修    情感  健康  手工"
        print   u"养生    两性  家居  人际关系"
        print   u"自助游"
        print   u"经管 · · · · · ·"
        print
        print   u"经济学   管理  经济  金融"
        print   u"商业    投资  营销  理财"
        print   u"创业    广告  股票  企业史"
        print   u"策划"
        print   u"科技 · · · · · ·"
        print   u"                            "
        print   u"科普    互联网 编程  科学"
        print   u"交互设计  用户体验    算法  web"
        print   u"科技    UE  通信  UCD"
        print   u"交互    神经网络    程序"
        print"###################################"
        booktypes = raw_input(u">")
    strs = unicode(booktypes, 'gbk') #windows输入的是GBK编码先转换为unicode
    strs = strs.encode('UTF-8') #再将unicode转换为UTF-8
    types = urllib.quote(strs)
    print u"请输入你要爬的书籍排名页数(TOP15一页)"
    bookpage = input(u">")
    if bookpage == 1:
        page = 0
    else:
        page = (bookpage - 1) * 15
    script = book(types,page)
    script.strat()
-------------------------------------------movies----------------------------
def optmove():    #选择要爬热门还是top
    print u"你想爬近期热门电影还是总电影top?"
    print u"热门电影输入 'H', 总TOP输入 'T'"
    opt = raw_input('>')
    while opt != 'H' and opt != 'T':
        print u"输入有误,热门电影输入 'H', 总TOP输入 'T'"
        opt = raw_input('>')
    if opt == "H":
        moviestyle()
    else:
        topmove()
def topmove():
    print u"获取豆瓣电影TOP250"
    print u"每页top25部影,共10页要爬第几页?"
    pages = input(">")
    if pages == 1:
        page = 0
    elif pages > 1 and pages <= 10:
        page = (pages - 1)  25
    else:
        page = (10 - 1)  25
    topmove = TOPmove(page)
    topmove.strat()
def moviestyle():
    print u'获取热门新片排行'
    movies = movie()
    movies.strat()
--------------------------------------------start-----------------------------
print "##############################################"
print u"名字:豆瓣图书电影爬虫机器人"
print u"版本:2.5"
print u"作者:jetou"
print u"说明:按照指令操作即可"
print u"功能:输入豆瓣图书和电影的分类和页数爬取豆瓣书单并保存txt文件"
print "##############################################"
print u"要爬豆瓣书籍或者是豆瓣电影呢?'book' or 'movie'?"
classify = raw_input('book or movie?')
while classify != 'book' and classify != 'movie' :   #if not book or movie
    print u"无效指令请输入book or movie"
    classify = raw_input('>')
if classify == 'book':
    bookstyle()
else:
    optmove()
except urllib2.URLError, e:
if hasattr(e,"code"):
print e.code
if hasattr(e,"reason"):
print e.reason
</pre>
 QQ图片20150604161654.png     
 
  
 
 QQ图片20150604161731.png      

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • pachon2.5.py      
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档