2020寒假生活学习日记(十四)

爬取北京市信件内容:

下载webmagic-0.7-libs.tar.gz压缩包,解压缩。没有压缩包可以加QQ:893225523

通过Filezilla上传到/home/hadoop/下载

sudo tar -zxf ~/下载/webmagic-0.7.3-all.tar.gz -C /data/edu1/

新建Java Project,命名为

点击项目名pachong1,新建一个目录,命名为libs,并将/data/edu1/webmagic-0.7-libs下的所有的jar包,拷贝到libs目录下。并选中所有jar包,右键点击“Build Path” => “Add to Build Path”

在pachong1项目下,点击src => New => Package新建一个包,在弹出窗口中,输入包名my.webmagic

在my.webmagic包下,新建class类

将新建的类,命名为Getgov,搭建完的代码框架如下:

代码编写

在WebMagic里,实现一个基本的爬虫只需要编写一个类,实现 us.codecraft.webmagic.processor.PageProcessor接口即可。这个类基本上包含了抓取一个网站,需要写的所有代码。实现接口后,重写里面的getSite和process方法

package my.webmagic;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.FilePipeline;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.scheduler.FileCacheQueueScheduler;

public class Getgov implements PageProcessor{
	private Site site=Site.me().setRetrySleepTime(3).setSleepTime(100);
	/**
	 * @param args
	 */
	public Site getSite() {
		// TODO Auto-generated method stub
		return site;
	}

	public void process(Page page) {
		// TODO Auto-generated method stub
		page.putField("allhtml",page.getHtml().toString());
		String urlstr=null;
	for(int i=2;i<=25;i++){
			urlstr="http://www.beijing.gov.cn/so/s?qt=%E4%BF%A1%E4%BB%B6&tab=zmhd&siteCode=1100000088&page="+i;
			page.addTargetRequest(urlstr);
	}
	page.addTargetRequests(page.getHtml().links().regex("view\\S+8").all());
	page.addTargetRequests(page.getHtml().regex("http://www.beijing.gov.cn/hudong/hdjl/com.web.\\S+.\\S+.flow\\?originalId=[^\"]+").all());
	page.addTargetRequests(page.getHtml().regex("http://hudong.bjhr.gov.cn/zixun/[^\"]+").all());
	page.addTargetRequests(page.getHtml().regex("http://www.beijing.gov.cn/hudong/yonghu/static/[^\"]+").all());
	page.addTargetRequests(page.getHtml().regex("http://ylba.wjw.beijing.gov.cn/ggws/[^\"]+").all());
	System.out.println(page.getHtml().regex("http://www.beijing.gov.cn/hudong/hdjl/com.web.\\S+.\\S+.flow\\?originalId=[^\"]+").all());
		}
	public static void main(String[] args) {
		Spider.create(new Getgov())
		.addUrl("http://www.beijing.gov.cn/so/s?qt=%E4%BF%A1%E4%BB%B6&tab=zmhd&siteCode=1100000088&page=1")
		.addPipeline(new FilePipeline("./"))
		.setScheduler(new FileCacheQueueScheduler("./"))
		.thread(5)
		.run();
		System.out.println("完成");
  }
}

原文地址:https://www.cnblogs.com/jccjcc/p/12308185.html

时间: 2024-08-30 13:28:02

2020寒假生活学习日记(十四)的相关文章

2020寒假生活学习日记(四)

安装mavenubuntu中没有自带安装maven,需要手动安装maven. 在终端执行如下命令创建一个文件夹sparkapp2作为应用程序根目录 在 ./sparkapp2/src/main/java 下建立一个名为 SimpleApp.java 的文件(vim ./sparkapp2/src/main/java/SimpleApp.java),添加代码如下: 该程序依赖Spark Java API,因此我们需要通过Maven进行编译打包.在./sparkapp2中新建文件pom.xml(vi

2020寒假生活学习日记(二)

使用 Spark Shell 编写代码 启动Spark Shell: 加载txt文件: 简单的RDD操作: //获取RDD文件textFile的第一行内容textFile.first() //获取RDD文件textFile所有项的计数textFile.count() //抽取含有“Spark”的行,返回一个新的RDDval lineWithSpark = textFile.filter(line => line.contains("Spark")) //统计新的RDD的行数lin

2020寒假生活学习日记(三)

安装sbtsbt是一款Spark用来对scala编写程序进行打包的工具,下载地址https://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.13.11/sbt-launch.jar 下载后,执行如下命令拷贝至 /usr/local/sbt 中: 接着在 /usr/local/sbt 中创建 sbt 脚本(vim ./sbt),添加如下内容: 为 ./sbt 脚本增加可执行权限: 最后运行如下命令,检验 sb

2020寒假生活学习日记(六)

在Windows系统和Linux系统之间互传文件 本教程大量实验都是在Linux虚拟机上完成,因此,需要掌握如何把Windows系统中 的文件上传到Linux系统,以及如何把Linux系统中的文件下载到Windows系统中. 首先,到本教程官网的“下载专区”中的“软件”目录中,下载FTP软件FileZilla的安装 文件FileZilla_3.17.0.0_win64_setup.exe,把FileZilla安装到Windows系统中:然后,请参考 本教程官网“实验指南”栏目的“在Windows

Python学习日记(十四) 正则表达式和re模块

正则表达式: 它是字符串的一种匹配模式,用来处理字符串,可以极大地减轻处理一些复杂字符串的代码量 字符组:它是在同一位置可能出现的各种字符组成了一个字符组,用[]表示,但是它的结果只能是一个数字或者一个大写字母或小写字母等 下面测试以该网站为例http://tool.chinaz.com/regex/ #正则表达式 匹配字符串 匹配结果 #[0-9] 9 9 [0-9]的写法就相当于在用[0123456789] #[0123456789] 0 0 #[a-z] 1 None 这里只匹配小写字符a

JavaScript学习总结(十四)——JavaScript编写类的扩展方法

在?J?a?v?a?S?c?r?i?p?t?中?可以使?用?类的p?r?o?t?o?t?y?p?e属性来?扩?展?类的属?性?和?方?法,在实际开发当中,当JavaScript内置的那些类所提供的动态方法和动态属性不满足我们实际开发时,我们就可以通过"prototype"属性给自定义类添加方法和属性或者扩展原有的类中的方法和属性. 一.扩展JavaScript内置类,添加动态方法 语法格式: 类名.prototype.方法名 = function([param1],[param2],.

Swift学习笔记十四:构造(Initialization)

类和结构体在实例创建时,必须为所有存储型属性设置合适的初始值.存储型属性的值不能处于一个未知的状态. 你可以在构造器中为存储型属性赋初值,也可以在定义属性时为其设置默认值.以下章节将详细介绍这两种方法. 注意: 当你为存储型属性设置默认值或者在构造器中为其赋值时,它们的值是被直接设置的,不会触发任何属性观测器(property observers). 一.基本语法 class Human{ var name :String init(){ name = "human" } init(n

laravel3学习笔记(十四)

原作者博客:ieqi.net ==================================================================================================== 运行时配置 在 Laravel3 中很多地方我们都可以看到“约定大于配置”的影子,我本人也很喜欢这种工程哲学尤其是在框架领域,当然这并不能代替所有的配置.我们知道 Laravel3 中,主要配置都写在 application/config 文件夹下,在应用逻辑中,往往

C++语言学习(十四)——C++类成员函数调用分析

C++语言学习(十四)--C++类成员函数调用分析 一.C++成员函数 1.C++成员函数的编译 C++中的函数在编译时会根据命名空间.类.参数签名等信息进行重新命名,形成新的函数名.函数重命名的过程通过一个特殊的Name Mangling(名字编码)算法来实现.Name Mangling算法是一种可逆的算法,既可以通过现有函数名计算出新函数名,也可以通过新函数名逆向推导出原有函数名.Name Mangling算法可以确保新函数名的唯一性,只要命名空间.所属的类.参数签名等有一个不同,那么产生的