Youtube爬虫——一种爬取全站的思路,沿途充满危险

Youtube这个网站,我很早以前就想拿下它。但是它又和其他一般的网站不一样。

微信截图_20170519101949.png

它只有左边几个简单的频道:音乐,体育,游戏,电影,新闻,直播,里面只有很少的一部分视频。所以,通过Youtube的精选频道没办法作为入口,爬取整站。怎样可以爬取整站,我也没什么思路。后来有一天,我的小组leader和我说:“要不就以单个视频为入口,从里面找寻其他视频作为新的入口,就像nutch一样。”我当时灵光一闪,觉得可行。

微信截图_20170519104852.png

像上图看到的一样,我打开一个视频,然后找到右边的视频链接作为新的入口,打开,再找新的视频链接。就这样辐射开来,钻遍Youtube的每一个角落,当然这只是我的YY。

这个代码不难写,就两个函数的事情,我用的是scrapy框架

#writer: LeonYao
#caution:别复制我的代码了,跑不起来的,还有其他项目文件我没放出来,给你看我的思路而已,懂的自己改下就可以跑起来了。
#May I have your attention pls:别找我要代码了,自己try写一下,又不难

import scrapy
from bs4 import BeautifulSoup
from Youtube_ultra.utils import MGClient


class Youtube_ultra(scrapy.Spider):
    name = "ultra"

    start_urls=['https://www.youtube.com/watch?v=Ol58Mo98AOE']

    def __init__(self):
        self.db = MGClient().get_mongo_client()

    def parse(self, response):
        soup = BeautifulSoup(response.body,'html.parser')
        for i in  soup.find('div',id='watch7-sidebar-modules').find_all('a'):
            url = 'https://www.youtube.com/' + i.get('href')
            if not self.db.Youtube_test.find_one({'source_url':url}):
                self.db.Youtube_test.insert({'source_url':url})
                print '>>>>>>>>>>>>>>>>>insert success<<<<<<<<<<<<<<<'
                yield scrapy.Request(url=url,callback=self.parse_again)
            else:
                print '>>>>>>>>>>>>>>>>>>alread exists<<<<<<<<<<<<<<'



    def parse_again(self,response):
        soup = BeautifulSoup(response.body,'html.parser')
        for i in  soup.find('div',id='watch7-sidebar-modules').find_all('a'):
            url = 'https://www.youtube.com/' + i.get('href')
            if not self.db.Youtube_test.find_one({'source_url':url}):
                self.db.Youtube_test.insert({'source_url':url})
                print '>>>>>>>>>>>>>>>>>insert success<<<<<<<<<<<<<<<'
                yield scrapy.Request(url=url,callback=self.parse)
            else:
                print '>>>>>>>>>>>>>>>>>>alread exists<<<<<<<<<<<<<<'

然后我就把整个爬虫怼到我的香港服务器去,让他跑一个晚上看看效果。今早回来上班,看了下数据库

微信截图_20170519105556.png

而且爬虫依然在运行,到这里觉得我的思路初步可行。正当我开始幻想着以后再也不用人肉手动的找频道爬取视频的时候。。。我点开了里面的一些内容。。。。发现了很危险的事

微信截图_20170519105816.png

好多真主阿拉的教育视频。。。。如果我把这些都怼到公司的APP去。。。。。接下来应该就是蹲几年的问题了吧。。。我还是继续去做人肉爬虫算了。。。

推荐阅读更多精彩内容