Skip to main content

Using beautiful soup and scrapy error give me that error refer before assignment

I am trying to scrape data but they give me error UnboundLocalError: local variable 'd3' referenced before assignment how I can solve these error any solution please suggest me I search many solution but I cannot find any solution that help me if you have any solution then suggest me these is page link https://rejestradwokatow.pl/adwokat/abaewicz-agnieszka-51004

import scrapy
from scrapy.http import Request
from scrapy.crawler import CrawlerProcess
from bs4 import BeautifulSoup

class TestSpider(scrapy.Spider):
    name = 'test'
    start_urls = ['https://rejestradwokatow.pl/adwokat/list/strona/1/sta/2,3,9']
    custom_settings = {
        'CONCURRENT_REQUESTS_PER_DOMAIN': 1,
        'DOWNLOAD_DELAY': 1,
        'USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
        }


    def parse(self, response):
        soup=BeautifulSoup(response.text, 'html.parser')
        tra = soup.find_all('td', class_='icon_link')
        for links in tra:
            for link in links.find_all('a', href=True):
                comp = link['href']
                yield Request(comp, callback=self.parse_book)
     
    
    def parse_book(self, response):
        soup=BeautifulSoup(response.text, 'html.parser')
        details = soup.find_all('div', class_='line_list_K')
        for detail in details:
            try:
                status = detail.find(
                    'span', string='Status:').findNext('div').getText()
            except:
                pass

            try:
                d1 = detail.find('span', string='Data wpisu w aktualnej izbie na listę adwokatów:').findNext(
                    'div').getText()
            except:
                pass
            
            try:
                d3 = detail.find('span', string='Ostatnie miejsce wpisu:').findNext(
                    'div').getText()
            except:
                pass
            
            
            try:
                d4 = detail.find('span', string='Stary nr wpisu:').findNext(
                    'div').getText()
            except:
                pass
            
            
            try:
                d5 = detail.find('span', string='Zastępca:').findNext(
                    'div').getText()
            except:
                pass
            
            yield{
               'status':status,
               "d1":d1,
               "d3":d3,
               "d4":d4,
               "d5":d5
               }
            


source https://stackoverflow.com/questions/72808008/using-beautiful-soup-and-scrapy-error-give-me-that-error-refer-before-assignment

Comments