csvからのScrapy出力に新しい列を追加するにはどうすればよいですか?

ボディスタワ

私はウェブサイトを解析し、それはうまく機能しますが、出力するIDを持つ新しい列を追加する必要があります。その列は、次のURLでcsvに保存されます。

https://www.ceneo.pl/48523541, 1362
https://www.ceneo.pl/46374217, 2457

私のクモのコード:

import scrapy
from ceneo.items import CeneoItem
import csv

class QuotesSpider(scrapy.Spider):
    name = "quotes" 

    def start_requests(self):
        start_urls = []
        f = open('urls.csv', 'r')
        for i in f:
            u = i.split(',')
            start_urls.append(u[0])
        for url in start_urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        all_prices = response.xpath('(//td[@class="cell-price"] /a/span/span/span[@class="value"]/text())[position() <= 10]').extract()
        all_sellers = response.xpath('(//tr/td/div/ul/li/a[@class="js_product-offer-link"]/text())[position()<=10]').extract()

        f = open('urls.csv', 'r')
        id = []
        for i in f:
            u = i.split(',')
            id.append(u[1])

        x = len(all_prices)     
        i = 0

        while (i < x):
            all_sellers[i] = all_sellers[i].replace('Opinie o ', '')
            i += 1

        for urlid, price, seller in zip(id, all_prices, all_sellers):
            yield {'urlid': urlid.strip(), 'price': price.strip(), 'seller': seller.strip()}

(zip関数?)IDが交互に取得されるため、結果で間違ったデータが取得されます。

urlid,price,seller
1362,109,eMAG
1457,116,electro.pl
1362,597,apollo.pl
1457,597,allegro.pl

そしてそれは出力する必要があります:

urlid,price,seller
1362,109,eMAG
1362,116,electro.pl
1457,597,apollo.pl
1457,597,allegro.pl
簡単

を使用してリクエストにアクセスIDstart_requestsて割り当てることができmeta={'id': id_}、後でを使用してparse取得できますIDresponse.meta['id']

この方法は、あなたが正しい必要がありますIDではparse

dataファイルの代わりに文字列を使用して、実用的な例を作成します。

#!/usr/bin/env python3

import scrapy

data = '''https://www.ceneo.pl/48523541, 1362
https://www.ceneo.pl/46374217, 2457'''

class QuotesSpider(scrapy.Spider):

    name = "quotes" 

    def start_requests(self):
        #f = open('urls.csv', 'r')

        f = data.split('\n')

        for row in f:
            url, id_ = row.split(',')

            url = url.strip()
            id_ = id_.strip()

            #print(url, id_)

            # use meta to assign value 
            yield scrapy.Request(url=url, callback=self.parse, meta={'id': id_})

    def parse(self, response):
        # use meta to receive value
        id_ = response.meta["id"]

        all_prices = response.xpath('(//td[@class="cell-price"] /a/span/span/span[@class="value"]/text())[position() <= 10]').extract()
        all_sellers = response.xpath('(//tr/td/div/ul/li/a[@class="js_product-offer-link"]/text())[position()<=10]').extract()

        all_sellers = [ item.replace('Opinie o ', '') for item in all_sellers ]

        for price, seller in zip(all_prices, all_sellers):
            yield {'urlid': id_, 'price': price.strip(), 'seller': seller.strip()}

# --- it runs without project and saves in `output.csv` ---

from scrapy.crawler import CrawlerProcess

c = CrawlerProcess({
    'USER_AGENT': 'Mozilla/5.0',
    'FEED_FORMAT': 'csv',
    'FEED_URI': 'output.csv', 
})
c.crawl(QuotesSpider)
c.start()

ところで:標準機能があるid()ので、id_代わりに変数を使用しますid

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Pythonで出力ファイルに新しい列を追加するにはどうすればよいですか?

分類Dev

Python:操作から取得した値を特定のCSVの新しい列に追加するにはどうすればよいですか?

分類Dev

CSVファイルに新しい列を追加するにはどうすればよいですか?

分類Dev

既存の列からカウントを追加および合計する新しい列を追加するにはどうすればよいですか?

分類Dev

1つのCSVから別の既存のCSVに新しい行を追加するにはどうすればよいですか

分類Dev

既存の配列の先頭に新しい値を追加するにはどうすればよいですか?

分類Dev

特定の値を含む行に新しい列を追加するにはどうすればよいですか?

分類Dev

既存の列から新しい列を作成するにはどうすればよいですか?

分類Dev

固定値で複数の新しい列を追加するにはどうすればよいですか?

分類Dev

複数の配列からの値を合計し、条件付きの新しい配列に追加するにはどうすればよいですか?

分類Dev

3つの新しい列を追加するにはどうすればよいですか?

分類Dev

CRで区切られた文字列を複数の行に分割し、新しい各行にIDを追加するにはどうすればよいですか?

分類Dev

Python / Pandaで列から特定の値を取得し、新しい列として追加するにはどうすればよいですか?

分類Dev

Scrapy:CSV出力のエントリに番号を付けるアイテムを追加するにはどうすればよいですか?

分類Dev

新しい列を追加して他の列からデータを取得するにはどうすればよいですか?SQL

分類Dev

(PySparkを使用して)Spark DataFrameに新しい列を追加するにはどうすればよいですか?

分類Dev

新しく作成したcsvファイルの列から追加するにはどうすればよいですか?

分類Dev

文字列配列に新しいアイテムを追加するにはどうすればよいですか?

分類Dev

列配列をdfから新しいdfに分割するにはどうすればよいですか?

分類Dev

数式の概要からの出力に行を追加するにはどうすればよいですか?

分類Dev

forループ中にRに新しい列を追加するにはどうすればよいですか?

分類Dev

条件に応じて新しい列に値を追加するにはどうすればよいですか?

分類Dev

列の新しいリストを削除して.csvファイルに追加するにはどうすればよいですか?

分類Dev

csvから列の複数の記述子に基づいて行数を抽出し、bash / pythonスクリプトを使用して出力を新しいcsvにエクスポートするにはどうすればよいですか?

分類Dev

CSVから変換した後にJSON出力を整理するにはどうすればよいですか?

分類Dev

CSVで列の値をシフトして新しい値を追加するにはどうすればよいですか

分類Dev

CSVデータ列から最大値を出力するにはどうすればよいですか?

分類Dev

テーブルから新しい列に特定の値を追加するにはどうすればよいですか?

分類Dev

Icommandコマンドから新しいObservableCollectionを追加するにはどうすればよいですか?

Related 関連記事

  1. 1

    Pythonで出力ファイルに新しい列を追加するにはどうすればよいですか?

  2. 2

    Python:操作から取得した値を特定のCSVの新しい列に追加するにはどうすればよいですか?

  3. 3

    CSVファイルに新しい列を追加するにはどうすればよいですか?

  4. 4

    既存の列からカウントを追加および合計する新しい列を追加するにはどうすればよいですか?

  5. 5

    1つのCSVから別の既存のCSVに新しい行を追加するにはどうすればよいですか

  6. 6

    既存の配列の先頭に新しい値を追加するにはどうすればよいですか?

  7. 7

    特定の値を含む行に新しい列を追加するにはどうすればよいですか?

  8. 8

    既存の列から新しい列を作成するにはどうすればよいですか?

  9. 9

    固定値で複数の新しい列を追加するにはどうすればよいですか?

  10. 10

    複数の配列からの値を合計し、条件付きの新しい配列に追加するにはどうすればよいですか?

  11. 11

    3つの新しい列を追加するにはどうすればよいですか?

  12. 12

    CRで区切られた文字列を複数の行に分割し、新しい各行にIDを追加するにはどうすればよいですか?

  13. 13

    Python / Pandaで列から特定の値を取得し、新しい列として追加するにはどうすればよいですか?

  14. 14

    Scrapy:CSV出力のエントリに番号を付けるアイテムを追加するにはどうすればよいですか?

  15. 15

    新しい列を追加して他の列からデータを取得するにはどうすればよいですか?SQL

  16. 16

    (PySparkを使用して)Spark DataFrameに新しい列を追加するにはどうすればよいですか?

  17. 17

    新しく作成したcsvファイルの列から追加するにはどうすればよいですか?

  18. 18

    文字列配列に新しいアイテムを追加するにはどうすればよいですか?

  19. 19

    列配列をdfから新しいdfに分割するにはどうすればよいですか?

  20. 20

    数式の概要からの出力に行を追加するにはどうすればよいですか?

  21. 21

    forループ中にRに新しい列を追加するにはどうすればよいですか?

  22. 22

    条件に応じて新しい列に値を追加するにはどうすればよいですか?

  23. 23

    列の新しいリストを削除して.csvファイルに追加するにはどうすればよいですか?

  24. 24

    csvから列の複数の記述子に基づいて行数を抽出し、bash / pythonスクリプトを使用して出力を新しいcsvにエクスポートするにはどうすればよいですか?

  25. 25

    CSVから変換した後にJSON出力を整理するにはどうすればよいですか?

  26. 26

    CSVで列の値をシフトして新しい値を追加するにはどうすればよいですか

  27. 27

    CSVデータ列から最大値を出力するにはどうすればよいですか?

  28. 28

    テーブルから新しい列に特定の値を追加するにはどうすればよいですか?

  29. 29

    Icommandコマンドから新しいObservableCollectionを追加するにはどうすればよいですか?

ホットタグ

アーカイブ