在自己的输出上重复python函数

2024-05-20 22:21:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我制作了一个函数,从网站上刮取最后64个字符的文本,并将其添加到url1,结果是new_url。我想通过从结果URL(new_url)中删除最后64个字符并再次将其添加到url1来重复这个过程。我们的目标是重复这一点,直到我找到一个网站,其中最后3个字符是“结束”

以下是我目前的代码:

#function
def getlink(url):
    url1 = 'https://www.uchicago.computer/api.php?file='
    req=request.urlopen(url)
    link = req.read().splitlines()

    for i,line in enumerate(link):
        text = line.decode('utf-8')
    
    last64= text[-64:]
    new_url= url1+last64
  
    return new_url



getlink('https://www.uchicago.computer/api.php?file=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz012345678910')
#output
'https://www.uchicago.computer/api.php?file=zyxwvutsrqponmlkjihgfedcba012345678910abcdefghijklmnopqrstuvwxyz'

我的问题是想办法在输出端重复这个函数。任何帮助都将不胜感激


Tags: 函数httpsapiurlnew网站wwwreq
2条回答

一个简单的循环应该可以工作。我已经删除了第一个标记,因为它可能是合理的信息。只需使用第一个链接的代码更改WRITE_YOUR_FIRST_TOKEN_HERE字符串

from urllib import request


def get_chunk(chunk, url='https://www.uchicago.computer/api.php?file='):
    with request.urlopen(url + chunk) as f:
        return f.read().decode('UTF-8').strip()


if __name__ == '__main__':
    chunk = 'WRITE_YOUR_FIRST_TOKEN_HERE'
    while chunk[-3:] != "END":
        chunk = get_chunk(chunk[-64:])
        print(chunk)
        # Chunk is a string, do whatever you want with it,
        # like chunk.splitlines() to get a list of the lines

read获取字节流,decode将其转换为字符串,strip移除前导和尾随空格(如\n),这样它就不会与最后64个字符混淆(如果您获取最后64个字符,但其中一个是\n,那么您将只获得63个字符的令牌)

请尝试下面的代码。它能执行你上面提到的吗

import requests
from bs4 import BeautifulSoup

def getlink(url):
    url1 = 'https://www.uchicago.computer/api.php?file='
    response = requests.post(url)
    doc = BeautifulSoup(response.text, 'html.parser')
    text = doc.decode('utf-8')
    last64= text[-65:-1]
    new_url= url1+last64
  
    return new_url

def caller(url):
    url = getlink(url)
    if not url[-3:]=='END':
        print(url)
        caller(url)

相关问题 更多 >