我不知道为什么这不起作用
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))
我见过其他脚本从一个函数返回变量以在另一个函数中使用,但这一直在说“soup”没有定义。然后,如果我将soup设置为全局变量,那么我会得到一个错误,即页面是非类型的,并且我无法从中调用.find属性。任何帮助都将不胜感激
这就是你正在做的
soup
当然是在define_soup()
中定义的,但它是该函数的局部函数。没有其他功能可以使用它。所以假设因为我们调用了define_soup()
,所以我们可以在eat()
中使用它是错误的。相反,您可以将soup
设为全局或将define_soup()
的返回值存储在变量中使用全局
在var中存储define_soup()输出
print(get_next_page(data))
的最后一行是使用传入的参数data
运行函数get_next_page
。但是,data
从未定义过,因此它没有传入。所以在get_next_page
的内部,它分配soup = None
。然后在None
上运行其他所有操作在第二行中,您需要执行
data = get_data(url)
,然后在调用get_next_page(data))
时,数据将等于从第一个函数返回的soup
此外,您可能需要
s = HTMLSession()
位于get_url
函数内部,或者像url
一样将其传入get_data(url)函数返回一个变量,但不存储在任何内容中。所以你可以
数据=获取数据(url) 打印(获取下一页(数据))
相关问题 更多 >
编程相关推荐