【问题标题】:Python script to loop through file and call api with requests then store results to text filePython脚本循环文件并使用请求调用api然后将结果存储到文本文件
【发布时间】:2019-07-20 14:04:28
【问题描述】:

尝试遍历文本文件中的电影标题以调用 API 并将响应存储到文本文件中。

文件的每一行都包含一个标题 ex。

Titanic
Avatar
A Star Is Born

我尝试使用的 api 来自 www.odmpapi.com

这是我必须正确加入和创建网络链接的原因

import requests
import sys

prefixURL = 'http://www.omdbapi.com/?t='
suffixURL = '&apikey=xxx4s23'

text_file = open("url.txt", "w")

with open('print.txt', 'r') as f:
    for i in f:
        uri = prefixURL + i.rstrip(' \n\t') + suffixURL
        print uri
        text_file.write(url)
        text_file.write('\n')

text_file.close()

text_file = open("responses.txt", "w")


with open('url.txt', 'r') as f2:
    for i in f2:
        url = i.strip(' \n\t')
        batch = requests.get(i.rstrip(' \n\t'))
        data = batch.text
        print data
    text_file.write(data)
    text_file.write('\n')

text_file.close()

这只会将列表中的最后一个标题写入responses.txt。

【问题讨论】:

  • 没有引用 par1 & part2 我认为你需要将这些重构为 prefixURL & suffixURL。
  • @wwii 谢谢。用过新手错误。
  • 你有一个循环,看起来你知道如何写入文件。你有什么问题?您是否想弄清楚如何提出请求?您查看过urllib.requests 文档或Requests: HTTP for Humans 文档吗?
  • 我认为您可能会受益于查看context managers 以避免泄漏文件描述符。也许在这里不相关,但对未来有好处。
  • @wwii 我正在这样做,但它只将列表中的最后一个标题写入responses.txt ``` text_file = open("responses.txt", "w") #send every uri到 api 并将响应写入一个带有 open('url.txt', 'r') as f2: for i in f2: url = i.strip(' \n\t') batch = requests.get( i.rstrip('\n\t')) data = batch.text 打印数据 text_file.write(data) text_file.write('\n') text_file.close() ```

标签: python json api web-scraping


【解决方案1】:

尝试以下方法:

import requests
import sys

base_url = 'http://www.omdbapi.com/?t={}&apikey=xxx4s23'

with open('print.txt', 'r') as f_input, open('responses.txt', 'w') as f_output:
    for line in f_input:
        search_term = line.strip(' \n\t')
        url = base_url.format(search_term)
        print url
        batch = requests.get(url)
        f_output.write("{},{}\n".format(url, batch.text))

这会将 URL 和结果写入输出文件。 Python 的.format() 命令可用于将您的搜索时间放入base_url,而无需将其拆分并使用字符串连接。它通过将每个 {} 替换为传递的参数来工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 2020-01-22
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多