es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La respuesta de Scrapy no contiene todas las tablas de la URL utilizando XPath.

Estoy teniendo problemas para extraer todos los pies de página de las tablas en una URL (“https://www.baseball-reference.com/players/a/aardsda01.shtml”) utilizando Scrapy en Python 3.7. Puedo ver la primera tabla (id=pitching_standard), pero otras tablas como batting_standard y standard_fielding no aparecen en la respuesta. A continuación se muestra el código:

class BaseballRefSpider(scrapy.Spider):
    name = "baseball"

    def start_requests(self):
        allowed_domains = ["baseball-reference.com"]
        start_urls = ["https://www.baseball-reference.com/players/a/aardsda01.shtml"]
        for url in start_urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        tables = response.selector.xpath('//table[@id="batting_standard"]/tfoot')
        for table in tables:
            with open("/path_to_directory/tables.txt", 'w') as f:
                f.write(table.get())
Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el selector XPath utilizado en el código solo apunta a la tabla con un id de “batting_standard” y su pie de página de tabla. Para obtener todos los pies de página de las tablas, el selector XPath debe ajustarse para apuntar a todas las tablas de la página y sus pies de página respectivos.

    Una posible solución consiste en utilizar el siguiente selector XPath:

    //table/tfoot
    

    Esto apunta a todos los pies de página de las tablas en el documento HTML, independientemente de su id de tabla.

    El código modificado se vería así:

    class BaseballRefSpider(scrapy.Spider):
        name = "baseball"
    
        def start_requests(self):
            allowed_domains = ["baseball-reference.com"]
            start_urls = ["https://www.baseball-reference.com/players/a/aardsda01.shtml"]
            for url in start_urls:
                yield scrapy.Request(url=url, callback=self.parse)
    
        def parse(self, response):
            tables = response.selector.xpath('//table/tfoot')
            for table in tables:
                with open("/path_to_directory/tables.txt", 'w') as f:
                    f.write(table.get())
    

    Esto debería permitirle extraer todos los pies de página de las tablas en la página.

Comments are closed.