利用WebMagic实现数据爬虫并保存到数据库 (webmagic 保存到数据库)

随着互联网的高速发展,数据量越来越庞大,传统的手动采集数据已经无法满足需求,因此,数据爬虫成为了一种重要的自动化采集数据工具。而WebMagic是一款开源的Java爬虫框架,拥有强大的爬取、解析和存储功能。本文将介绍如何的具体实现方式。

一、概述

WebMagic是一款功能强大的Java爬虫框架,它提供了强大的爬取、解析和存储功能,可以方便地进行数据采集、数据清洗和数据分析。WebMagic采用了面向对象的编程思想,提供了方便的API和灵活的扩展机制,使得爬虫的编写变得更加简单和快速。同时,WebMagic支持多线程、分布式部署和大规模数据处理,可以满足各种不同的需求。

二、准备工作

在编写爬虫之前,需要进行一些准备工作:

1. 相应的开发环境

WebMagic是一个基于Java的爬虫框架,因此需要安装Java环境。此外,还需要安装Maven管理工具。具体安装方法可以参考官方文档。

2. 确定数据来源

在进行数据采集之前,需要确定所需数据的来源。可以在浏览器中打开相应的网页,通过查看源代码获得所需数据所在的位置和格式。

3. 选择适当的数据库

爬取到的数据需要进行存储,因此需要选择适当的数据库。WebMagic支持多种数据库的操作,比如MySQL、Oracle、MongoDB等。

4. 导入所需的依赖包

在编写爬虫代码时,需要使用一些开源的库,比如Jsoup、HttpClient等。这些库可以通过Maven进行管理,需要在pom.xml文件中添加相应的依赖包。

三、编写爬虫代码

在进行了上述准备工作之后,就可以开始编写爬虫代码了。WebMagic提供了丰富的接口和方法,可以根据不同的需求进行自由组合。下面以一个简单的爬取豆瓣电影Top250的例子来介绍WebMagic的基本用法。

1.创建一个Java项目,并添加pom.xml文件

在刚创建的Java项目中,需要添加pom.xml文件,并导入相关的依赖包。

2.创建一个Spider类

在Java项目中创建一个Spider类,并继承自WebMagic中的Spider类。在Spider类中实现自己的业务逻辑。

“`java

public class MovieSpider extends Spider {

private Site site = Site.me().setRetryTimes(3).setSleepTime(1000).setTimeOut(10000);

public MovieSpider() {

this.site = site;

}

public MovieSpider(Site site) {

this.site = site;

}

public void crawler(String url) {

this.addUrl(url)

.setScheduler(new QueueScheduler().setDuplicateRemover(new HashSetDuplicateRemover()))

.thread(5)

.addPipeline(new ConsolePipeline())

.run();

}

}

“`

在这个类中,我们创建了一个Site对象,用于设置爬虫的一些参数,比如重试次数、休眠时间、超时时间等。

3.解析网页

在Spider类中,我们需要实现process方法,用于解析网页。

“`java

@Override

public void process(Page page) {

List links = page.getHtml().links().regex(“https://movie.douban.com/top250\\?start=\\d+&filter=”).all();

page.addTargetRequests(links);

if (page.getUrl().regex(“https://movie\\.douban\\.com/subject/.*”).match()) {

String title = page.getHtml().xpath(“//*[@id=\”content\”]/h1/span[1]/text()”)

.replace(” “, “”)

.replace(“\n”, “”)

.get();

String rating = page.getHtml().xpath(“//*[@id=\”interest_sectl\”]/div[1]/div[2]/strong/text()”)

.get();

MovieInfo movieInfo = new MovieInfo();

movieInfo.setTitle(title);

movieInfo.setRating(rating);

page.putField(“movieInfo”, movieInfo);

} else {

page.setSkip(true);

}

}

“`

在这个方法中,我们使用了Page类提供的一些方法来对网页进行解析,比如getHtml、links、regex等。在获取到相应的数据之后,我们可以将其放在MovieInfo类中,并使用putField方法进行存储。同时,我们可以使用setSkip方法来控制是否需要对该网页进行存储。

4.存储数据

在Spider类中,我们需要使用Pipeline来存储数据。WebMagic提供了多种Pipeline的实现,比如ConsolePipeline、FilePipeline、JsonFilePipeline等。这里我们使用自定义的MySQLPipeline来将数据存储到MySQL数据库中。

“`java

public class MySQLPipeline implements Pipeline {

private final Logger logger = LoggerFactory.getLogger(getClass());

private String url = “jdbc:mysql://localhost:3306/movies?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8”;

private String username = “root”;

private String password = “123456”;

private String driverClassName = “com.mysql.cj.jdbc.Driver”;

private DataSource dataSource;

public MySQLPipeline() {

this.dataSource = getDataSource();

}

public MySQLPipeline(String url, String username, String password, String driverClassName) {

this.url = url;

this.username = username;

this.password = password;

this.driverClassName = driverClassName;

this.dataSource = getDataSource();

}

@Override

public void process(ResultItems resultItems, Task task) {

Connection connection = null;

PreparedStatement preparedStatement = null;

try {

connection = dataSource.getConnection();

String sql = “insert into movie_info(title, rating) values(?, ?)”;

preparedStatement = connection.prepareStatement(sql);

MovieInfo movieInfo = resultItems.get(“movieInfo”);

preparedStatement.setString(1, movieInfo.getTitle());

preparedStatement.setString(2, movieInfo.getRating());

preparedStatement.executeUpdate();

} catch (SQLException e) {

logger.error(“保存数据失败:”, e);

} finally {

close(connection, preparedStatement);

}

}

public void close(Connection connection, PreparedStatement preparedStatement) {

try {

preparedStatement.close();

connection.close();

} catch (SQLException e) {

logger.error(“释放资源失败:”, e);

}

}

public DataSource getDataSource() {

BasicDataSource dataSource = new BasicDataSource();

dataSource.setUrl(url);

dataSource.setUsername(username);

dataSource.setPassword(password);

dataSource.setDriverClassName(driverClassName);

return dataSource;

}

}

“`

在这个类中,我们首先使用DataSource来获取数据库连接,然后在process方法中使用JDBC的方式将数据存储到数据库中。在获取到连接之后,我们需要编写相应的SQL语句,并使用preparedStatement对象将数据存储到数据库中。在释放资源之前,我们需要关闭连接和preparedStatement对象。

五、启动爬虫

在完成了Spider类的编写之后,我们就可以启动爬虫了。在mn方法中,我们创建一个Spider类实例,并调用crawler方法来启动爬虫。crawler方法需要传入一个url参数,用于指定爬虫的起始页面。

“`java

public class App {

public static void mn(String[] args) {

MovieSpider spider = new MovieSpider();

spider.crawler(“https://movie.douban.com/top250”);

}

}

“`

在启动爬虫之后,可以通过控制台输出来查看爬取到的数据。

六、

相关问题拓展阅读:

大数据爬虫技术有什么功能

大数据爬虫,我之一次听说!刚刚阅读,还是不太明白!

网络爬虫是Spider(或Robots、Crawler)等词的意译,是一种蠢灶高效的信息抓取工具,它集成了搜索引擎技术,并通过技术手段进行带厅扮优化,用以从互联网搜索、抓取并保存任何通过HTML(超文本标记语言)进行标准化的网页信息。其作用机理是:发送请求给互联定站点,在建立连接后与该站点交互,获取HTML格式的信息,随后转移到下一个站点,并重复以上流程。通过这种自动化的工作机制,将目标数据保存在本地数据中,以供使用。伏搏网络爬虫在访问一个超文本链接时,可以从HTML标签中自动获取指向其他网页的地址信息,因而可以自动实现高效、标准化的信息获取。 随着互联网在人类经济社会中的应用日益广泛,其所涵盖的信息规模呈指数增长,信息的形式和分布具有多样化、全球化特征,传统搜索引擎技术已经无法满足日益精细化、专业化的信息获取和加工需求,正面临着巨大的挑战。网络爬虫自诞生以来,就发展迅猛,并成为信息技术领域的主要研究热点。当前,主流的网络爬虫搜索策略有如下几种。

爬虫就是爬取网络数据,网络爬虫(网络爬虫又被称为网页蜘蛛、网神消袜络机器人,在FOAF社区中间,更经常的称为网页追逐者,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。梦蝶数据就是应用爬虫游激数据采集 ,不断完桥手善多维度平台爬虫采集规则,轻松运行,自主采集

大数据的用途有哪些?

要说大数据的用途,那可就相当广泛了,基本各行各业都可以运用到大数据的知识。如果没氏简单枯哪散理解的话,可分为以下四类:

用途一:业务流程优化

大数据更多的是协助业务流程效率的提升。能够根据并运用社交网络数据信息 、网站搜索及其天气预告找出有使用价值的数据信息,这其中大数据的运用普遍的便是供应链管理及其派送线路的提升。在这两个层面,自然地理精准定位和无线通信频率的鉴别跟踪货物和送大货车,运用交通实时路况线路数据信息来选择更好的线路。人力资源管理业务流程也根据大数据的剖析来开展改善,这这其中就包含了职位招聘的调整。

用途二:提高医疗和研发

大型数据分析应用程序的计算能力允许我们在几分钟内解码整个dna。可以创造新的治疗方法。它还能更好地掌握和预测疾病。如同大家配戴智能手表和别的能够转化成的数据信息一样,互联网大数据还可以协助病人尽快医治疾患。现在大数据技术已经被用于医院监测早产儿和生病婴儿的状况。通过记录和分析婴儿的心跳,医生预测可能的不适症状。这有助于医生更好地帮助宝宝。

用途三:改善我们的城市

大数据也被用于改进我们在城市的生活起居。比如,依据城市的交通实时路况信息,运用社交媒体季节变化数据信息,增加新的交通线路。现阶段,很多城市已经开展数据分析和示范点新项目。

用途四:理解客户、满足客户服务需求

互联网大数据的运用在这个行业早已广为人知。重点是如何使用大数据来更好地掌握客户及其兴趣和行为。缓困企业非常喜欢收集社交数据、浏览器日志、分析文本和传感器数据,以更全面地掌握客户。一般来说,建立数据模型是为了预测。

1、提升访问速度

2、防火墙作用

3、突破访问限制

开源爬虫框架各有什么优缺点

开发网络爬盯模虫应该选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?凯贺缓这里按照我的经验随便扯淡一下:

上面说的爬虫,基本可以分3类:

1.分布式爬虫:Nutch

2.JAVA单机爬虫:Crawler4j、WebMagic、WebCollector

3. 非JAVA单机爬虫:scrapy

全国独享高端优质拍衡ip,高匿稳定来了解下

  开发网络爬虫应该选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?这里按照我的经验随便扯淡一下:上面说的爬虫,基本可以分3类:1.分布式爬虫:Nutch

  2.JAVA单机爬虫:Crawler4j、WebMagic、WebCollector

  3. 非JAVA单机爬虫:scrapy

  之一类:分布式爬虫

  爬虫使用分布式,主要是解决两个问题:

  1)海量URL管理

  2)网速

  现在比较流行的分布式爬虫,是Apache的Nutch。但是对于大多数用户来说,Nutch是这几类爬虫里,最不好的选择,理由如下:

  1)Nutch是为搜索引擎设计的爬虫,大多数用户是需要一个做精准数据爬取(精抽取)的爬虫。Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的。对精抽取没有太大的意义。也就是说,用Nutch做数据抽取,会浪费很多的时间在不必要的计算上。而且如果你试图通过对Nutch进行二次开发,来使得它适用于精抽取的业务,基本上就要破坏Nutch的框架,把Nutch改的面目全非,有修改Nutch的能力,真的不如自己重新写一个分布式爬虫框架塌埋羡了。

  2)Nutch依赖hadoop运行,hadoop本身会消耗很多的时间。如果集群机器数量较少,爬取速度反而不如单机爬虫快。

  3)Nutch虽然有一套插件机制,而且作为亮点宣传。可以看到一些开源的Nutch插件,提供精抽取的功能。但是开发过Nutch插件的人都知道,Nutch的插件系统有多蹩脚。利用反射的机制来加载和调用插件,使得程序的编写和调试都变得异常困难,更别说在上面开发一套复杂的精抽取系统了。而且Nutch并没有为精抽取提供相应的插件挂载点。Nutch的插件有只有五六个挂载点,而这五六个挂载点都是为了搜索引擎服务的,并没有为精抽取提供挂载点。大多数Nutch的精抽取插件,都是挂载在“页面解析”(parser)这个挂载点的,这个挂载点其实是为了解析链接团拍(为后续爬取提供URL),以及为搜索引擎提供一些易抽取的网页信息(网页的meta信息、text文本)。

  4)用Nutch进行爬虫的二次开发,爬虫的编写和调试所需的时间,往往是单机爬虫所需的十倍时间不止。了解Nutch源码的学习成本很高,何况是要让一个团队的人都读懂Nutch源码。调试过程中会出现除程序本身之外的各种问题(hadoop的问题、hbase的问题)。

  5)很多人说Nutch2有gora,可以持久化数据到avro文件、hbase、mysql等。很多人其实理解错了,这里说的持久化数据,是指将URL信息(URL管理所需要的数据)存放到avro、hbase、mysql。并不是你要抽取的结构化数据。其实对大多数人来说,URL信息存在哪里无所谓。

  6)Nutch2的版本目前并不适合开发。官方现在稳定的Nutch版本是nutch2.2.1,但是这个版本绑定了gora-0.3。如果想用hbase配合nutch(大多数人用nutch2就是为了用hbase),只能使用0.90版本左右的hbase,相应的就要将hadoop版本降到hadoop 0.2左右。而且nutch2的官方教程比较有误导作用,Nutch2的教程有两个,分别是Nutch1.x和Nutch2.x,这个Nutch2.x官网上写的是可以支持到hbase 0.94。但是实际上,这个Nutch2.x的意思是Nutch2.3之前、Nutch2.2.1之后的一个版本,这个版本在官方的SVN中不断更新。而且非常不稳定(一直在修改)。

  所以,如果你不是要做搜索引擎,尽量不要选择Nutch作为爬虫。有些团队就喜欢跟风,非要选择Nutch来开发精抽取的爬虫,其实是冲着Nutch的名气(Nutch作者是Doug Cutting),当然最后的结果往往是项目延期完成。

  如果你是要做搜索引擎,Nutch1.x是一个非常好的选择。Nutch1.x和solr或者es配合,就可以构成一套非常强大液察的搜索引擎了。如果非要用Nutch2的话,建议等到Nutch2.3发布再看。目前的Nutch2是一个非常不稳定的版本。

  第二类:JAVA单机爬虫

  这里把JAVA爬虫单独分为一类,是因为JAVA在网络爬虫这块的生态圈是非常完善的。相关的资料也是最全的。这里可能有争议,我只是随便扯淡。

  其实开源网络爬虫(框架)的开发非常简单,难问题和复杂的问题都被以前的人解决了(比如DOM树解析和定位、字符集检测、海量URL去重),可以说是毫无技术含量。包括Nutch,其实Nutch的技术难点是开发hadoop,本身代码非常简单。网络爬虫从某种意义来说,类似遍历本机的文件,查找文件中的信息。没有任何难度可言。之所以选择开源爬虫框架,就是为了省事。比如爬虫的URL管理、线程池之类的模块,谁都能做,但是要做稳定也是需要一段时间的调试和修改的。

  对于爬虫的功能来说。用户比较关心的问题往往是:

  1)爬虫支持多线程么、爬虫能用代理么、爬虫会爬取重复数据么、爬虫能爬取生成的信息么?

  不支持多线程、不支持代理、不能过滤重复URL的,那都不叫开源爬虫,那叫循环执行http请求。

  能不能爬js生成的信息和爬虫本身没有太大关系。爬虫主要是负责遍历网站和下载页面。爬js生成的信息和网页信息抽取模块有关,往往需要通过模拟浏览器(htmlunit,selenium)来完成。这些模拟浏览器,往往需要耗费很多的时间来处理一个页面。所以一种策略就是,使用这些爬虫来遍历网站,遇到需要解析的页面,就将网页的相关信息提交给模拟浏览器,来完成生成信息的抽取。

  2)爬虫可以爬取ajax信息么?

  网页上有一些异步加载的数据,爬取这些数据有两种方法:使用模拟浏览器(问题1中描述过了),或者分析ajax的http请求,自己生成ajax请求的url,获取返回的数据。如果是自己生成ajax请求,使用开源爬虫的意义在哪里?其实是要用开源爬虫的线程池和URL管理功能(比如断点爬取)。

  如果我已经可以生成我所需要的ajax请求(列表),如何用这些爬虫来对这些请求进行爬取?

  爬虫往往都是设计成广度遍历或者深度遍历的模式,去遍历静态或者动态页面。爬取ajax信息属于deep web(深网)的范畴,虽然大多数爬虫都不直接支持。但是也可以通过一些方法来完成。比如WebCollector使用广度遍历来遍历网站。爬虫的之一轮爬取就是爬取种子(seeds)中的所有url。简单来说,就是将生成的ajax请求作为种子,放入爬虫。用爬虫对这些种子,进行深度为1的广度遍历(默认就是广度遍历)。

  3)爬虫怎么爬取要登陆的网站?

  这些开源爬虫都支持在爬取时指定cookies,模拟登陆主要是靠cookies。至于cookies怎么获取,不是爬虫管的事情。你可以手动获取、用http请求模拟登陆或者用模拟浏览器自动登陆获取cookie。

  4)爬虫怎么抽取网页的信息?

  开源爬虫一般都会集成网页抽取工具。主要支持两种规范:CSS SELECTOR和XPATH。至于哪个好,这里不评价。

  5)爬虫怎么保存网页的信息?

  有一些爬虫,自带一个模块负责持久化。比如webmagic,有一个模块叫pipeline。通过简单地配置,可以将爬虫抽取到的信息,持久化到文件、数据库等。还有一些爬虫,并没有直接给用户提供数据持久化的模块。比如crawler4j和webcollector。让用户自己在网页处理模块中添加提交数据库的操作。至于使用pipeline这种模块好不好,就和操作数据库使用ORM好不好这个问题类似,取决于你的业务。

  6)爬虫被网站封了怎么办?

  爬虫被网站封了,一般用多代理(随机代理)就可以解决。但是这些开源爬虫一般没有直接支持随机代理的切换。所以用户往往都需要自己将获取的代理,放到一个全局数组中,自己写一个代理随机获取(从数组中)的代码。

  7)网页可以调用爬虫么?

  爬虫的调用是在Web的服务端调用的,平时怎么用就怎么用,这些爬虫都可以使用。

  8)爬虫速度怎么样?

  单机开源爬虫的速度,基本都可以讲本机的网速用到极限。爬虫的速度慢,往往是因为用户把线程数开少了、网速慢,或者在数据持久化时,和数据库的交互速度慢。而这些东西,往往都是用户的机器和二次开发的代码决定的。这些开源爬虫的速度,都很可以。

  9)明明代码写对了,爬不到数据,是不是爬虫有问题,换个爬虫能解决么?

  如果代码写对了,又爬不到数据,换其他爬虫也是一样爬不到。遇到这种情况,要么是网站把你封了,要么是你爬的数据是javascript生成的。爬不到数据通过换爬虫是不能解决的。

  10)哪个爬虫可以判断网站是否爬完、那个爬虫可以根据主题进行爬取?

  爬虫无法判断网站是否爬完,只能尽可能覆盖。

  至于根据主题爬取,爬虫之后把内容爬下来才知道是什么主题。所以一般都是整个爬下来,然后再去筛选内容。如果嫌爬的太泛,可以通过限制URL正则等方式,来缩小一下范围。

  11)哪个爬虫的设计模式和构架比较好?

  设计模式纯属扯淡。说软件设计模式好的,都是软件开发完,然后总结出几个设计模式。设计模式对软件开发没有指导性作用。用设计模式来设计爬虫,只会使得爬虫的设计更加臃肿。

  至于构架,开源爬虫目前主要是细节的数据结构的设计,比如爬取线程池、任务队列,这些大家都能控制好。爬虫的业务太简单,谈不上什么构架。

  所以对于JAVA开源爬虫,我觉得,随便找一个用的顺手的就可以。如果业务复杂,拿哪个爬虫来,都是要经过复杂的二次开发,才可以满足需求。

  第三类:非JAVA单机爬虫

  在非JAVA语言编写的爬虫中,有很多优秀的爬虫。这里单独提取出来作为一类,并不是针对爬虫本身的质量进行讨论,而是针对larbin、scrapy这类爬虫,对开发成本的影响。

  先说python爬虫,python可以用30行代码,完成JAVA 50行代码干的任务。python写代码的确快,但是在调试代码的阶段,python代码的调试往往会耗费远远多于编码阶段省下的时间。使用python开发,要保证程序的正确性和稳定性,就需要写更多的测试模块。当然如果爬取规模不大、爬取业务不复杂,使用scrapy这种爬虫也是蛮不错的,可以轻松完成爬取任务。

  对于C++爬虫来说,学习成本会比较大。而且不能只计算一个人的学习成本,如果软件需要团队开发或者交接,那就是很多人的学习成本了。软件的调试也不是那么容易。

  还有一些ruby、php的爬虫,这里不多评价。的确有一些非常小型的数据采集任务,用ruby或者php很方便。但是选择这些语言的开源爬虫,一方面要调研一下相关的生态圈,还有就是,这些开源爬虫可能会出一些你搜不到的BUG(用的人少、资料也少)

  End.

首先爬虫框架有三种

分布式爬虫:Nutch

JAVA单机爬虫:Crawler4j,WebMagic,WebCollector

非JAVA单机爬虫:scrapy

之一类:分布式爬虫

优点:

海量URL管理

网速快

缺点:

Nutch是为搜索引擎设计的爬虫,大多数用户是需要一个做精准数据爬取(精抽取)的爬虫。Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的。对精抽取没有太大的意义。

用Nutch做数据抽取,会浪费很多的时间在不必要的计算上。而且如果你试图通过对Nutch进行二次开发,来使得它适用于精抽取的业务,基本上就要破坏Nutch的框架,把Nutch改的面目全非。

Nutch依赖hadoop运行,hadoop本身会消耗很多的时间。如果集群机器数量较少,爬取速度反而不如单机爬虫。

Nutch虽然有一套插件机制,而且作为亮点宣传。可以看到一些开源的Nutch插件,提供精抽取的功能。但是开发过Nutch插件的人都知道,Nutch的插件系统有多蹩脚。利用反射的机制来加载和调用插件,使得程序的编写和调试都变得异常困难,更别说在上面开发一套复杂的精抽取系统了。

Nutch并没有为精抽取提供相应的插件挂载点。Nutch的插件有只有五六个挂载点,而这五六个挂载点都是为了搜索引擎服务的,并没有为精抽取提供挂载点。大多数Nutch的精抽取插件,都是挂载在“页面解析”(parser)这个挂载点的,这个挂载点其实是为了解析链接(为后续爬取提供URL),以及为搜索引擎提供一些易抽取的网页信息(网页的meta信息、text)

用Nutch进行爬虫的二次开发,爬虫的编写和调试所需的时间,往往是单机爬虫所需的十倍时间不止。了解Nutch源码的学习成本很高,何况是要让一个团队的人都读懂Nutch源码。调试过程中会出现除程序本身之外的各种问题(hadoop的问题、hbase的问题)。

Nutch2的版本目前并不适合开发。官方现在稳定的Nutch版本是nutch2.2.1,但是这个版本绑定了gora-0.3。Nutch2.3之前、Nutch2.2.1之后的一个版本,这个版本在官方的SVN中不断更新。而且非常不稳定(一直在修改)。

第二类:JAVA单机爬虫

优点:

支持多线程。

支持代理。

能过滤重复URL的。

负责遍历网站和下载页面。爬js生成的信息和网页信息抽取模块有关,往往需御配要通过模拟浏览器(htmlunit,selenium)来完成。

缺点:

设计模式对软件开发没有指导性作用。用设计模式来设计爬虫,只会使得爬虫的设计更加臃肿。

第三类:非JAVA单机爬虫

优点:

先说python爬虫,python可以用30行代码,完成JAVA 

50行代码干的任务。python写代码的确快,但是在调试代码的阶段,python代码的调试往往会耗费远远多于编码阶段省下的时间。

使用python开发,要保证程序的正确性和稳定性,就需要写更多的测试模块。当然如果爬取规模不行拦大、爬取业务不复杂,使用scrapy这种爬虫也是蛮不错的,可以轻松完成爬取任务。

缺点:

bug较多,不稳定。

爬虫可以爬取ajax信息么?

网页上有一些异步加载的数据,爬取这些数据有两档拆胡种方法:使用模拟浏览器(问题1中描述过了),或者分析ajax的http请求,自己生成ajax请求的url,获取返回的数据。如果是自己生成ajax请求,使用开源爬虫的意义在哪里?其实是要用开源爬虫的线程池和URL管理功能(比如断点爬取)。

如果我已经可以生成我所需要的ajax请求(列表),如何用这些爬虫来对这些请求进行爬取?      

爬虫往往都是设计成广度遍历或者深度遍历的模式,去遍历静态或者动态页面。爬取ajax信息属于deepweb(深网)的范畴,虽然大多数爬虫都不直接支持。但是也可以通过一些方法来完成。比如WebCollector使用广度遍历来遍历网站。爬虫的之一轮爬取就是爬取种子(seeds)中的所有url。简单来说,就是将生成的ajax请求作为种子,放入爬虫。用爬虫对这些种子,进行深度为1的广度遍历(默认就是广度遍历)。

爬虫怎么爬取要登陆的网站?

这些开源爬虫都支持在爬取时指定cookies,模拟登陆主要是靠cookies。至于cookies怎么获取,不是爬虫管的事情。你可以手动获取、用http请求模拟登陆或者用模拟浏览器自动登陆获取cookie。

爬虫怎么抽取网页的信息?

开源爬虫一般都会集成网页抽取工具。主要支持两种规范:CSSSELECTOR和XPATH。

网页可以调用爬虫么?

爬虫的调用是在Web的服务端调用的,平时怎么用就怎么用,这些爬虫都可以使用。

爬虫速度怎么样?

单机开源爬虫的速度,基本都可以讲本机的网速用到极限。爬虫的速度慢,往往是因为用户把线程数开少了、网速慢,或者在数据持久化时,和数据库的交互速度慢。而这些东西,往往都是用户的机器和二次开发的代码决定的。这些开源爬虫的速度,都很可以。

关于webmagic 保存到数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 利用WebMagic实现数据爬虫并保存到数据库 (webmagic 保存到数据库)