我对Python非常陌生,这是我的第一个真正的项目。我正在尝试制作网络抓取工具并收到此错误
import requests
from bs4 import BeautifulSoup
def main_spider(max_pages):
page = 1
while page < max_pages:
url = "https://en.wikipedia.org/wiki/Star_Wars" + str(page)
source_code = requests.get(url)
plain_text = source_code.text
soup = BeautifulSoup(plain_text)
for link in soup.findAll("a"):
href = link.get("href")
print(href)
page += 1
main_spider(1)
这是错误
for link in soup.findAll("a"):
UnboundLocalError: local variable 'soup' referenced before assignment
答案 0 :(得分:1)
import requests
from bs4 import BeautifulSoup
def main_spider(max_pages):
page = 1
while page < max_pages:
url = "https://en.wikipedia.org/wiki/Star_Wars" + str(page)
source_code = requests.get(url)
plain_text = source_code.text
soup = BeautifulSoup(plain_text)
for link in soup.findAll("a"):
href = link.get("href")
print(href)
page += 1
main_spider(1)
在您的情况下,soup
具有while循环的本地范围,因此您只能在while内部访问它。
因为看起来你在单个页面上做汤(并使用while循环在页面之间移动),我相信你希望你的soup.findAll('a')
在while循环中(每页的AKA)的基础上)。
答案 1 :(得分:0)
UnboundLocalError
表示存在一个代码路径,在使用之前未分配局部变量。在这种情况下,在soup
循环分配变量完成后使用while
。代码不考虑while
循环永远不会运行的情况。
暴露了其他错误。首先,for
循环应缩进,以便它在while
内运行。第二,为什么外环不运行?这只是条件中拼写错误的情况:<+
应该是<=
。