** (一)前言**
工作学习中,需要进行爬虫。百度百科上说,
网络爬虫(又被称为网页蜘蛛
,网络机器人,在FOAF
社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网
信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁
、自动索引、模拟程序或者蠕虫
。
网络爬虫,我是这样理解的,简单说,就是下载web网页上的html代码中的信息。
那么到底用什么语言爬虫呢?python
不过python语言毕竟不太熟,虽然python爬虫
网络功能强大,比较方便模拟登陆、以及解析javascript ,
写起起程序来很是便捷,只有
网页解析这个劣势,不过我还是没有用它。
我使用的是java语言来爬虫,初学者才开始学习,没有什么经验,也就没有使用httpclient这些工具直接url爬虫,而是使用了国内的开源爬虫框架
webmagic框架来爬虫。
(二)简介
webmagic是一个国内的java开源爬虫框架,它采用完全模块化的设计,功能覆盖整个爬虫的生命周期(链接提取、页面下载、内容抽取、持久化等),也支持多线程抓取、分布式抓取,并支持自动重试、自定义UA/cookie等功能。
对初学者而言,
webmagic包含页面抽取功能,很方便使用,初学者可以使用css selector、xpath和正则表达式进行链接和内容的提取,支持多个选择器链式调用。
(三)webmagic的java爬虫
不废话了,直接上代码。
maven依赖:
1
2
3
4
5
6
7
8
9
10
11 1<dependency>
2 <groupId>us.codecraft</groupId>
3 <artifactId>webmagic-core</artifactId>
4 <version>0.7.3</version>
5</dependency>
6<dependency>
7 <groupId>us.codecraft</groupId>
8 <artifactId>webmagic-extension</artifactId>
9 <version>0.7.3</version>
10</dependency>
11
1
2 1 java代码:
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 1package Webmagic.donghua.dmzj.com;
2
3/***Created by mo
4 *On 2017/10/30 ***15:36.
5 ******/
6import us.codecraft.webmagic.Page;
7import us.codecraft.webmagic.Site;
8import us.codecraft.webmagic.Spider;
9import us.codecraft.webmagic.processor.PageProcessor;
10import us.codecraft.webmagic.selector.Html;
11
12public class DmzjProcessor implements PageProcessor {
13 int myid = 0;
14 int size =10;
15 // 抓取网站的相关配置,可以包括编码、抓取间隔1s、重试次数等
16 private Site site = Site.me().setCharset("utf8").setRetryTimes(1000).setSleepTime(1000);
17 @Override
18 public Site getSite() {
19 return site;
20 }
21
22 @Override
23 public void process(Page page) {
24 Html html = page.getHtml();
25 size++;
26 String hahawebname = html.xpath("//div[@class=\"odd_anim_title_tnew\"]/div[@class=\"tvversion\"]/a/span[@class=\"anim_title_text\"]/h1/text()").get();//得分
27 String goal = html.xpath("//div[@class=\"anim_star\"]/ul/li[@id=\"anim_score_info\"]/span[@class=\"points_text\"]/text()").get();//得分
28 String mentotalold = html.xpath("//div[@class=\"anim_star\"]/ul/li[@id=\"score_statistics\"]/span[@id=\"score_count_span\"]/text()").get();//人数
29 String mentotal = mentotalold.replaceAll("人评分","");
30 String content = html.xpath("//div[@class=\"odd_anim_title_mnew\"]/p/span[@id=\"gamedescshort\"]/text()").get();//内容
31 String contentdetail = html.xpath("//div[@class=\"odd_anim_title_mnew\"]/p/span[@id=\"gamedescall\"]/text()").get();//内容
32 String url = "http://donghua.dmzj.com/donghua_info/"+size+".html";
33 System.out.println("hahawebname: "+ hahawebname);
34 System.out.println("goal: "+goal);
35 System.out.println("mentotal: "+ mentotal);
36 System.out.println("content: "+ content);
37 System.out.println("url: "+ url);
38 System.out.println("contentdetail: "+ contentdetail);
39}
40 public static void main(String[] args) {
41 int username = 10;
42 DmzjProcessor my = new DmzjProcessor();
43 long startTime, endTime;
44 System.out.println("开始爬取...");
45 for(;username<=15000;username++) {
46 startTime = System.currentTimeMillis();
47 Spider.create(my).addUrl("http://donghua.dmzj.com/donghua_info/" + username + ".html").thread(5).run();
48 endTime = System.currentTimeMillis();
49 System.out.println("爬取结束,耗时约" + ((endTime - startTime) / 1000) + "秒");
50 }
51 }
52}
53
1
2 1 运行的结果为:
2
(四)过程:
(1)首先使用谷歌浏览器查看html网页
(2)查找我们想要获取的内容(比如说简介,动画名,制作公司什么的),一般情况下,首先找到我们想要查找的内容,选中点右键点检查,就会跳出如下图右边的一个框框,那里边有你想要的内容,找到不重复的标签就好。
(3)编写正则语句就好。
希望对你有所帮助!