使用的WebMagic框架学习 1.程序主体 主要实现PageProcessor接口,重写两个方法。
- process,通过page.getHtml()获取到完整的页面内容(如果有js渲染的,加入依赖即可,如下),
然后对html页面处理获得自己想要的数据。有Css或$、xpath和regex三种方式选取。 1、css和 $ 是一样的,方式和jquery里面的选择器相似,例如 $(".sign",“text”) 代表获取.sign类里面的文本信息。 2、xpath,举例:.xpath("//p[@class=‘job_salary’]/text()") 开头必须两个//,text()代表获取类为job_salary的p标签里面的文本。 3、regex正则表达式,一般用来获取链接。 当获取到新的连接后,可通过将链接的url存入List集合放入page.addTargetRequests();括号对新链接进行爬取。这里要判断什么时候是新链接时,什么时候是原来的链接,用判断语句隔开处理数据。
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-selenium</artifactId>
<version>0.7.5</version>
</dependency>
- getSite,可以设置一些参数,例如请求头,页面格式,重试次数,连接超时时间等。例如:
Site site=Site.me() .setRetryTimes(3)//重试5次 .setRetrySleepTime(5000)//5s间隔 .setTimeOut(10*1000) //连接超时 .setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0") .setCharset("utf-8");//10s请求时间 直接return 此site即可。
2.启动 下载器可以配置代理,通过先向代理请求,代理再向目标请求,防止被查ip。new MyProcessor()为自己创建的实现PageProcessor接口的类。因为采取到的url可能有重复,因此采用布隆去重,但是可能导致误去,但是肯定会把相同的找出来。优点是内存占用小,放的100000表示,留这么大的空间,比如你要抓取100个链接,那就写100多个的数字,比要抓取的多一点就好。采用布隆去重时,需添加依赖如下。 想保存抓取的文件时,用.addPipeline(new FilePipeline(“path”))//保存下载文件path为保存路径
此外
Spider spider = Spider.create(new MyProcessor())
.addUrl(url)
.setScheduler(new QueueScheduler().setDuplicateRemover(new BloomFilterDuplicateRemover(100000)));
spider.run();
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>16.0.1</version>
</dependency>
|