一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java爬蟲抓取視頻網站下載鏈接

Java爬蟲抓取視頻網站下載鏈接

2020-06-24 11:40pangfc JAVA教程

本文是通過JAVA獲取優酷、土豆、酷6、6間房等視頻,小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本篇文章抓取目標網站的鏈接的基礎上,進一步提高難度,抓取目標頁面上我們所需要的內容并保存在數據庫中。這里的測試案例選用了一個我常用的電影下載網站(http://www.80s.la/)。本來是想抓取網站上的所有電影的下載鏈接,后來感覺需要的時間太長,因此改成了抓取2015年電影的下載鏈接。

一 原理簡介

其實原理都跟第一篇文章差不多,不同的是鑒于這個網站的分類列表實在太多,如果不對這些標簽加以取舍的話,需要花費的時間難以想象。

Java爬蟲抓取視頻網站下載鏈接

分類鏈接和標簽鏈接都不要,不通過這些鏈接去爬取其他頁面,只通過頁底的所有類型電影的分頁去獲取其他頁面的電影列表即可。同時,對于電影詳情頁面,僅僅只是抓取其中的電影標題和迅雷下載鏈接,并不進行深層次的爬行,詳情頁面的一些推薦電影等鏈接通通不要。

Java爬蟲抓取視頻網站下載鏈接

最后就是將所有獲取到的電影的下載鏈接保存在videoLinkMap這個集合中,通過遍歷這個集合將數據保存到MySQL里

二 代碼實現

實現原理已經在上面說了,并且代碼中有詳細注釋,因此這里就不多說了,代碼如下:

?
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
package action;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class VideoLinkGrab {
 
  public static void main(String[] args) {
    VideoLinkGrab videoLinkGrab = new VideoLinkGrab();
    videoLinkGrab.saveData("http://www.80s.la/movie/list/-2015----p");
  }
 
  /**
   * 將獲取到的數據保存在數據庫中
   *
   * @param baseUrl
   *      爬蟲起點
   * @return null
   * */
  public void saveData(String baseUrl) {
    Map<String, Boolean> oldMap = new LinkedHashMap<String, Boolean>(); // 存儲鏈接-是否被遍歷
 
    Map<String, String> videoLinkMap = new LinkedHashMap<String, String>(); // 視頻下載鏈接
    String oldLinkHost = ""; // host
 
    Pattern p = Pattern.compile("(https?://)?[^/\\s]*"); // 比如:http://www.zifangsky.cn
    Matcher m = p.matcher(baseUrl);
    if (m.find()) {
      oldLinkHost = m.group();
    }
 
    oldMap.put(baseUrl, false);
    videoLinkMap = crawlLinks(oldLinkHost, oldMap);
    // 遍歷,然后將數據保存在數據庫中
    try {
      Connection connection = JDBCDemo.getConnection();
      for (Map.Entry<String, String> mapping : videoLinkMap.entrySet()) {
        PreparedStatement pStatement = connection
            .prepareStatement("insert into movie(MovieName,MovieLink) values(?,?)");
        pStatement.setString(1, mapping.getKey());
        pStatement.setString(2, mapping.getValue());
        pStatement.executeUpdate();
        pStatement.close();
//       System.out.println(mapping.getKey() + " : " + mapping.getValue());
      }
      connection.close();
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }
 
  /**
   * 抓取一個網站所有可以抓取的網頁鏈接,在思路上使用了廣度優先算法 對未遍歷過的新鏈接不斷發起GET請求, 一直到遍歷完整個集合都沒能發現新的鏈接
   * 則表示不能發現新的鏈接了,任務結束
   *
   * 對一個鏈接發起請求時,對該網頁用正則查找我們所需要的視頻鏈接,找到后存入集合videoLinkMap
   *
   * @param oldLinkHost
   *      域名,如:http://www.zifangsky.cn
   * @param oldMap
   *      待遍歷的鏈接集合
   *
   * @return 返回所有抓取到的視頻下載鏈接集合
   * */
  private Map<String, String> crawlLinks(String oldLinkHost,
      Map<String, Boolean> oldMap) {
    Map<String, Boolean> newMap = new LinkedHashMap<String, Boolean>(); // 每次循環獲取到的新鏈接
    Map<String, String> videoLinkMap = new LinkedHashMap<String, String>(); // 視頻下載鏈接
    String oldLink = "";
 
    for (Map.Entry<String, Boolean> mapping : oldMap.entrySet()) {
      // System.out.println("link:" + mapping.getKey() + "--------check:"
      // + mapping.getValue());
      // 如果沒有被遍歷過
      if (!mapping.getValue()) {
        oldLink = mapping.getKey();
        // 發起GET請求
        try {
          URL url = new URL(oldLink);
          HttpURLConnection connection = (HttpURLConnection) url
              .openConnection();
          connection.setRequestMethod("GET");
          connection.setConnectTimeout(2500);
          connection.setReadTimeout(2500);
 
          if (connection.getResponseCode() == 200) {
            InputStream inputStream = connection.getInputStream();
            BufferedReader reader = new BufferedReader(
                new InputStreamReader(inputStream, "UTF-8"));
            String line = "";
            Pattern pattern = null;
            Matcher matcher = null;
            //電影詳情頁面,取出其中的視頻下載鏈接,不繼續深入抓取其他頁面
            if(isMoviePage(oldLink)){
              boolean checkTitle = false;
              String id="codetool">

注:如果想要實現抓取其他網站的一些指定內容的話,需要將其中的一些正則表達式根據實際情況進行合理修改

三 測試效果

Java爬蟲抓取視頻網站下載鏈接

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色色色色色色网 | se在线播放| 四虎成人影院网址 | 我的美女奴隶 | 91精品国产91久久久久 | 免费午夜影片在线观看影院 | 亚洲无线一二三四区 | 99久久精品国语对白 | 成人资源影音先锋久久资源网 | 成人精品亚洲 | 96av视频在线观看 | 精品播放| 国产日韩欧美在线观看不卡 | 国产私拍精品88福利视频 | 亚洲免费色 | 色婷婷综合缴情综六月 | 日韩欧美综合在线二区三区 | 亚洲欧美在线观看首页 | 范冰冰a级一级特级毛片 | 韩国成人毛片aaa黄 含羞草国产亚洲精品岁国产精品 | 欧美一级视频在线高清观看 | 日韩国产成人 | 国产精品香蕉在线观看不卡 | 91庥豆果冻天美精东蜜桃传媒 | 四虎传媒 | 99久久国产综合精品麻豆 | 99 久久99久久精品免观看 | 国产一级视频在线观看 | 99久久综合九九亚洲 | 美女被视频网站 | fc2免费人成为视频 eeuss18影院www国产 | 欧美日韩高清观看一区二区 | a级亚洲片精品久久久久久久 | 国产精品成人免费观看 | 国内外成人在线视频 | 日本免费v片一二三区 | 3p文两男一女办公室高h | 久久无码AV亚洲精品色午夜麻豆 | 精品无人区麻豆乱码1区2 | 婷婷国产在线 | 女女同性做爰xxoo亲吻 |
<blockquote id="11661"><option id="11661"><em id="11661"></em></option></blockquote>

<abbr id="11661"><pre id="11661"></pre></abbr>
    <output id="11661"></output>
    <abbr id="11661"></abbr>
      <label id="11661"><dl id="11661"></dl></label>