• Python爬虫 -- 抓取电影天堂8分以上电影


    看了几天的python语法,还是应该写个东西练练手。刚好假期里面看电影,找不到很好的影片,于是有个想法,何不搞个爬虫把电影天堂里面8分以上的电影爬出来。做完花了两三个小时,撸了这么一个程序。反正蛮简单的,思路和之前用nodejs写爬虫一样。

    爬虫的入口从分页的列表开始,比如美剧的列表第一页地址这样: http://www.ygdy8.net/html/gndy/oumei/list_7_1.html,第二页是http://www.ygdy8.net/html/gndy/oumei/list_7_2.html,是有规律的,所以就可以遍历所有的页面,分别抓取每页里面的影视资源,再进入每条电影的详情页面,抓取出下载地址,存到文件里。

    技术上用的是requests 和 BeautifulSoup两个模块。

    具体做法是,先从电影列表中定位每条资源中的IMDB(b)评分大于8分的资源,并且将结果放入movie对象中。

    class Movie:
    
        def __init__(self, name, url, score, link):
            self.name = name
            self.url = url
            self.score = score
            self.link = link
    
        def __str__(self):
            return '%s,	%s分,	%s' % (self.name, self.score, self.link)
    
        __repr__ = __str__
    
    # 过滤资源
    def filterMovie(url):
        resultList = []
        soup = getSoup(url)
        tables = soup.find_all('table', class_='tbspan')
        for table in tables:
            nameA = table.find('a', text=re.compile("《"))
            td = table.find('td', text=re.compile("IMD"))
            if td is not None:
                scoreStr = re.findall(r"评分 (.+?)/10", td.text)
                if(len(scoreStr) > 0):
                    try:
                        score = float(scoreStr[0])
                        if(score > 8):
                            name = nameA.text
                            url = site + nameA['href']
                            print('url:', url)
                            print('title:', name)
                            print('score:', score)
                            downloadLink = getDownloadLink(url)
                            movie = Movie(name, url, score, downloadLink)
                            resultList.append(movie)
                    except:
                        print('error !!')
        return resultList
    

    其中的getDownloanLink(url)是进入电影详情页获取下载链接。

    def getDownloadLink(url):
        soup = getSoup(url)
        downloadTd = soup.find('td', attrs={"style": "WORD-WRAP: break-word"})
        downloadA = downloadTd.find('a')
        return downloadA['href']
    
    

    然后是将电影信息存入到文件data.txt中。

    def saveInfo(movieList):
        fileObj = open('data.txt', 'a')
        for movie in movieList:
            movie_str = str(movie)
            print('movie info:', movie_str)
            global lineNo
            fileObj.write('(' + str(lineNo) + ') ' + movie_str)
            fileObj.write('
    ')
            fileObj.write('———————————')
            fileObj.write('
    ')
            lineNo += 1
        fileObj.close()
    

    经过上面的步骤,即可将某一页的电影资源抓取到,并且存入文件中。

    程序的主入口,遍历列表即可。目前他们只有155页,就限制这么多页码。

    if __name__ == '__main__':
        for index in range(156):
            index += 1
            url = 'http://www.ygdy8.net/html/gndy/oumei/list_7_' + 
                str(index) + '.html'
            getPageResource(url)
    

    具体代码在github中,传送门,爬到的结果也放入代码仓库中了。有兴趣的,可以下载看看。

  • 相关阅读:
    JBoss中配置虚拟目录以及设置浏览器地址输入框支持中文的方法
    实现表格鼠标经过变色,点击变色并选中项目
    JBoss4.0与金山词霸有端口冲突
    Hibernate查询方式比较
    数字证书使用Javascript在浏览器中自动安装的解决方案
    JBoss设置URI编码,使浏览器URL支持中文
    VC++中list的使用方式
    使用JBoss管理数据库连接的方法(JDNI方式)
    CefSharp中实现Chrome中jS导出Excel
    WP7备注(27)(DependencyProperty|RoutedPropertyChangedEventHandler)
  • 原文地址:https://www.cnblogs.com/juepei/p/5943726.html
Copyright © 2020-2023  润新知