苏生不惑第190 篇原创文章,将本公众号设为
星标
,第一时间看最新文章。
关于Python之前分享过很多文章了:
Python 抓取知乎电影话题下万千网友推荐的电影,这个国庆节不愁没电影看了
一键下载公众号所有文章,导出文件支持PDF,HTML,Markdown,Excel,chm等格式
一键备份微博并导出生成PDF,顺便用Python分析微博账号数据
如果要抓取数据,一般使用Python是很方便的,不过如果你还不会推荐使用Chrome扩展 web scraper,下面就分别用Python和 web scraper 抓取豆瓣电影top 250 和b站排行榜的数据。
Python 抓取豆瓣电影
打开豆瓣电影top 250 主页 https://movie.douban.com/top250
我们需要抓取电影标题,排行,评分,和简介,python 抓取数据的步骤一般为请求网页,解析网页,提取数据和保存数据,下面是一段简单的Python代码。
1 | import requests |
执行 Python 脚本后会生成一个CSV文件,不过有些电影没有简介 ,比如周星驰的《九品芝麻官》https://movie.douban.com/subject/1297518/
web scraper 抓取豆瓣电影
这是一款免费的Chrome扩展,只要建立sitemap即可抓取相应的数据,无需写代码即可抓取95%以上的网站数据(比如博客列表,知乎回答,微博评论等), Chrome扩展地址 https://chrome.google.com/webstore/detail/web-scraper-free-web-scra/jnhgnonknehpejjnehehllkliplmbmhn ,如果你上不了谷歌在公众号后台回复 Python
获取我下载好的crx文件,先改文件名后缀为.rar
,解压到一个目录中,然后加载已解压的扩展程序即可安装成功。
使用web scraper抓取数据步骤为 创建 sitemap,新建 selector (抓取规则),启动抓取程序,导出 csv文件 。
打开谷歌浏览器控制台,可以看到多了个web scraper 标签,下面有sitemaps,sitemap,create new sitemap ,点击create新建一个爬虫抓取任务。
豆瓣电影的分页链接为 https://movie.douban.com/top250?start=0&filter=,共10页,所以URL填入 https://movie.douban.com/top250?start=[0-250:25]&filter= ,name随意填一个。
然后点击add new selector 添加新的选择器。
给id起个名,type为 element ,点击 select 选中第一部电影《肖申克的救赎》,可以看到网页标红了。
然后再选择第二条,可以看到下面的电影都选中了,点击 done selecting 就好了。
ps:抓取到的选择器其实就是css结构,右键copy selector也可以看到。
接着点击 element preview 预览下可以看到电影元素都抓取到了,因为一页有多部电影还要选中 Multiple 。
然后进入刚才建的 element 里新加选择器。
共有5个选择器,分别为电影名,豆瓣链接,电影排名,电影简介,豆瓣评分。
可以预览下新建的电影名选择器看看效果。
点击selector graph 可以看到抓取的选择器关系图。
选择器都建好后点击 scrape 开始抓取数据了。
浏览器自动弹出窗口抓取数据,不用管它,抓取完后它会自动关闭。
很快抓取完了。
再预览下抓取的数据是否正常。
确认没问题后点击 export data as CSV 导出CSV文件。
打开生成的CSV文件,可以看到抓取的电影排序乱了。
没关系,选中电影排名这列,选择升序排列。
最后抓取的250条豆瓣电影数据结果就是这样了。
最后可以export sitemap 导出这个爬虫任务,是个json格式字符串,你可以直接复制我这个导入直接抓取豆瓣电影数据。
1 | {"_id":"douban","startUrl":["https://movie.douban.com/top250?start=[0-250:25]&filter="],"selectors":[{"id":"row","type":"SelectorElement","parentSelectors":["_root"],"selector":".grid_view li","multiple":true,"delay":0},{"id":"电影名","type":"SelectorText","parentSelectors":["row"],"selector":"span.title","multiple":false,"regex":"","delay":0},{"id":"豆瓣链接","type":"SelectorLink","parentSelectors":["row"],"selector":".hd a","multiple":false,"delay":0},{"id":"电影排名","type":"SelectorText","parentSelectors":["row"],"selector":"em","multiple":false,"regex":"","delay":0},{"id":"电影简介","type":"SelectorText","parentSelectors":["row"],"selector":"span.inq","multiple":false,"regex":"","delay":0},{"id":"豆瓣评分","type":"SelectorText","parentSelectors":["row"],"selector":"span.rating_num","multiple":false,"regex":"","delay":0}]} |
使用 web scraper 抓取数据就是这么简单,不用写代码也能轻松完成抓取任务,不过第一次操作还是有点难,尤其对不熟悉网页结构的小伙伴,之后有空我录制一个视频方便大家自己操作下(有问题文末评论或者加我微信交流),下面再用 web scraper 抓取b站排行榜 https://www.bilibili.com/v/popular/rank/all
这里抓取视频排名,标题,播放量,弹幕数,up主,点赞数,投币数,收藏数。
其中点赞数,投币数,收藏数在视频链接的二级页。
为了方便你抓取,我也提供了json字符串,你可以直接导入抓取。
1 | {"_id":"bilibili_rank","startUrl":["https://www.bilibili.com/v/popular/rank/all"],"selectors":[{"id":"row","type":"SelectorElement","parentSelectors":["_root"],"selector":"li.rank-item","multiple":true,"delay":0},{"id":"视频排名","type":"SelectorText","parentSelectors":["row"],"selector":"div.num","multiple":false,"regex":"","delay":0},{"id":"视频标题","type":"SelectorText","parentSelectors":["row"],"selector":"a.title","multiple":false,"regex":"","delay":0},{"id":"播放量","type":"SelectorText","parentSelectors":["row"],"selector":".detail > span:nth-of-type(1)","multiple":false,"regex":"","delay":0},{"id":"弹幕数","type":"SelectorText","parentSelectors":["row"],"selector":"span:nth-of-type(2)","multiple":false,"regex":"","delay":0},{"id":"up主","type":"SelectorText","parentSelectors":["row"],"selector":"a span","multiple":false,"regex":"","delay":0},{"id":"视频链接","type":"SelectorLink","parentSelectors":["row"],"selector":"a.title","multiple":false,"delay":0},{"id":"点赞数","type":"SelectorText","parentSelectors":["视频链接"],"selector":"span.like","multiple":false,"regex":"","delay":0},{"id":"投币数","type":"SelectorText","parentSelectors":["视频链接"],"selector":"span.coin","multiple":false,"regex":"","delay":0},{"id":"收藏数","type":"SelectorText","parentSelectors":["视频链接"],"selector":"span.collect","multiple":false,"regex":"","delay":0}]} |