scrapy分页抓取网页(Java版的爬虫框架webmagic框架.xml了)
优采云 发布时间: 2021-09-30 10:01scrapy分页抓取网页(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
代码是开源的。邪恶的用途是什么?你知道吗