• 《Forward团队-爬虫豆瓣top250项目-开发文档》


    码云地址:https://github.com/xyhcq/top250 

    模块功能:整合代码,控制是否将信息显示出来。

    import requests
    from bs4 import BeautifulSoup
    import re
    import time
    import sys
    
    def getHTMLText(url,k):
        # 获取网页源代码
        try:
            if(k==0):
                kw={}
            else:
                kw={'start':k,'filter':''}
            # 保存获取的网页
            read = requests.get(url,params=kw,headers={'User-Agent': 'Mozilla/4.0'})
            read.raise_for_status()
            read.encoding = read.apparent_encoding
            return read.text
        except:
            print("获取失败!")
    
    def getData(html):
        # 分析代码信息,提取数据
        soup = BeautifulSoup(html, "html.parser")
    
        # 找到第一个class属性值为grid_view的ol标签
        movieList=soup.find('ol',attrs={'class':'grid_view'})
    
    
        # 找到所有的li标签
        for movieLi in movieList.find_all('li'):    
            # 找到第一个class属性值为hd的div标签
            movieHd=movieLi.find('div',attrs={'class':'hd'})
            # 找到第一个class属性值为title的span标签 #也可使用.string方法
    
            # 获取电影名字
            movieName=movieHd.find('span',attrs={'class':'title'}).getText()
            if showInfo==1:
                print movieName
            else:pass
            # 写入文件
            if writeFile == 1:
                f.write('电影名:'+movieName.encode('utf-8')+'    ')
            else:pass
    
            # 获取电影链接
            movieUrl=movieHd.find('a class="" href="')
            if showInfo==1:
                print movieUrl
            else:pass
            # 写入文件
            if writeFile == 1:
                f.write('链接:'+str(movieUrl)+'    ')
            else:pass
    
            # 获取电影导演/演员
            movieBd = movieLi.find('div', attrs={'class': 'bd'})
            movieSF=movieBd.find('p',attrs={'class':''}).getText()
            if showInfo==1:
                print movieSF
            else:pass
            # 写入文件
            if writeFile == 1:
                f.write('Staff:'+movieSF.encode('utf-8')+'    ')
            else:pass
    
            # 获取电影的评分
            movieScore=movieLi.find('span',attrs={'class':'rating_num'}).getText()
            if showInfo==1:
                print movieScore
            else:pass
            # 写入文件
            if writeFile == 1:
                f.write('评分:'+movieScore.encode('utf-8')+'    ')
            else:pass
    
            #获取电影的评论数
            movieEval=movieLi.find('div',attrs={'class':'star'})
            movieEvalNum=re.findall(r'd+',str(movieEval))[-1]
            if showInfo==1:
                print movieEvalNum
            else:pass
            # 写入文件
            if writeFile == 1:
                f.write('评论数:'+movieEvalNum.encode('utf-8')+'    ')
            else:pass
    
            # 获取电影短评
            movieQuote = movieLi.find('span', attrs={'class': 'inq'})
            # 有的电影没有短评,为防止报错,加次
            if(movieQuote):
                if showInfo==1:
                    print movieQuote.getText()
                else:pass
                # 写入文件
                if writeFile == 1:
                    f.write('短评:'+movieQuote.getText().encode('utf-8')+'
    ')
                else:pass
            else:
                # 写入文件
                if writeFile == 1:
                    f.write('短评:'+"这个电影没有短评"+'
    ')
                else:pass
            #print '================================================================='
            
    # 本次抓取的网址
    basicUrl='https://movie.douban.com/top250'
    k=0
    i=1
    
    # 一些自定义功能开关,1开启,0关闭
    # 控制台输出抓取结果
    showInfo = 1
    # 写入文件开关
    writeFile = 1
    
    
    # 打开文件
    f=open("top250.txt","w")
    f.write('豆瓣top250信息爬取,by forward团队'+'
    '+'爬取结果:'+'
    ')
    
    showInfo=raw_input('是否需要在窗口显示结果,是为1,否为0,默认值为1:')
    if showInfo != '1':
        showInfo=0
    else :
        showInfo =1
        
    
    writeFile=raw_input('是否需要将结果输出到文件,是为1,否为0,默认值为1:')
    if writeFile != '1':
        writeFile=0
    else :
        writeFile=1
    
    
    print '===============================魔法开始==============================='
    
    while k<=225:
        html=getHTMLText(basicUrl,k)
        time.sleep(2)
        k+=25
        getData(html)
        print '-------第'+str(i)+'轮完成!-------'
        i+=1
    f.write('
    '+'爬取完成!')
    # 关闭文件,否则容易写入不全    
    f.close()
    print '完成!'
  • 相关阅读:
    Windows系统环境变量path优先级测试报告
    URI和URL的区别
    智能引导式报错(Class file name must end with .class)
    【Algorithm】冒泡排序
    【C语言】练习2-9
    【C语言】练习2-8
    【C语言】练习2-1
    【C语言】练习1-23
    【C语言】练习1-22
    【C语言】练习1-21
  • 原文地址:https://www.cnblogs.com/ngy12138/p/7780437.html
Copyright © 2020-2023  润新知