redis - 爬虫如何保存已经访问过的url
大家讲道理
大家讲道理 2017-04-21 10:57:04
0
6
809

话说同志们在爬取数据的时候如何保存已经访问过的url和队列?对于爬取过的url,我使用redis的set来保存,访问队列是用list来保存,数据量是直线上升,内存不大,也只有4g,扛不住。不知道以前的方法是什么?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(6)
左手右手慢动作

J'utilise MySQL pour faire la queue et déterminer s'il faut accéder. Étant donné que les caractéristiques de persistance de Redis ne sont pas très bonnes et que je n'ai pas pensé à utiliser Redis ou quoi que ce soit d'autre à l'époque, il n'y a aucun problème à utiliser MySQL pour. le moment étant.
La méthode spécifique consiste à indexer de manière unique la valeur md5 de l'URL. Chaque requête est rapide et la structure de la table est simple.
La file d'attente utilise la forme d'une recherche de table et le SQL est le suivant (le statut spécifique représente un statut auto-défini) :
sélectionnez * dans t_down_task où statut = 0 commande par limite d'identifiant 1 ;
Supprimez régulièrement les tâches terminées

刘奇

http://en.wikipedia.org/wiki/Bloom_fi...

La mémoire 4G peut ouvrir un très grand BloomFilter. Chaque URL ne nécessite que quelques bits, quelle que soit la longueur de l'URL. BloomFilter a un certain taux d'erreur (par exemple un millième ou un pour cent, selon la configuration), ce qui entraînera l'omission de certaines pages Web, mais ne sera pas explorée à plusieurs reprises.

Si la mémoire 4G n'est pas suffisante pour ouvrir BloomFilter, l'auteur doit réfléchir à la manière de sauvegarder les pages Web explorées.

左手右手慢动作

Lorsque la quantité de données n'est pas très importante, le stockage de hachage md5 dans le stockage KV est relativement fiable. Si la quantité d'index est importante, elle peut ne pas être suffisante, c'est pourquoi certains algorithmes spéciaux avec compression d'espace doivent être utilisés, tels que. Le filtre bloom mentionné ci-dessus

Certaines personnes ont également implémenté cet algorithme de stockage grâce au protocole Memcache, http://code.google.com/p/mc-bloom-fil...

巴扎黑

Certaines bases de données k/v persistantes peuvent être envisagées, et je recommande d'utiliser leveldb.

左手右手慢动作

N'utilisez pas Redis pour ce faire, utilisez simplement le système de fichiers directement

L'URL collectée est convertie en chaîne hexadécimale via MD5, puis tous les 4 caractères sont utilisés comme répertoire, et les 4 derniers caractères sont utilisés comme nom de fichier. Le contenu du fichier peut être vide

.

Pour déterminer si l'URL a été collectée, MD5 directement l'URL actuelle, générez le chemin du fichier selon les règles ci-dessus et déterminez directement si le chemin du fichier existe.

巴扎黑

Top bloomfilter. Il peut être utilisé comme ceci : utilisez leveldb pour stocker les URL, puis utilisez bloomfilter pour bloquer la plupart des URL qui ne sont pas dans la bibliothèque lors de l'interrogation. Cela devrait être presque la même chose.
Combien d’URL lz doit-il explorer ? S'il y a beaucoup d'URL, par exemple des centaines de millions, et si vous disposez de Hadoop, vous pouvez également utiliser Hadoop pour dédupliquer les nouvelles URL et les anciennes URL. MapReduce est très rapide

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!