scrapy分页抓取网页(Java版的爬虫框架webmagic框架.xml了)

优采云 发布时间: 2021-09-30 10:01

  scrapy分页抓取网页(Java版的爬虫框架webmagic框架.xml了)

  我做爬虫已经一年了。那一年我没有足够的技能。我一点一点地写代码。后来,我研究了所谓的最佳爬虫抓取的结构,并复制了一个java版本的爬虫框架webmagic

  该框架还分为spider、scheduler、downloader和pipeline模块。此外,还有一个选择器,它集成了常见的提取技术(正则和XPath),并支持链式调用以及单数和复数切换。因为我厌倦了各种各样的提取规律,所以我在提取方面付出了更多的努力

  没有什么废话。转到代码。爬虫程序可以通过直接在webmagic中实现pageprocessor接口来实现。例如,抓取我的点滴博客:

   public class DiandianBlogProcessor implements PageProcessor {

private Site site;

@Override

public void process(Page page) {

//a()表示提取链接,as()表示提取所有链接

//getHtml()返回Html对象,支持链式调用

//r()表示用正则表达式提取一条内容,rs()表示提取多条内容

//toString()表示取单条结果,toStrings()表示取多条

List requests = page.getHtml().as().rs("(.*/post/.*)").toStrings();

//使用page.addTargetRequests()方法将待抓取的链接加入队列

page.addTargetRequests(requests);

//page.putField(key,value)将抽取的内容加入结果Map

//x()和xs()使用xpath进行抽取

page.putField("title", page.getHtml().x("//title").r("(.*?)\\|"));

//sc()使用readability技术直接抽取正文,对于规整的文本有比较好的抽取正确率

page.putField("content", page.getHtml().sc());

page.putField("date", page.getUrl().r("post/(\\d+-\\d+-\\d+)/"));

page.putField("id", page.getUrl().r("post/\\d+-\\d+-\\d+/(\\d+)"));

}

@Override

public Site getSite() {

//site定义抽取配置,以及开始url等

if (site == null) {

site = Site.me().setDomain("progressdaily.diandian.com").setStartUrl("http://progressdaily.diandian.com/").

setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31");

}

return site;

}

}

  然后实现抓取代码:

   public class DiandianProcessorTest {

@Test

public void test() throws IOException {

DiandianBlogProcessor diandianBlogProcessor = new DiandianBlogProcessor();

//pipeline是抓取结束后的处理

//ftl文件放到classpath:ftl/文件夹下

//输出默认放到/data/temp/webmagic/ftl/[domain]目录下

FreemarkerPipeline pipeline = new FreemarkerPipeline("wordpress.ftl");

//Spider.me()是简化写法,其实就是new一个啦

//Spider.pipeline()设定一个pipeline,支持设置多个pipeline,多个pipeline会进行链式调用

//FileCacheQueueSchedular保存url,支持断点续传,临时文件输出到/data/temp/webmagic/cache目录

//Spider.run()执行

Spider.me().pipeline(pipeline).schedular(new FileCacheQueueSchedular(diaoyuwengProcessor.getSite(), "/data/temp/webmagic/cache/")).

processor(diaoyuwengProcessor).run();

}

}

  再次运行后,将所有输出文件合并在一起,并添加WP的开头和结尾,即wordpress-backup.xml

  代码是开源的。邪恶的用途是什么?你知道吗

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线