1
import scrapy
from scrapy.http import Request

class PushpaSpider(scrapy.Spider):
    name = 'test'
    start_urls = ['https://adv-tver.ru/lawyer/Pokrovskij184']
    
  
    def parse(self, response):
        rows = response.xpath("//table[@class='table']")[1:]
        for row in rows:
            a=row.xpath("//tr[1]//td[2]//text()").get()
            b=row.xpath("//tr[2]//td[2]//text()").get()
            c=row.xpath("//tr[3]//td[2]//text()").get()
            d=row.xpath("//tr[4]//td[2]//text()").get()
            e=row.xpath("//tr[5]//td[2]//text()").get()
            f=row.xpath("//tr[6]//td[2]//text()").get()
            g=row.xpath("//tr[7]//td[2]//text()").get()
            yield{
                'Ф.И.О.:':a,
                }

WHen I run the code in terminal they will give me correct output:

'Ф.И.О.:': 'Покровский\xa0Василий\xa0Васильевич'

When I MAKE CSV FILE THEY GIVE Me wrong output as show below:

Ф.И.О.:ПокровÑкий ВаÑилий ВаÑильевич
Amen Aziz
  • 769
  • 2
  • 13

1 Answers1

0
  • You are using absolute xpath expressions in your for loop when they should be relative expressions.

  • Also you need to set your FEED_EXPORT_ENCODING setting to 'utf-8'.

For example:

import scrapy
from scrapy.http import Request

class PushpaSpider(scrapy.Spider):
    name = 'test'
    start_urls = ['https://adv-tver.ru/lawyer/Pokrovskij184']
    custom_settings = {"FEED_EXPORT_ENCODING": 'utf-8'}
    
  
    def parse(self, response):
        rows = response.xpath("//table[@class='table']")[1:]
        for row in rows:
            a=row.xpath("./tr[1]//td[2]//text()").get()
            b=row.xpath("./tr[2]//td[2]//text()").get()
            c=row.xpath("./tr[3]//td[2]//text()").get()
            d=row.xpath("./tr[4]//td[2]//text()").get()
            e=row.xpath("./tr[5]//td[2]//text()").get()
            f=row.xpath("./tr[6]//td[2]//text()").get()
            g=row.xpath("./tr[7]//td[2]//text()").get()
            yield ...
Alexander
  • 16,091
  • 5
  • 13
  • 29