Python 通过请求和登录来增长Web数据

Python 通过请求和登录来增长Web数据,python,authentication,web-scraping,beautifulsoup,Python,Authentication,Web Scraping,Beautifulsoup,我正试图登录server.growatt.com提取太阳能和电池数据,因为我想自动上传到pvoutput.org。 登录后,我只需要获取几个数据点。在使用html解析器之后,我尝试使用BeautifulSoupFind函数搜索单词“Solar”。参见代码。它在运行时返回None。我打印整个html输出,但找不到Solar。如果我检查网站上的html,Solar将被列出。我添加了asyncio.sleep,让网站有时间登录。我相信登录可以正常工作,因为返回的文件很大,但嵌入的数据不在那里。你知道我

我正试图登录server.growatt.com提取太阳能和电池数据,因为我想自动上传到pvoutput.org。 登录后,我只需要获取几个数据点。在使用html解析器之后,我尝试使用BeautifulSoupFind函数搜索单词“Solar”。参见代码。它在运行时返回None。我打印整个html输出,但找不到Solar。如果我检查网站上的html,Solar将被列出。我添加了asyncio.sleep,让网站有时间登录。我相信登录可以正常工作,因为返回的文件很大,但嵌入的数据不在那里。你知道我哪里出错了吗

import requests
import asyncio
from bs4 import BeautifulSoup as bs
from config import username, password, lang

URL = 'https://server.growatt.com/index'
LOGIN = 'https://server.growatt.com/login'

s = requests.session()

login_payload = {
    'account': username,
    'password': password,
    'lang' : lang
    }

login_req = s.post(LOGIN, data=login_payload)
print(login_req.status_code)

async def main():
    await asyncio.sleep(5)
asyncio.run(main())

soup = bs(s.get(URL).text, 'html.parser')
find = soup.find('Solar')
print(soup)
print(find)

我注意到,您试图使代码异步,而它根本不是

首先,必须使用异步方法

其次,登录过程需要对两个不同的
url
发出两个
POST
请求

下面,我使用了一个名为的高级
Async

另一方面,我使用了支持异步请求的

下面是一个简单的代码:

import trio
import httpx


async def main():
    headers = {
        "Accept-Language": "en-US,en;q=0.5"
    }
    async with httpx.AsyncClient(timeout=None, headers=headers) as client:
        data1 = {
            "userName": "testusername",
            "password": "testpass",
        }
        r1 = await client.post('https://oss.growatt.com/login', data=data1)
        print(r1.json())

        data2 = {
            "account": "testusername",
            "password": "testpass",
            "validateCode": ""
        }

        r2 = await client.post('https://server.growatt.com/login', data=data2)
        print(r2.json())


if __name__ == "__main__":
    trio.run(main)

输出:

{'result': 0, 'msg': 'Wrong user name or password'}
{'result': -2, 'msg': 'Username Password Error'}

谢谢你的回复。我使用了data2帐户和密码详细信息正确的代码,返回代码是{'result':1},我猜这意味着它登录了。我仍然无法获取登录后的任何数据。我没有有效的登录,无法为您检查,因为我相信您需要跟踪请求以完成登录过程或直接呼叫直接内部链接