使用HTMLSession时遇TypeError:get()缺少必选参数'url'的技术问询
问题排查与解决
核心错误原因
你遇到的TypeError: get() missing 1 required positional argument: 'url',根源是HTMLSession类未实例化:
# 错误写法:仅赋值类,未创建实例 session=HTMLSession # 正确写法:加括号生成类实例 session=HTMLSession()
get()是HTMLSession的实例方法,必须通过类的实例调用。直接用类调用时,Python会把你传入的url当作实例方法的第一个参数self,导致实际缺少url参数,触发报错。
其他潜在问题与修正
除核心错误外,代码还有几处逻辑和语法问题,一并修正:
- Allpage函数逻辑错误:原代码判断下一页的条件写反,且未处理分页容器不存在的情况,会触发AttributeError;拼接url时错误地将BeautifulSoup对象转为字符串操作,应直接用对象方法处理。
- 循环终止逻辑缺失:当没有下一页时,
Allpage返回None,此时需终止循环,否则会调用data(None)引发新错误。 - 变量大小写错误:最后一行
print(URL)应为print(url),Python对大小写敏感。
修正后的完整代码
from requests_html import HTMLSession from bs4 import BeautifulSoup import requests # 实例化HTMLSession session = HTMLSession() url = "https://pureportal.coventry.ac.uk/en/organisations/coventry-university/publications/" def data(url): # 通过实例调用get方法 r = session.get(url) r.html.render(sleep=1) soup = BeautifulSoup(r.html.html, "html.parser") return soup def Allpage(soup): # 先获取分页容器,处理不存在的情况 pagination = soup.find("ul", {"class":"pagination"}) if not pagination: return None # 查找下一页按钮 next_page = pagination.find("li", {"class": "next"}) if next_page: # 直接提取下一页的链接 next_href = next_page.find("a")["href"] # 拼接完整URL return f"https://pureportal.coventry.ac.uk{next_href}" else: # 无下一页时返回None return None while True: getdata = data(url) url = Allpage(getdata) print(url) # 无下一页时终止循环 if not url: break
内容的提问来源于stack exchange,提问作者Arjun
相关产品推荐
相关产品推荐

