比如一个网站有下一页,我要怎么能把所有下一页爬完呢,用递归吗,递归深度不会有限制吗,初学,希望得到指点
ringa_lee
遞歸,訊息佇列,儲存已經爬取的頁面(redis, 資料庫)
如果你指的所有數據是一個小域名下的所有數據,並且你並不想細究原理,那就去學scrapy。
如果你指的所有數據是全網數據,並且想搞清楚爬取時是廣度優先還是深度優先等等原理,那首先你得有10000+伺服器。
如果是同一個網站,用遞歸爬去呀,同一個網站怎麼會爬不完
如果網站的結構是簡單重複的,可以先分析頁碼url的規律,然後直接從第一頁拿到總頁數,然後手動構造出其他頁的url。
首先大致說下爬取的思路,如果頁面鏈接很簡單,類似 www.xxx.com/post/1.html這種有規律可循的頁面,可以寫遞歸或者循環去爬取
如果頁面連結是未知的,可以獲取爬取的頁面去解析標籤的連結,然後繼續爬取,在這一過程中,你需要將已經爬取過的連結存下來,爬新連結的時候去尋找一下是否之前爬取過,然後也是透過遞歸去爬取
爬取思路透過url爬取->解析爬取內容中新的url->透過url爬取->....->當爬取到一定數量或很長一段時間沒有新連結的時候跳出遞歸
最後在python界有一個很厲害的爬蟲框架scrapy,基本上把爬蟲常用套路全部都封裝好了,稍微學習下就會了傳送門
import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import org.apache.commons.io.FileUtils; public class SpiderDemo { public static void main(String[] args) throws IOException { // URL url = new URL("http://www.zhongguoxinyongheimingdan.com"); // URLConnection connection = url.openConnection(); // InputStream in = connection.getInputStream(); // File file = new File("F://a.txt"); // FileUtils.copyInputStreamToFile(in, file); File srcDir = new File("F://a.txt"); String str = FileUtils.readFileToString(srcDir, "UTF-8"); String[] str1 = str.split("href="); for (int i = 3; i < str1.length-1; i++) { URL url = new URL("http://www.zhongguoxinyongheimingdan.com"+str1[i].substring(1, 27)); File f = new File("F://abc//"+str1[i].substring(2, 22)); if(!f.exists()){ f.mkdir(); File desc1 = new File(f,str1[i].substring(1, 22)+".txt"); URLConnection connection = url.openConnection(); InputStream in = connection.getInputStream(); FileUtils.copyInputStreamToFile(in, desc1); String str2 = FileUtils.readFileToString(desc1, "UTF-8"); String[] str3 = str2.split("\" src=\""); for(int j = 1;j<str3.length-2;j++){ URL url1 = new URL(str3[j].substring(0, 81)); URLConnection connection1 = url1.openConnection(); connection1.setDoInput(true); InputStream in1 = connection1.getInputStream(); File desc2 = new File(f,str3[j].substring(44,76)+".jpg"); FileUtils.copyInputStreamToFile(in1, desc2); } } } } }
簡單的程式碼 把中國信用黑名單網站的所有照片保存到 本地 網站本身簡單!不過當場這個網站奔潰了 也是醉了!
遞歸,訊息佇列,儲存已經爬取的頁面(redis, 資料庫)
如果你指的所有數據是一個小域名下的所有數據,並且你並不想細究原理,那就去學scrapy。
如果你指的所有數據是全網數據,並且想搞清楚爬取時是廣度優先還是深度優先等等原理,那首先你得有10000+伺服器。
如果是同一個網站,用遞歸爬去呀,同一個網站怎麼會爬不完
如果網站的結構是簡單重複的,可以先分析頁碼url的規律,然後直接從第一頁拿到總頁數,然後手動構造出其他頁的url。
首先大致說下爬取的思路,如果頁面鏈接很簡單,類似 www.xxx.com/post/1.html這種有規律可循的頁面,可以寫遞歸或者循環去爬取
如果頁面連結是未知的,可以獲取爬取的頁面去解析標籤的連結,然後繼續爬取,在這一過程中,你需要將已經爬取過的連結存下來,爬新連結的時候去尋找一下是否之前爬取過,然後也是透過遞歸去爬取
爬取思路透過url爬取->解析爬取內容中新的url->透過url爬取->....->當爬取到一定數量或很長一段時間沒有新連結的時候跳出遞歸
最後在python界有一個很厲害的爬蟲框架scrapy,基本上把爬蟲常用套路全部都封裝好了,稍微學習下就會了傳送門
簡單的程式碼 把中國信用黑名單網站的所有照片保存到 本地 網站本身簡單!不過當場這個網站奔潰了 也是醉了!