Estoy trabajando en Scrapy para rastrear páginas, sin embargo, no puedo manejar las páginas con javascript. La gente me sugiere que use htmlunit, así que lo tengo instalado, pero no sé cómo usarlo. ¿Alguien puede dar un ejemplo (scrapy + htmlunit) para mí? Muchas gracias.Cómo combinar scrapy y htmlunit para rastrear URL con javascript
Respuesta
Para manejar las páginas con javascript puede usar Webkit o Selenium.
Aquí algunos fragmentos de snippets.scrapy.org:
Muchas gracias, pueden ser útiles para mí. – HjySix
Aquí es un ejemplo de trabajo utilizando el selenio y PhantomJS WebDriver sin cabeza en un middleware descarga manejador.
class JsDownload(object):
@check_spider_middleware
def process_request(self, request, spider):
driver = webdriver.PhantomJS(executable_path='D:\phantomjs.exe')
driver.get(request.url)
return HtmlResponse(request.url, encoding='utf-8', body=driver.page_source.encode('utf-8'))
Quería capacidad para contar diferentes arañas, que el middleware de usar por lo que he implementado este contenedor:
def check_spider_middleware(method):
@functools.wraps(method)
def wrapper(self, request, spider):
msg = '%%s %s middleware step' % (self.__class__.__name__,)
if self.__class__ in spider.middleware:
spider.log(msg % 'executing', level=log.DEBUG)
return method(self, request, spider)
else:
spider.log(msg % 'skipping', level=log.DEBUG)
return None
return wrapper
settings.py:
DOWNLOADER_MIDDLEWARES = {'MyProj.middleware.MiddleWareModule.MiddleWareClass': 500}
de envoltura para trabajar todas las arañas deben tener como mínimo:
middleware = set([])
para incluir un middleware:
middleware = set([MyProj.middleware.ModuleName.ClassName])
La principal ventaja de la implementación de esta manera en lugar de en la araña es que sólo termina haciendo una petición. En la solución en el segundo enlace de reclosedev, por ejemplo: el controlador de descargas procesa la solicitud y luego entrega la respuesta a la araña. La araña luego realiza una nueva solicitud en su función parse_page: son dos solicitudes para el mismo contenido.
Otro ejemplo: https://github.com/scrapinghub/scrapyjs
Salud!
- 1. Cómo dar URL a scrapy para rastrear?
- 2. HTMLUnit no espera para Javascript
- 3. rastrear página web dinámica usando htmlunit
- 4. Guardar imagen de url con HTMLUnit
- 5. Combinando url base con href resultante en scrapy
- 6. ¿Puede HtmlUnit manejar los redireccionamientos de JavaScript?
- 7. rastreo recursivo con Python y Scrapy
- 8. Accediendo a html generado por Javascript con htmlunit -Java
- 9. Rieles: Ayudante de URL para combinar parámetros de URL?
- 10. Sitio imposible para HtmlUnit?
- 11. ¿Cómo combinar geolocalización y marcadores múltiples usando javascript?
- 12. usando tor con scrapy framework
- 13. Scrapy ¿leyó la lista de URL del archivo para raspar?
- 14. Javascript - Para combinar o no combinar, esa es la pregunta
- 15. HttpUnit/HtmlUnit equivalente para Android
- 16. URL de Scrapy Crawl en orden
- 17. Java: cómo configurar htmlunit
- 18. url window.open Javascript con espacios y
- 19. ¿Cómo publicar la solicitud HEAD con HtmlUnit?
- 20. HtmlUnit para ver la fuente
- 21. Cómo rastrear eventos Javascript (Stack Trace)?
- 22. Descarga de imágenes con scrapy
- 23. Cómo combinar static_assert con sizeof y stringify?
- 24. Cómo codificar períodos para URL en Javascript?
- 25. Código de estado de Scrapy y de respuesta: ¿cómo verificarlo?
- 26. ¿Cómo ignorar HTMLUnit advertencias/errores relacionados con jQuery?
- 27. JavaScript bookmarklet y codificación URL
- 28. Detección de URL con JavaScript
- 29. URL relativas para archivos Javascript
- 30. HtmlUnit y galletas manipulación ("ADVERTENCIA: Galleta rechazada")
Scrapy está basado en Python, hasta que Htmlunit se basa en Java. Scrapy puede manejar Javascript trabajando con splash, consulte https://blog.scrapinghub.com/2015/03/02/handling-javascript-in-scrapy-with-splash/ – siomes