0

我不知道为什么这不起作用

from bs4 import *
import time
import pandas as pd
import pickle
import html5lib
from requests_html import HTMLSession

s = HTMLSession()
url = "https://cryptoli.st/lists/fixed-supply"


def get_data(url):
    r = s.get(url)
    soup = BeautifulSoup(r.text, 'html.parser')
    return soup
    
def get_next_page(soup):
    page = soup.find('ul', {'class': 'pager'})
    if not page.find('a', {'class': 'btn btn-default current disabled'}):
        url = 'https://cryptoli.st/lists/fixed-supply' + \
            str(page.find('li', {'class': 'paginate_button'}).find(
                'a')[{'class': 'btn btn-default next'}])
        return url
    else:
        return


get_data(url)
print(get_next_page(soup))

我见过其他脚本从一个函数返回变量以在另一个函数中使用,但这一直说“汤”没有定义。然后,如果我将汤设为全局变量,那么我会收到错误页面是 Nonetype 并且我不能调用它的 .find 属性。任何帮助,将不胜感激。

4

3 回答 3

2

您的最后一行是使用传入的参数print(get_next_page(data))运行函数。但是,从未定义过,因此它传入 None。所以然后在里面,它分配。然后你在.get_next_pagedatadataget_next_pagesoup = NoneNone

在倒数第二行中,您需要执行data = get_data(url),然后当您调用 时get_next_page(data)),数据将等于soup您从第一个函数返回的数据。

此外,您可能需要s = HTMLSession()将其放在get_url函数内部,或者像您一样将其传递url

于 2021-05-20T04:21:55.970 回答
2

这就是你正在做的事情。

def define_soup():
    soup = 'yummy'
    return soup 
def eat():
    return soup
define_soup() 
print(eat())

soup肯定是在 中定义的define_soup(),但它是该函数的本地函数。没有其他功能可以使用它。所以假设因为我们已经调用define_soup()了它,所以我们可以使用它eat()是错误的。相反,您可以使soup全局或将返回的值存储define_soup()在变量中。

使用全局

def define_soup():
    global soup
    soup = 'yummy'
    return soup 
def eat():
    return soup
define_soup() 
print(eat())

将 define_soup() 输出存储在 var 中

def define_soup():
    soup = 'yummy'
    return soup 
def eat(soup):
    return soup
sp = define_soup() 
print(eat(sp))
于 2021-05-20T04:22:40.433 回答
0

get_data(url) 函数返回一个变量,但不存储在任何内容中。所以你可以做

数据 = get_data(url) 打印(get_next_page(data))

于 2021-05-20T04:27:44.910 回答