java爬虫抓取动态网页(一下爬虫博客给出完整的代码完整程序介绍)
优采云 发布时间: 2021-10-02 16:02java爬虫抓取动态网页(一下爬虫博客给出完整的代码完整程序介绍)
为了完成作业,我了解了爬虫Gecco。这个爬虫结合了之前所有爬虫的特点,但是官方教程中关于Gecco的教程太简单了。本博客根据原博客地址进行修改。只有程序的截图,没有完整的程序。这个博客给出了完整的代码。第一:爬取数据的目标是:(关于豆豆社)
创建一个 Maven 项目并导入依赖项:
com.geccocrawler
gecco
1.3.0
爬取第一页的数据,包括每页每个详细主题的链接和下一页的链接地址,
代码如下:DoutuSheIndex.java
package com.chry.GeccoCSDN;
import java.util.List;
import com.geccocrawler.gecco.GeccoEngine;
import com.geccocrawler.gecco.annotation.Gecco;
import com.geccocrawler.gecco.annotation.Href;
import com.geccocrawler.gecco.annotation.HtmlField;
import com.geccocrawler.gecco.annotation.Request;
import com.geccocrawler.gecco.request.HttpRequest;
import com.geccocrawler.gecco.spider.HtmlBean;
@Gecco(matchUrl="https://doutushe.com/portal/index/index/p/{page}", pipelines="doutusheIndex")
public class DoutuSheIndex implements HtmlBean{
/**
*
*/
private static final long serialVersionUID = 1L;
@Request
private HttpRequest request;
@Href(click=true)
@HtmlField(cssPath="a.link-2")
private List nameList; //得到的是地址
public HttpRequest getRequest() {
return request;
}
public void setRequest(HttpRequest request) {
this.request = request;
}
@Href(value="href")
@HtmlField(cssPath="a.link-2")
private ListidList; //得到的名称
@HtmlField(cssPath="ul.pagination li")
private List pageList;
public List getPageList() {
return pageList;
}
public void setPageList(List pageList) {
this.pageList = pageList;
}
public List getNameList() {
return nameList;
}
public List getIdList() {
return idList;
}
public void setNameList(List nameList) {
this.nameList = nameList;
}
public void setIdList(List idList) {
this.idList = idList;
}
}
注意:创建的类中必须有请求私有成员,并添加他的get和set方法,以便以后在proess中获取数据。
现在详细介绍页面的每个不同部分
里面的每个成员变量都有一个对应的css路径,对应网页中的元素。当对应的css类型相同时,可以使用一个List对象来存储页面中所有相同的css元素
完成DoutusheIndex.java
<p>package com.chry.GeccoCSDN;
import org.apache.http.util.TextUtils;
import com.geccocrawler.gecco.annotation.PipelineName;
import com.geccocrawler.gecco.pipeline.Pipeline;
import com.geccocrawler.gecco.request.HttpRequest;
import com.geccocrawler.gecco.scheduler.SchedulerContext;
@PipelineName(value="doutusheIndex")
public class FinishDoutusheIndex implements Pipeline{
public void process(DoutuSheIndex doutusheIndex) {
//首先遍历帖子的详情
for(int i=0;i