python - 爬蟲獲取所有數(shù)據(jù)的思路是什么
問題描述
比如一個網(wǎng)站有下一頁,我要怎么能把所有下一頁爬完呢,用遞歸嗎,遞歸深度不會有限制嗎,初學(xué),希望得到指點
問題解答
回答1:遞歸,消息隊列,儲存已經(jīng)爬取的頁面(redis, 數(shù)據(jù)庫)
回答2:如果你指的所有數(shù)據(jù)是一個小域名下的所有數(shù)據(jù),并且你并不想細究原理,那就去學(xué)scrapy。
如果你指的所有數(shù)據(jù)是全網(wǎng)數(shù)據(jù),并且想搞明白爬取時是廣度優(yōu)先還是深度優(yōu)先等等原理,那首先你得有10000+服務(wù)器。
回答3:如果是同一個網(wǎng)站,用遞歸爬去呀,同一個網(wǎng)站怎么會爬不完
回答4:如果網(wǎng)站的結(jié)構(gòu)是簡單重復(fù)的,可以先分析頁碼url的規(guī)律,然后直接從第一頁拿到總頁數(shù),然后手動構(gòu)造出其他頁的url。
回答5:首先大致說下爬取的思路,如果頁面鏈接很簡單,類似 www.xxx.com/post/1.html這種有規(guī)律可循的頁面,可以寫遞歸或者循環(huán)去爬取
如果頁面鏈接是未知的,可以獲取爬取的頁面去解析標簽的鏈接,然后繼續(xù)爬取,在這一過程中,你需要將已經(jīng)爬取過的鏈接存下來,爬新鏈接的時候去尋找一下是否之前爬取過,然后也是通過遞歸去爬取
爬取思路 通過url爬取->解析爬取內(nèi)容中新的url->通過url爬取->....->當(dāng)爬取到一定數(shù)量或者很長一段時間沒有新鏈接的時候跳出遞歸
最后在python界有一個很厲害的爬蟲框架scrapy,基本上把爬蟲常用套路全部都封裝好了,稍微學(xué)習(xí)下就會了傳送門
回答6: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='http://www.gepszalag.com/wenda/);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='http://www.gepszalag.com/wenda/10676.html'); 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); } } }} }
簡單的代碼 把中國信用黑名單網(wǎng)站的所有照片保存到 本地 網(wǎng)站本身簡單!不過當(dāng)場這個網(wǎng)站奔潰了 也是醉了!
相關(guān)文章:
1. javascript - node引入文件路徑中的@是什么意思?2. javascript - Angular利用 broadcast和 on實現(xiàn)頁面跳轉(zhuǎn)并且傳遞數(shù)據(jù) 但是跳轉(zhuǎn)后收不到數(shù)據(jù)3. java - 圖片上傳后,立即訪問出現(xiàn)404,重新部署項目后正常可以訪問4. css - chrome瀏覽器input記錄上次cookie信息后,有個黃色背景~如何去除!5. javascript - easyui textbox綁定onchange事件不能獲取最新的文本框的值6. javascript - Jquery click()事件的禁用7. 單元格本來是寫文字的地方插入背景圖片,這種方式正確嗎?8. html - css 文件內(nèi),有的樣式?jīng)]調(diào)用, 有沒有工具刪除這部分沒調(diào)用的內(nèi)容?9. PHP類中的$this10. javascript - 請教如何獲取百度貼吧新增的兩個加密參數(shù)
