rainyzz's blog

消除失效链接

之前项目中涉及到一个爬虫来爬取数据,爬取的网页中存在两种失效网页的情况,一种是网页中的信息已经过期,对应网站已经将对应的网页删去,另一种情况是爬取的网页页面中包含错误的链接,这些链接由于地址的错误或者本身是相对链接而无法访问。

我编写了一个程序来处理这两种情况,第一种情况下读取数据库中已经爬取信息对应的链接,重新访问链接,如果重新访问的页面中包含不存在的信息(针对每个网站都有对应的信息规则,比如说有的页面可能会包含「您访问的链接不存在」,有的页面可能是包含“page not found”),就判定该网页作废,将数据库中的deleted字段标成1,以示删除。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import org.jsoup.nodes.Document;
import org.jsoup.Jsoup;
String missing_text = "page not found";
String text = null;
Document doc = null;
doc = Jsoup.connect(url).timeout(20000).ignoreHttpErrors(true).post();
text = doc.text();
if (text.contains(missing_text)){
// Do something
}
```
针对第二种情况,读取数据库中每个页面信息,提取出页面中的所有链接,如果链接是无法访问的相对地址或者访问后返回的状态码不是200(OK),就标为失效链接,可以将其替换为空或者直接指向对应网站的首页。为了获取状态码,将Jsoup中直接获取网页信息的post方法改成execute方法,就能够获取对应的状态码。
```java
import org.jsoup.Connection.Response;
Response response = Jsoup.connect(url).timeout(20000).execute();
int statusCode = response.statusCode();
if(statusCode == 200) {
System.out.println("Link OK");
}else{
System.out.println("received error code : " + statusCode);
}