m0_63884424 2022-09-21 12:41 采纳率: 20%
浏览 19

对其他网站的爬虫代码更改问题

package alp.starcode.example;

import org.springframework.stereotype.Component;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Html;
import us.codecraft.webmagic.selector.Selectable;

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

@Component
public class NewsProcessor implements PageProcessor {

// 部分一:抓取网站的相关配置,包括编码、抓取间隔、重试次数等
private Site site = Site.me().setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36").setRetryTimes(3).setSleepTime(1000);

private News news = new News();

private List<Map<String,String>>  mapList= new ArrayList<>();

@Override
// process是定制爬虫逻辑的核心接口,在这里编写抽取逻辑
public void process(Page page) {
    //判断是否为首页
    String s = page.getHtml().xpath("//div[@class='list']").toString();
    //判断是列表还是详情页
    Html html = page.getHtml();
    List<Selectable> nodes = html.css(".list > .news-item").nodes();
    if (nodes.size()>0){
        List<News> newsList = new ArrayList<>();
        for (Selectable node : nodes) {
            //获取节点里面的值
            String abstractContent = node.css(".news-item > .item-content > p", "text").get();
            String title = node.css(".news-item > .item-content > .text-hidden> a", "text").get();
            String author= "";
            String publishTime = "";
            news = new News();
            Map<String,String> map = new HashMap<>();
            
            map.put("title",title);
            map.put("abstract",abstractContent);
            mapList.add(map);
            news.setImgUrl(imgUrl);
            String detailUrl = node.xpath("//a/@href").get();
            
            List<String> urls = new ArrayList<>();
            if (detailUrl!=null){
                urls.add(detailUrl);
                page.addTargetRequests(urls);
                //String s1 = page.getHtml().toString();
                //System.out.println(s1);
            }
        }
    }else {
        //解析详情页
        parseInfo(page,news);
    }
}

//解析详情页
public void parseInfo(Page page,News news){
    //解析页面中的内容
    Html html = page.getHtml();
    String content = page.getHtml().xpath("//div[@class='article-content']").toString();
    String time = html.css("article > .article-header >.clearfix > .article-from > span", "text").get();
    String name = html.css("article > .article-header >.clearfix > .article-from > .info-detail", "text").get();
    String title = html.css("article > .article-header > h1", "text").get();
    news.setAuthor(name);
    news.setTitle(title);
    news.setContent(content);
    news.setPublishTime(time);
    //把结果传递给pipeline
    page.putField("news",news);
    page.putField("mapList",mapList);

}

@Override
public Site getSite() {
    return site;
}


public void crawling(){
    Spider.create(new NewsProcessor())
            //自定义的pipeline
            .addPipeline(new NewsPipeline())
            //从"https://github.com/code4craft"开始抓
            .addUrl("http://www.echinagov.com/news/")
            //.addUrl("http://www.echinagov.com/node/117_2/")
            //开启1个线程抓取,防止高并发情况
            .thread(1)
            //启动爬虫
            .run();
}

public static void main(String[] args) {

    Spider.create(new NewsProcessor())
            //自定义的pipeline
            .addPipeline(new NewsPipeline())
            //从"https://github.com/code4craft"开始抓
            //.addUrl("http://www.echinagov.com/news/")
            .addUrl("http://www.echinagov.com/node/117_3/")
            //开启5个线程抓取
            .thread(5)
            //启动爬虫
            .run();
}

}
想换一个页面布局不一样的网站爬虫,应该改哪些地方的哪些方面呢?addUrl已会改,UserAgent已改,其他的地方应该改哪里呢?

  • 写回答

1条回答 默认 最新

  • honestman_ 2022-09-21 13:11
    关注

    headers和cookies都要改,

    评论

报告相同问题?

问题事件

  • 创建了问题 9月21日

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)