网页内容抓取 php(代码罗View远程服务器,没事抓取网页信息的小工具 )

优采云 发布时间: 2021-11-15 19:03

  网页内容抓取 php(代码罗View远程服务器,没事抓取网页信息的小工具

)

  无事可做,刚学会了将git部署到远程服务器上,无事可做,就简单的做了个抓取网页信息的小工具。如果将其中的一些值设置为参数,扩展性能会更好!我希望这是一个好的开始,它让我更熟练地阅读字符串。值得注意的是JAVA1.8在使用String拼接字符串时会自动询问你。拼接后的字符串由StringBulider处理,极大的优化了String的性能。废话不多说,晒出我的XXX码~

  运行结果:

  

  先打开百度百科,搜索一个词条,比如“演员”,然后按F12查看源码

  

  然后抓取你想要的标签并将其注入到 LinkedHashMap 中。这很容易,对吧?看代码

  

  

   1 import java.io.BufferedReader;

2 import java.io.IOException;

3 import java.io.InputStreamReader;

4 import java.net.HttpURLConnection;

5 import java.net.URL;

6 import java.util.*;

7

8 /**

9 * Created by chunmiao on 17-3-10.

10 */

11 public class ReadBaiduSearch {

12

13 //储存返回结果

14 private LinkedHashMap mapOfBaike;

15

16

17 //获取搜索信息

18 public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException {

19 mapOfBaike = getResult(infomationWords);

20 return mapOfBaike;

21 }

22

23 //通过网络链接获取信息

24 private static LinkedHashMap getResult(String keywords) throws IOException {

25 //搜索的url

26 String keyUrl = "http://baike.baidu.com/search?word=" + keywords;

27 //搜索词条的节点

28 String startNode = "";

29 //词条的链接关键字

30 String keyOfHref = "href=\"";

31 //词条的标题关键字

32 String keyOfTitle = "target=\"_blank\">";

33

34 String endNode = "";

35

36 boolean isNode = false;

37

38 String title;

39

40 String href;

41

42 String rLine;

43

44 LinkedHashMap keyMap = new LinkedHashMap();

45

46 //开始网络请求

47 URL url = new URL(keyUrl);

48 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

49 InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");

50 BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

51

52 //读取网页内容

53 while ((rLine = bufferedReader.readLine()) != null){

54 //判断目标节点是否出现

55 if(rLine.contains(startNode)){

56 isNode = true;

57 }

58 //若目标节点出现,则开始抓取数据

59 if (isNode){

60 //若目标结束节点出现,则结束读取,节省读取时间

61 if (rLine.contains(endNode)) {

62 //关闭读取流

63 bufferedReader.close();

64 inputStreamReader.close();

65 break;

66 }

67 //若值为空则不读取

68 if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){

69 keyMap.put(title,href);

70 }

71 }

72 }

73 return keyMap;

74 }

75

76 //获取词条对应的url

77 private static String getHref(String rLine,String keyOfHref){

78 String baikeUrl = "http://baike.baidu.com";

79 String result = "";

80 if(rLine.contains(keyOfHref)){

81 //获取url

82 for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != \'\"\');j ++){

83 result += rLine.charAt(j);

84 }

85 //获取的url中可能不含baikeUrl,如果没有则在头部添加一个

86 if(!result.contains(baikeUrl)){

87 result = baikeUrl + result;

88 }

89 }

90 return result;

91 }

92

93 //获取词条对应的名称

94 private static String getName(String rLine,String keyOfTitle){

95 String result = "";

96 //获取标题内容

97 if(rLine.contains(keyOfTitle)){

98 result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());

99 //将标题中的内容含有的标签去掉

100 result = result.replaceAll("||</a>|<a>","");

101 }

102 return result;

103 }

104

105 }

  查看代码

  现在都好晚了,去睡觉了...

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线