2011-12-06 1 views
2

J'ai une liste d'URL que je voudrais gratter - 3000 d'entre eux. Je voudrais aller à trois niveaux de profondeur sur chaque URL, MAIS je ne veux pas aller à l'URL externe - seulement des liens dans les domaines de ma liste de départ.Autoriser uniquement les liens internes dans scrapy

Je comprends que si je voulais faire cela avec juste quelques URL je peuplerais simplement la liste allowed_domains.

Cependant quand vous arrivez à 3000 urls, la liste allowed_domains est trop grand pour Scrapy à manipuler (il le transforme en un grand RegEx pour autant que je peux dire) il se casse ...

Toutes les idées?

Quelque chose dans la liste 'rules' serait bon. rules = (Rule(SgmlLinkExtractor(allow = (<local_links_only??>)) ,callback = 'parse_item'),)

Ou quelque chose dans le middleware hors site - de toute façon pour obtenir le lien de référence?

ou en lotant le travail? obtenir 50 URL à la fois? Y at-il des crochets pour permettre quelque chose comme ceci - je peux voir start_requests - mais aucun rappel pour quelque chose comme finish_requests que je peux utiliser pour remplir la liste start_urls à nouveau?

Guy

+0

Vous voulez dire que ces 3000 URL proviennent de différents sites Web? Si oui, je pense que vous feriez mieux d'avoir une araignée séparée pour chacun d'entre eux. – warvariuc

Répondre