赞
踩
web scraper是一个很好用的Chrome爬虫插件,它易学易用,能够满足大部分需求,而且因为是基于浏览器渲染的,所以能回避很多反爬虫问题。另外,web scraper可以多开进程,对于一些反爬严重的网站,爬取速度不输给一些用Python等语言编写的爬虫程序。
网上已经有很好的web scraper教程,比如 田甜:web scraper 入门到精通之路 。
目前的教程已经介绍了如何进行有规律url的多页抓取。例如,我可以使用语法"https://weibo.com/p/1002066728786240/follow?relate=fans&page=[1-5]"作为start url,来爬取北京理工大学微博粉丝列表的前五页信息,而不用输入五次url。
然而,当url没有规律时该怎么办呢?难道要手动一个个输入吗?这样就会很没有效率。本文以爬取微博账号的粉丝列表为案例,讲解一种可行的无规律url的多页爬取方案。
我们想做一些社会网络的研究,需要足够的微博用户数据。 为了获取尽可能全的微博用户,通过用户的关注关系进行遍历是一个比较好的爬取思路。
假设我们已经有了1000个种子用户,想继续爬取他们的粉丝来拓展用户量,这时候我们该怎么使用web scraper来达到目的呢?
直观的方案就是手动输入这1000个url到插件中,如下图所示,可以一直添加下去。
可以看出,虽然可以使用[1-5]语法来代表多个页面,但是用户ID是无规律的,只能手动输入,仍需要大量人工。总之,这种方案的效率比较低,而且种子用户的粉丝遍历完后,还要爬粉丝的粉丝,那时候还要手动输入。
为了提高效率,我们可以使用编程语言,基于种子用户的ID来自动生成web scraper的代码,并直接导入进去。导入代码的模块位置在:web scraper → Create new sitemap → Import Sitemap,如下图所示。
核心问题就是Sitemap JSON如何生成。这时候,我们可以去看一下正确的应该是怎么样的,然后发现其中的规律。下图是设置好数据选择器的有两个start url的爬虫项目。
然后,我们查看这个项目的内部代码,查看方式:web scraper → Sitemap name → Export Sitemap,如下图所示
我们可以发现,这段代码可以分成头部、中部和尾部。
头部是 {"_id":"wb_fans","startUrl":[
中部是 "https://weibo.com/p/1005053942669859/follow?relate=fans&page=[1-5]","https://weibo.com/p/1002066728786240/follow?relate=fans&page=[1-5]"
尾部是 ],"selectors":[{"id":"user_url","type":"SelectorElementAttribute","parentSelectors":["_root"],"selector":"td:nth-of-type(2) a:nth-of-type(1)","multiple":true,"extractAttribute":"href","delay":0}]}
可以看出,头部没啥用,只是必要的前缀。中部表示要爬取的页面url,用逗号分隔,很有规律。尾部表示要爬取的数据和相应的延迟设置等。因此,我们要修改的只是中部,要从两个url拓展到1000个,其余的不变。我们当然就可以使用编程语言来高效完成这项工作。下图是我在实践一些项目中,用R语言生成的一些web scraper代码。
代码生成后,我们再将它粘贴到Import Sitemap里导入就可以了,如下图所示。
后续就是正常爬取,爬取完导出CSV数据就行了。
本文介绍了web scraper的一个使用经验,借助编程软件优化了web scraper使用中的一个爬取页面选择步骤,适用于那些有大规模无规律url的多页爬取项目。如果要爬取的页面很少,那么手动输入就可以了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。