使用Python脚本连接URL + CSV数据,然后向连接的URL的每个版本发送请求

3zwjbxry  于 12个月前  发布在  Python
关注(0)|答案(1)|浏览(87)

我希望从CSV文件中的3个单独列中读取字符串列表,并将字符串与URL连接起来,然后向URL发送请求,通过迭代CSV创建每个单独的URL,URL的响应将是我计划存储在新CSV文件中的JSON。到目前为止,我能够从CSV中读取数据,但我认为问题在于URL与列值的连接。我可以从CSV文件中读取数据,当我打印(URL)时,它会打印成功与CSV最后一行连接的URL,但在末尾添加“.0”。我无法理解):

import requests
import pandas as pd
import csv
import json
from urllib import response

#read cvs file select the columns you need with 'usecols='
df = pd.read_csv('~/Documents/top_10_nft.csv', usecols=['chain','contract_address' ,'token_id'],delimiter=',')
contract_address = df['contract_address']
chain = df['chain']
token_id = df['token_id']

df.dropna(subset=['chain','contract_address' ,'token_id'])

data = []

for index, row in df.iterrows():
     chain = row['chain']
     contract_address = row['contract_address']
     token_id = row['token_id']

url = f"https://api.opensea.io/v2/chain/{chain}/contract/{contract_address}/nfts/{token_id}"
headers = {
    "accept": "application/json",
    "X-API-KEY": "d4f769dccc874df19ced833c630b3ea0"
}

print(url)

response = requests.get(url, headers=headers)
#data.append(response.json())



# drop all null rows using dropna(subset=[column-name])
df.dropna(subset=['chain','contract_address','token_id'])



#concatinate URL

#nft_data = data['nft']

#print(response)

我希望我的做法是正确的。这是打印“URL”的结果,最后的“34.0”应该是“34”,这就是为什么我认为我得到500错误。另外,屏幕截图中显示的这个URL是与我正在阅读的CSV数据的最后一行成功连接的结果,这样可以吗?还是跳过了上面的数据行

sqougxex

sqougxex1#

这对我使用csv模块是有效的。忽略StringIO位并使用正确的路径到您的 * 文件.csv*

from pprint import pp
import io
import concurrent.futures
import csv
import requests

FILE = """\
chain,contract_address,token_id
ethereum,0x8a90CAb2b38dba80c64b7734e58Ee1dB38B8992e,34
"""

timeout = 10
session = requests.Session()
session.headers.update({
    'User-Agent': 'Mozilla/5.0',
    'accept': 'application/json',
    'X-API-KEY': 'd4f769dccc874df19ced833c630b3ea0'
})

def worker(url, timeout=timeout):
    return session.get(url=url, timeout=timeout)

if __name__ == '__main__':
    # with open(FILE, newline='') as file:
    with io.StringIO(FILE, newline='') as file:
        urls = []
        reader = csv.DictReader(file)
        for row in reader:
            chain = row.get('chain')
            contract_address = row.get('contract_address')
            token_id = row.get('token_id')
            if all((chain, contract_address, token_id)):
                url = f'https://api.opensea.io/v2/chain/{chain}/contract/{contract_address}/nfts/{token_id}'
                urls.append(url)

    with concurrent.futures.ThreadPoolExecutor() as pool:
        data = []
        futures = [pool.submit(worker, url) for url in urls]
        for future in concurrent.futures.as_completed(futures):
            try:
                response = future.result().json()
                data.append(response)
            except Exception as E:
                print(future.result(), url)
                print(type(E), E)

    for i in data: pp(i)

相关问题