noam76 icon

solkey_spider.py

noam76 | PRO | 05/09/23 11:56:15 AM UTC (Edited) | 0 ⭐ | 931 👁️ | Never ⏰ | []
Python |

1.89 KB

|

None

|

0 👍

/

0 👎

import scrapy
from ..items import SolkeyItem
from openpyxl import Workbook
 
class SolkeySpider(scrapy.Spider):
    name = 'solkey'
    allowed_domains = ['www.duurzaamloket.nl']
    start_urls = ['https://www.duurzaamloket.nl/SolKey_X014/index.php?SchemeNo=0&Offset=1&SearchText=&PageCnt=448']
 
    def parse(self, response):
        wb = Workbook()
        ws = wb.active
        ws.append(['ID', 'Nom', 'Eta', 'b', 'a1', 'a2', 'a3'])
        
        rows = response.xpath('//table[@id="mytable"]/tr')[1:] # Récupération de toutes les lignes de la table
        
        for row in rows:
            item = SolkeyItem()
            
            # Récupération de l'ID et du nom de la licence
            item['id'] = row.xpath('.//td[1]/text()').get()
            item['name'] = row.xpath('.//td[2]/text()').get()
            
            # Récupération de la page de détails et extraction des données η, b, a1, a2, a3
            detail_page = row.xpath('.//td[2]/a/@href').get()
            yield response.follow(detail_page, self.parse_detail, meta={'item': item, 'ws': ws})
            
        wb.save("solkey_results.xlsx") # Sauvegarde des données dans un fichier Excel
    
    def parse_detail(self, response):
        item = response.meta['item']
        ws = response.meta['ws']
        
        item['eta'] = response.xpath('//th[text()="η0"]/following-sibling::td[1]/text()').get()
        item['b'] = response.xpath('//th[text()="b"]/following-sibling::td[1]/text()').get()
        item['a1'] = response.xpath('//th[text()="a1"]/following-sibling::td[1]/text()').get()
        item['a2'] = response.xpath('//th[text()="a2"]/following-sibling::td[1]/text()').get()
        item['a3'] = response.xpath('//th[text()="a3"]/following-sibling::td[1]/text()').get()
        
        ws.append([item['id'], item['name'], item['eta'], item['b'], item['a1'], item['a2'], item['a3']])

Comments