这个记录一下webscraper的使用过程。帮朋友爬取山东慈善总会的网页。由于比较简单,我不想写代码了,就用webscraper把。
首先是网站上的新闻,如图:
这个新闻有13页,都是比较简单的网页。问题在于要爬去多个页面,然后提取二级页面的内容。
使用webscraper,
这里就是需要二级页面的内容,包括title, time, content。links是设置的链接。 页面的链接形式自由最后一个数字在变:
如下:
所以startI_url 就用中括号, 从1-13, 设置步长为1.这样就会爬取13也的新闻标题。
然后,建立一个选择器。设置名字是links, type 这里要选择link,因为是链接,需要点击进去,多选选中,然后点选每一个标题,就可以得到新闻的链接。
保存这个而选择, 在下面在设置其他三个选择器。
这里需要输入名字是title, 需要点击进入一个二级页面。然后进一步选择标题,时间,内容,逐个设置。
设置好了以后,是这样的。
可以看到他们的父选择器是links。是上面的最开始的新闻目录页。
然后开始愉快的爬取。很快。
下一步是爬取微博。
微博比较讨厌,一直头大,后来想了想,还是不写代码了。不管写代码和是其他,都得访问微博手机版。因为微博电脑版很麻烦。所以推荐使用手机版。就是在电脑里登陆微博手机版。
比如山东慈善总会的微博。
电脑版是这样的
而,手机版是这样的。
如果使用代码,那么就需要分析这个地址。
就是旁边两个xhr应该是都可以。然后变成json,提取内容。也不是很麻烦。但是本着能省事就省事的原则,还是不想写代码。
就用webscraper把。
微博手机版要爬去,需要使用webscraper里面的 元素滚动选择器。
具体是这样的。
首先新建一个container,他是ellement scroll down ,这里点select,选择每一个微博的卡片。
这里需要注意的一点是,首页有一个置顶微博,不用选,如果选它,就会影响后面的一般微博的选择。
select的css是:
div:nth-of-type(n+4) div.card-wrap
其实我是有点怀疑这个css对不对。感觉好复杂,而且不一定能够找到元素。不符合一点简洁的原则,如果写代码的话,我肯定不会这样用css。另外我还加上一个控制元素数量的css, 就是:
nth-of-type(-n+100),这个是通过别的网页看到的。但是这个功能以前我也用过。在代码里面。没想到webscraper里也可以这样用, 就试试吧。
完整的选择器
div:nth-of-type(n+4) div.card-wrap:nth-of-type(-n+100)
滚动100次,提取每一次所有的微博卡片内容。另外,我看有些微博,还有全文链接。手贱又提取了全文的主要内容。
最后是这样的。
因位微博是简要内容,所以是brief,如果有全文链接,那么就提取全文。就是href里面的内容。
href里又弄了一个。
肿起来是这样的。
不过,webscraper好像没有sleep功能。 我只找到延时,设置了3000ms
后来,微博因位请求太频繁,直接给我
来了个小鸡, 不过好在山东省慈善总会的内容不多,基本上也爬完了。除了小鸡,我也不纠结了。保存成csv发给同事了
我向应该是我爬取全文,造成访问太频繁的原因。
总体来说还行,webscraper使用确实极大提高了工作效率,不用写头大的代码了。