美文网首页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:@夜路 是挺友好的,所以不值得去爬。要爬就爬不友好的,提升技术水平
  • 3aa88ca86888:您好我问一下,进入网页右边视频的新入口后,新的网页右边又会出现已经过的视频或者相似推荐,感觉都是这一类的,并没有全网在爬。您的数据能反映出这一点吗?
    LEONYao:@荀墨韩 这是你的感觉,去爬就发现不一样了
  • Mo丶染洛凉:阿门。哈哈
  • Awanlon:6666
  • JaeGwen:网警: 咚咚,开门查水表

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

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