Quiero usar el Python Scrapy module para raspar todas las URL de mi sitio web y escribir la lista en un archivo. Busqué en los ejemplos, pero no vi ningún ejemplo simple para hacer esto.¿Cómo uso el módulo Python Scrapy para enumerar todas las URL de mi sitio web?
Respuesta
Aquí está el programa de Python que trabajó para mí:
from scrapy.selector import HtmlXPathSelector
from scrapy.spider import BaseSpider
from scrapy.http import Request
DOMAIN = 'example.com'
URL = 'http://%s' % DOMAIN
class MySpider(BaseSpider):
name = DOMAIN
allowed_domains = [DOMAIN]
start_urls = [
URL
]
def parse(self, response):
hxs = HtmlXPathSelector(response)
for url in hxs.select('//a/@href').extract():
if not (url.startswith('http://') or url.startswith('https://')):
url= URL + url
print url
yield Request(url, callback=self.parse)
Guardar esto en un archivo llamado spider.py
.
A continuación, puede utilizar un oleoducto de Shell para publicar proceso de este texto:
bash$ scrapy runspider spider.py > urls.out
bash$ cat urls.out| grep 'example.com' |sort |uniq |grep -v '#' |grep -v 'mailto' > example.urls
Esto me da una lista de todos los URLs únicos en mi sitio.
Eso es genial. Usted tiene la respuesta. Ahora adelante y acepte la respuesta ... y, oh, sí, podría haber una insignia de "Aprendiz propia" esperando por usted. :) – Nishant
Hay un pequeño error en este programa. La línea 'if not url.startswith ('http: //'):' no manejará los enlaces https correctamente. –
@JoshuaSnider Lo actualicé. Pero este es un fragmento corto de código de muestra, por lo que no está destinado a ser autorizado para todas las situaciones. –
algo más limpio (y tal vez más útil) estaría utilizando LinkExtractor
from scrapy.linkextractors import LinkExtractor
def parse(self, response):
le = LinkExtractor() # empty for getting everything, check different options on documentation
for link in le.extract_links(response):
yield Request(link.url, callback=self.parse)
¿Esto devuelve enlaces dentro del sitio web o externos también? –
- 1. ¿Cómo enumerar todas las funciones en un módulo de Python?
- 2. Favicon para todas las páginas de mi sitio web
- 3. ¿Cómo uso las fuentes .woff para mi sitio web?
- 4. Python CMS para mi propio sitio web?
- 5. Uso de una araña de Scrapy para varios sitios web
- 6. ¿Cómo enumerar todas las etiquetas de Git?
- 7. Cómo dar URL a scrapy para rastrear?
- 8. Cómo enumerar todas las propiedades de clase
- 9. ¿Cómo uso OpenID en mi nuevo sitio web ASP.NET?
- 10. cómo proteger mi sitio web
- 11. ¿Cómo uso Wget para descargar todas las imágenes en una sola carpeta, desde una URL?
- 12. Cómo hacer el mismo diseño para todas las páginas web
- 13. python's scrapy no parece obtener datos de todas las URL disponibles
- 14. Dado un módulo en pypi, ¿hay alguna manera de introspectar el módulo y mostrar todas las dependencias?
- 15. Bloquear facebook desde mi sitio web
- 16. cómo asegurarse de que un sitio web sea adecuado para todas las resoluciones de pantalla?
- 17. CRM gratis para mi sitio web?
- 18. C#: enumerar todas las clases en el ensamblaje
- 19. mySQL ¿Query para enumerar el número de comentarios que mi sitio recibió cada día?
- 20. ¿Cómo funciona el sitio web de las extensiones gnome?
- 21. Usando el módulo de registro de Python para registrar todas las excepciones y errores
- 22. ¿Cómo enumerar todas las ventanas dentro de un proceso?
- 23. ¿Cómo puedo enumerar/enumerar todas las aplicaciones instaladas en Windows XP?
- 24. SQLite es adecuado para el uso del sitio web
- 25. Scrapy: ImportError: Copias módulo denominado
- 26. Las cargas de archivos ASP.NET detienen todas las demás solicitudes en el sitio web
- 27. ¿Cómo eliminar todas las cookies de dominio actuales en el sitio web de MVC?
- 28. Cómo usar OpenID en mi sitio web
- 29. ¿Cómo puedo enumerar todas las columnas de una tabla?
- 30. ¿Debería mi aplicación web python usar unicode para todas las cadenas?
stackoverflow no es un sitio para pedir a la gente a escribir el código para usted - * * probar algo y luego llegar preguntar algo sobre una problema específico con el que te encuentras – Amber
¿Has probado el tutorial allí? Es bastante explicativo. Si has/has probado el tutorial y todavía tienes problemas, intenta publicar algún código que hayas probado primero (+1 @Amber) – inspectorG4dget
Amber, e inspectorG4dget, escribí el programa que hace esto, pero aún no puedo publicarlo porque no tengo suficiente reputación, hay un tiempo de espera. Voy a publicar la solución mañana por la mañana. –