我已经使用 class 在python中创建了一个脚本,以使用我的凭据登录网站。运行脚本时,我可以看到它已成功登录。我无法做的是找到一种合适的方法,将res.text
方法中返回的login()
传递给get_data()
方法,因此我可以进一步处理它。我不想尝试这样的return self.get_data(res.text)
,因为它看起来很尴尬。
最重要的是:当我运行脚本时,它将像现在一样自动登录。但是,当我在主函数中使用此行scraper.get_data()
时,它将获取数据。
这是我到目前为止的尝试:
from lxml.html import fromstring
import requests
class CoffeeGuideBot(object):
login_url = "some url"
def __init__(self,session,username,password):
self.session = session
self.usrname = username
self.password = password
self.login(session,username,password)
def login(self,session,username,password):
session.headers['User-Agent'] = 'Mozilla/5.0'
payload = {
"Login1$UserName": username,
"Login1$Password": password,
"Login1$LoginButton": "Log on"
}
res = session.post(self.login_url,data=payload)
return res.text
def get_data(self,htmlcontent):
root = fromstring(htmlcontent,"lxml")
for iteminfo in root.cssselect("some selector"):
print(iteminfo.text)
if __name__ == '__main__':
session = requests.Session()
scraper = CoffeeGuideBot(session,"username","password")
#scraper.get_data() #This is how i wish to call this
在方法之间传递变量作为参数的理想方法是什么?
答案 0 :(得分:3)
如果我正确理解了您的要求,则希望在res.text
内部访问get_data()
,而无需将其作为方法参数传递。
IMO有2个选项。
res
存储为CoffeeGuideBot
的类实例变量,并在get_data()
中访问它def login(self,session,username,password):
<some code>
self.res = session.post(self.login_url,data=payload)
def get_data(self):
root = fromstring(self.res.text,"lxml")
<other code>
login()
的返回值来存储res
。在当前代码中,return
语句是不必要的。def __init__(self,session,username,password):
<initializations>
self.res = self.login(session,username,password)
def login(self,session,username,password):
<some code>
return session.post(self.login_url,data=payload)
def get_data(self):
root = fromstring(self.res.text,"lxml")
<other code>
答案 1 :(得分:1)
from lxml.html import fromstring
import requests
class CoffeeGuideBot(object):
login_url = "some url"
def __init__(self,session,username,password):
self.session = session
self.usrname = username
self.password = password
self._login = self.login(session,username,password)
def login(self,session,username,password):
session.headers['User-Agent'] = 'Mozilla/5.0'
payload = {
"Login1$UserName": username,
"Login1$Password": password,
"Login1$LoginButton": "Log on"
}
res = session.post(self.login_url,data=payload)
return res.text
def get_data(self):
htmlcontent = self._login
root = fromstring(htmlcontent,"lxml")
for iteminfo in root.cssselect("some selector"):
print(iteminfo.text)
if __name__ == '__main__':
session = requests.Session()
scraper = CoffeeGuideBot(session,"username","password")
scraper.get_data()