#python #web-scraping #beautifulsoup
Вопрос:
Может ли кто-нибудь помочь мне получить маркер доступа на этой веб-странице? Я пытаюсь выполнить веб-очистку, но не могу автоматически получить токен. http://200.75.4.210:8080/CIODCH/login.aspx
Это то, что у меня есть до сих пор, но я не могу получить маркер в ответе…
# Get the token
headers = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'}
login = {
'Password': "123456789.", #it is a generic password, please dont change it
'Usuario': "XXXXXXX"}
response = requests.post('https://apidch.kairosmining.com/auth/login', headers=headers, data=login).json()
# Use the token to input into the headers
url = 'http://apidch.kairosmining.com/api/CalidadAFlotacion'
headers.update({'authorization': 'Bearer %s' % response['token']})
Это URL-адрес, по которому я буду выполнять веб-очистку
http://200.75.4.210:8080/CIODCH/Intra/calidadproducto/cpfvista.aspx
Комментарии:
1. Похоже, что указанное вами имя пользователя/пароль недействительны, я не могу войти с его помощью с помощью браузера
2. Попробуйте еще раз… Я просто изменил его
Ответ №1:
import httpx
import pandas as pd
import trio
from bs4 import BeautifulSoup
loginurl = "http://200.75.4.210:8080/CIODCH/login.aspx"
async def get_soup(content):
return BeautifulSoup(content, 'lxml')
async def log_in(client):
r = await client.get(loginurl)
soup = await get_soup(r.text)
data = {k["id"]: k["value"] for k in soup.select("input[name^=__]")}
data.update({
"txtUser": "redacted",
"txtPassword": "987654321.",
"cmdLog": "Entrar"
})
await client.post(loginurl, data=data)
r = await client.get(
'http://200.75.4.210:8080/CIODCH/Intra/calidadproducto/cpfvista.aspx')
soup = await get_soup(r.text)
client.headers.update({
"Authorization": "Bearer {}".format(soup.select_one('iframe')['src'].split('=')[-1])
})
allin = []
async def workers(channel):
async with channel:
async for client, date in channel:
print(f"Extracted {date}")
data = {
"fecha": date,
"parametro": 1
}
r = await client.post('http://apidch.kairosmining.com/api/CalidadAFlotacion', data=data)
goal = pd.DataFrame.from_records(r.json())
if not goal.empty:
allin.append(goal)
async def main():
async with httpx.AsyncClient(timeout=None) as client, trio.open_nursery() as nurse:
await log_in(client)
sender, receiver = trio.open_memory_channel(0)
async with receiver:
for _ in range(20):
nurse.start_soon(workers, receiver.clone())
async with sender:
for i in pd.date_range(start="2021-07-1", end="2021-07-22").strftime('%Y-%#m-%d'):
await sender.send([client, i])
df = pd.concat(allin, ignore_index=True)
print(df)
if __name__ == "__main__":
trio.run(main)
Выход:
Id Fecha Area Turno Solidos Malla Comentarios dia hora
0 6375 2021-07-03T00:58:01.123Z A2 B 43 30 00:55 hrs 03-07-2021 00:58
1 6376 2021-07-03T00:58:52.826Z A1 B 38 25 00:55 hrs 03-07-2021 00:58
2 6377 2021-07-03T03:17:07.303Z A1 B 41 29 03:15 hrs 03-07-2021 03:17
3 6378 2021-07-03T03:24:26.813Z A2 B 46 38 03:20 hrs 03-07-2021 03:24
4 6379 2021-07-03T03:47:48.540Z A0 B 38 30 21:30 hrs 03-07-2021 03:47
.. ... ... ... ... ... ... ... ... ...
470 6807 2021-07-21T10:19:13.230Z None None None None None 21-07-2021 10:19
471 6808 2021-07-21T10:19:13.523Z None None None None None 21-07-2021 10:19
472 6809 2021-07-21T10:22:25.393Z None None None None None 21-07-2021 10:22
473 6810 2021-07-21T10:22:25.450Z None None None None None 21-07-2021 10:22
474 6811 2021-07-21T10:22:25.450Z None None None None None 21-07-2021 10:22
[475 rows x 9 columns]
Комментарии:
1. спасибо за ваш ответ… но при попытке получить данные, ответ заключается в том, что у меня нет нужного токена…. Кажется, я тоже не могу найти его в переменной r
2. @EliasUrra это делается для того, чтобы вы вошли на веб-сайт. вы должны следовать другим просьбам. особенно ваш пользователь/пропуск недействителен даже
3. Я только что проверил своего пользователя/пропуск, и все в порядке. Позвольте мне проверить, есть ли что-нибудь еще, что я мог бы сделать
4. @EliasUrra я еще раз проверил вашего пользователя/пропуск, и это тоже не работает для меня. даже другой пользователь упомянул об этом для вас. отсюда я не следую.
5. да, он прокомментировал это до того, как я изменил его.. но теперь я перепробовал 3 разных браузера и 3 разных сети, и все работает нормально… это довольно странно… вы пытаетесь использовать этот URL, верно? 200.75.4.210:8080/CIODCH/login.aspx