美文网首页Python 爬虫专栏视频爬虫
Youtube爬虫——一种爬取全站的思路,沿途充满危险

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

作者: LEONYao | 来源:发表于2017-05-19 11:00 被阅读2787次

    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去。。。。。接下来应该就是蹲几年的问题了吧。。。我还是继续去做人肉爬虫算了。。。

    相关文章

      网友评论

      • BlueCat2016:爬全站需要多久?全站至少得好几百亿条视频吧?
      • Nise9s:所以老哥你最后爬完全站没?
      • 7d49fc6ce191:我就想问一下, YouTube 友好不,会不会封 IP:grin:
        LEONYao:@夜路 是挺友好的,所以不值得去爬。要爬就爬不友好的,提升技术水平
      • 荀墨韩:您好我问一下,进入网页右边视频的新入口后,新的网页右边又会出现已经过的视频或者相似推荐,感觉都是这一类的,并没有全网在爬。您的数据能反映出这一点吗?
        LEONYao:@荀墨韩 这是你的感觉,去爬就发现不一样了
      • Mo丶染洛凉:阿门。哈哈
      • Awanlon:6666
      • JaeGwen:网警: 咚咚,开门查水表

      本文标题:Youtube爬虫——一种爬取全站的思路,沿途充满危险

      本文链接:https://www.haomeiwen.com/subject/xqxyxxtx.html