爬虫心得(五)

这篇博客主要介绍了在爬虫过程中如何处理外部链接的问题。针对普通链接,可以通过getformattext方法进行处理。对于特殊链接,需要制定内部链接和外部链接的正则表达式,使用getElementAgainstXpath进行文本定位,并结合Java字符串操作进行清洗。文中还提醒了xpath避免使用数字以及处理img标签的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此次爬虫,遇到了一个新的问题.

就是再爬取新闻链接的时候,出现了外部链接,比如会出现微信文章,央视网这类的外部链接.

所以,这次就记录一下,这些外部链接的处理方法.

1.普通处理

在爬虫心得(四)里面已经解释了RequestDetail和ProcessArticle两个函数的意义

所以,ProcessArticle函数的第一个参数即为html源码,外部链接的html源码也会记录在此.

所以,只需对第一个参数进行getformattext即可.

查看处理结果,一般的外部链接就可以解决.

2.特殊处理

有的外部链接,通过普通处理仍然不能得到很好的处理.

比如,处理结果会多一些多余无关的东西(举例,网页的导航栏也会采集进去)

这时候,我们就需要特殊处理.

首先列出所爬取APP的网页链接的一般形式,即内部链接的正则表达式.

然后,列出需要特殊处理的外部链接的正则表达式.

然后,使用getElementAgainstXpath函数进行文本定位

  public List<String> getElementAgainstXpath(String strDoc, String strXpath) {
        AppParser appParser = HTMLParser.instance();
        return appParser.parser(strDoc, strXpath);
    }

注意,再说一次,xpath尽量不要出现数字.

举例:

      if(url.matches(regmcctv)) {
                   List<String> contents = getElementAgainstXpath(s, "//body/div/div/div/p");
                   if (!contents.isEmpty()){
                       int x=contents.size()-1;
                       String temp;
                      while(x>0) {
                          temp = contents.get(x);
                          cret = temp + cret ;
                          x=x-1;
                      }
                   }
                   cret = HtmlUtils.getTagFormattedText(cret, url);
                   cret = removeTagOtherAttr(regImg, cret, tagName);
                   cret = removeTagOtherAttr(regVideo, cret, tagName1);
                   List<String> imgurls1 = new ArrayList<>();
                   imgurls1 = getElementListTextAgainstXPath(cret, xpath);
                   article.setImageUrls(imgurls1);
                   article.setText(cret);
                }

这里还要注意List<String> contents

输出的文本是倒着的

所以遍历的时候需要

 int x=contents.size()-1;

while(x>0) {
                          temp = contents.get(x);
                          cret = temp + cret ;
                          x=x-1;
                      }

另外就是 java操作字符串的基本操作.

 

处理完后,如果遇到img标签没有处理好的话,看爬虫心得(四)!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值