Python 如何在Scrapy上递归获取类别及其内容

Python 如何在Scrapy上递归获取类别及其内容,python,web-scraping,scrapy,Python,Web Scraping,Scrapy,当我运行我的抓取代码来抓取这个网站时。我在我的csv文件中的一列上获取我的信息(ilan_bilgileri)。我想在不同的列上递归获取信息类别及其内容(每个广告有不同的类别和不同的位置)。最好的方法是什么?我对scrapy和python是新手,希望有人能给我指出正确的方向。我不允许在帖子上放图片,所以这里是csv结果的链接。这是我的蜘蛛代码: class HurriyetEmlak(scrapy.Spider): name = 'hurriyetspider' start_ur

当我运行我的抓取代码来抓取这个网站时。我在我的csv文件中的一列上获取我的信息(ilan_bilgileri)。我想在不同的列上递归获取信息类别及其内容(每个广告有不同的类别和不同的位置)。最好的方法是什么?我对scrapy和python是新手,希望有人能给我指出正确的方向。我不允许在帖子上放图片,所以这里是csv结果的链接。这是我的蜘蛛代码:

class HurriyetEmlak(scrapy.Spider):
    name = 'hurriyetspider'
    start_urls = ['https://www.hurriyetemlak.com/istanbul-adalar-maden-satilik/daire/82579-379']



    custom_settings={ 'FEED_URI': "hurriyet_son.csv",
                       'FEED_FORMAT': 'csv'}

    def parse(self, response):
        il = response.xpath('//*[contains(concat( " ", @class, " " ), concat( " ", "short-info-list", " " ))]//li[(((count(preceding-sibling::*) + 1) = 1) and parent::*)]/text()').extract()
        ilce = response.xpath('//*[contains(concat( " ", @class, " " ), concat( " ", "short-info-list", " " ))]//li[(((count(preceding-sibling::*) + 1) = 2) and parent::*)]/text()').extract()
        mahalle = response.xpath('//*[contains(concat( " ", @class, " " ), concat( " ", "short-info-list", " " ))]//li[(((count(preceding-sibling::*) + 1) = 3) and parent::*)]/text()').extract()
        fiyat = response.xpath('//*[contains(concat( " ", @class, " " ), concat( " ", "price", " " ))]/text()').extract()
        baslik = response.css('.txt::text').extract()
        deger = response.css('.adv-info-list div span , .txt+ span::text').extract()

        scraped_info = {
            'İl': il,
            'İlçe' : ilce,
            'Mahalle' : mahalle,
            'Fiyat' : fiyat,
            'İlan Bilgileri - Başlık': baslik,
            'İlan Bilgileri - Değer' : deger
        }
        yield scraped_info  ```





  

我猜您是在尝试将所有列信息写入一列,而不是一行。如果您将使用默认的CSV进行爬网,如

scrapy crawl Hurriyet -o hurriyet_son.csv
它将像您那样将所有信息写入一行。我认为CSV库将帮助您。你可以用它来做,就像它是一个标题一样,而不满足于下面的代码

import csv


news_titles=[]  
for new in scraped_info:
    news_titles.append(new.text)

    print (news_titles)
with open('hurriyet_son.csv', 'yeni') as f:
    writer csv.writer(f)
    writer.writerow(news_titles)
    f.close()

让我知道你的最新信息。

事实上,我不想把所有信息都写在一行中。我试图在列上获取信息类别,并在列下获取相关信息。但有些广告的类别不同于其他广告。这就是为什么我认为我应该递归地这样做