Maison > Questions et réponses > le corps du texte
比如一个网站有下一页,我要怎么能把所有下一页爬完呢,用递归吗,递归深度不会有限制吗,初学,希望得到指点
大家讲道理2017-04-18 10:21:45
Récursion, file d'attente de messages, stockage des pages explorées (redis, base de données)
巴扎黑2017-04-18 10:21:45
Si toutes les données auxquelles vous faites référence sont toutes des données sous un petit nom de domaine et que vous ne souhaitez pas étudier les principes en détail, alors apprenez Scrapy.
Si toutes les données auxquelles vous faites référence correspondent à l'intégralité des données du réseau et que vous souhaitez comprendre si l'exploration s'effectue d'abord en largeur ou en profondeur, etc., alors vous devez d'abord disposer de plus de 10 000 serveurs.
怪我咯2017-04-18 10:21:45
S'il s'agit du même site Web, utilisez la récursion pour l'explorer. Pourquoi le même site Web ne peut-il pas être exploré jusqu'à la fin ?
巴扎黑2017-04-18 10:21:45
Si la structure du site Web est simple et répétitive, vous pouvez d'abord analyser le modèle des URL des numéros de page, puis obtenir le nombre total de pages directement à partir de la première page, puis construire manuellement les URL des autres pages.
PHP中文网2017-04-18 10:21:45
Tout d'abord, parlons brièvement de l'idée du crawling. Si le lien de la page est très simple, comme www.xxx.com/post/1.html, vous pouvez écrire une récursivité ou une boucle pour crawler
Si le lien de la page est inconnu, vous pouvez demander à la page analysée d'analyser le lien de la balise, puis continuer l'exploration. Dans ce processus, vous devez enregistrer les liens explorés lors de l'exploration de nouveaux liens. Vérifiez si cela a été le cas. analysé avant, puis analysé de manière récursive
Idées d'exploration : Explorer l'URL -> Analyser la nouvelle URL dans le contenu analysé -> Explorer l'URL ->....-> de récursion lors de la création d'un nouveau lien
Enfin, il existe un framework de robot d'exploration très puissant dans le monde python. Il encapsule essentiellement toutes les routines de robot d'exploration courantes. Vous pouvez maîtriser le portail avec un peu d'apprentissage
.阿神2017-04-18 10:21:45
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);
}
}
}
}
}
Code simple pour enregistrer toutes les photos du site Web de la liste noire de crédit de Chine sur le site local Le site Web lui-même est simple ! Mais le site s'est écrasé sur place et j'étais ivre !