此次爬虫,遇到了一个新的问题.
就是再爬取新闻链接的时候,出现了外部链接,比如会出现微信文章,央视网这类的外部链接.
所以,这次就记录一下,这些外部链接的处理方法.
在爬虫心得(四)里面已经解释了RequestDetail和ProcessArticle两个函数的意义
所以,ProcessArticle函数的第一个参数即为html源码,外部链接的html源码也会记录在此.
所以,只需对第一个参数进行getformattext即可.
查看处理结果,一般的外部链接就可以解决.
有的外部链接,通过普通处理仍然不能得到很好的处理.
比如,处理结果会多一些多余无关的东西(举例,网页的导航栏也会采集进去)
这时候,我们就需要特殊处理.
首先列出所爬取APP的网页链接的一般形式,即内部链接的正则表达式.
然后,列出需要特殊处理的外部链接的正则表达式.
然后,使用getElementAgainstXpath函数进行文本定位
public List getElementAgainstXpath(String strDoc, String strXpath) {
AppParser appParser = HTMLParser.instance();
return appParser.parser(strDoc, strXpath);
}
注意,再说一次,xpath尽量不要出现数字.
举例:
if(url.matches(regmcctv)) {
List 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 imgurls1 = new ArrayList<>();
imgurls1 = getElementListTextAgainstXPath(cret, xpath);
article.setImageUrls(imgurls1);
article.setText(cret);
}
这里还要注意List
输出的文本是倒着的
所以遍历的时候需要
int x=contents.size()-1;
while(x>0) {
temp = contents.get(x);
cret = temp + cret ;
x=x-1;
}
另外就是 java操作字符串的基本操作.
处理完后,如果遇到img标签没有处理好的话,看爬虫心得(四)!