Google,facebook,youtube...爬虫记录

4,656 阅读3分钟

项目中遇到抓取Google, Facebook,youtube,instagram 需求,采集的过程比较曲折,记录如下:

先上一些结论, 这些网站的采集程序在github 上都有,可以借鉴:

google: https://github.com/ranahaani/GNews
facebook:https://github.com/kevinzg/facebook-scraper
instagram:https://github.com/realsirjoe/instagram-scraper
youtube:https://github.com/ytdl-org/youtube-dl

Google :

一开始使用 requests,  模拟发送http请求,

https://www.google.com/search?q=CNN&source=lnms&tbm=nws&sa=X&sqi=2&ved=2ahUKEwj49d-8
_KXzAhVxlWoFHcY0B3wQ_AUoAXoECAEQAw&biw=1034&bih=564&dpr=1&start=10

其中q 是关键词,start 是翻页变量,返回结果是空的, 说明有ajax的

改用Selenium, 可以得到搜索结果,尝试几次后,发现它的样式是动态的,

即 div class 是动态变化的,每次加载样式名不一样。这样不能用样式来定义selector, 而是改用 “div > div > span”  表达式。

在采集中还发现,服务器在美国时,不会出现人机交互检查,用中国服务器 + vpn 会出现人机交互检查。

在列表页可以取到标题,url, 时间,简要介绍,要取全文得打开详情页,结合 GNE: github.com/GeneralNews… 动态在详情页获取正文。

项目简介:

https://github.com/ranahaani/GNews

这项目把google 的新闻列表封装为 api, 可以直接调用。

Facebook, instagram  

都是facebook 旗下社交产品,都有反爬的检查 ,instagram   对账号的检查很严,新账号第二天不登录就可能被封,而且申诉没有什么结果,我在爬取过程中封了3个手机号。facebook 对账号也很严(比instagram 松)。例如在亚洲 用vpn 登录过,再用美国的服务器登录,会封号。账号不经常(超过一周)登陆也会封号。在这爬取网页的时候要养号,经常登录网站,发个贴子。在淘宝上是有卖账号,一账号大概10-50不等。

facebook, instagram 都 有api 接口可以获取账号的贴子,但api 的权限申请要求很严,url: developers.facebook.com/products/in…, 要求注册应用(web站点,Android,iOS),需要提供icon, 数据回调地址,视频证明,没有正式的网站是审核不下来。

facebook 的爬取:不能频繁登录,登录成功它会有cookie ,时效一年,把cookie 保存到本地,下次接着用。

facebook  有三个站点,m.facebook.com; www.facebook.com;   mbasic.facebook.com。一开始爬取mbasic 站,它只有一页的数据,后改取www 站的数据,每次滚动到底部加载更多,它的div 样式也是变化的。

facebook 图片下载:图片用的cdn站点,不翻墙也可以查看。

项目简介:

https://github.com/kevinzg/facebook-scraper

项目需要获取登录成功后的cookie 值,可以获取某个账号发的贴子。贴子数量是通过滚动加载获取。

youtube:

有api 接口,url: developers-dot-devsite-v2-prod.appspot.com/youtube/v3/… 权限很好申请,比较简单,它有频道 -》 专辑 -> 视频  API , 后面发现有些账户 没有专辑,不能用这种办法,改用搜索接口,搜账户的channelid, 可以获得 账户下所有的视频。采集中没有视频url, 只能得到 详情页url, 视频url 中原网页中通过 blob : http:// xxx 的方式获取, 视频流是m3u8格式, 采用youtube-dl 库可以下载。

youtube 的数据获取通过接口就可以,不难。视频下载比较难。 需要 

youtube:https://github.com/ytdl-org/youtube-dl

结合FFmpeg,  youtube  音频,视频是分开的。分别下载之后,再本地合成。

Telegram:

有api接口,有telethon  库可查频道,group 信息。账号申请不难。

最后

还是要感谢伟大的github 大人,有了前人的工作,让我省了不少精力。

采集时,有一台境外服务器,也省了不少麻烦。

需求还在继续提出,网站的反爬手法也会有变化(例如使用facebook-scraper一个月后,发现抓取不到数据了,上github一看,才知程序更新了),我们的工作也要持续跟进。