Я собираюсь дать вам некоторую общую информацию при просмотре веб-страниц:
- Прежде всего, не используйте запросы с селеном вместе! По моему опыту запросы - это самое быстрое и простое решение в 90% случаев.
- Всегда старайтесь указывать заголовки для вашего запроса. Отсутствие заголовков приводит к подозрительности веб-страницы, которая может даже заблокировать все ваши запросы (из-за этого может появиться ошибка!)
- Для последующих запросов к веб-странице, используйте сеанс !, таким образом ваши куки сохраняются, и вы можете получить доступ к авторизованной странице в течение длительного периода времени.
- Этот более объективен, но я предлагаю использовать модуль
re
, если вы уже знаете регулярное выражение. BeautifulSoup
отлично, но для общего назначения, re
просто проще в моем опыте.
Так что теперь, чтобы ответить на ваш вопрос; Существует множество различных веб-страниц, но я предлагаю воспользоваться всеми из них:
Извлечение данных ~
Данные заголовка
- Откройте ваш обычный браузер с поддержкой проверяемых элементов. Перейдите на веб-страницу, с которой вы пытаетесь соскрести, и откройте панель проверки элементов.
- Перейти в раздел
Network
. Здесь вы можете увидеть все запросы вашего браузера, а также заголовки и источники.
- Сделайте запрос, который вы хотите эмулировать, следите за вкладкой сети, перейдите к запросу, который содержит требуемый
GET
или в вашем случае POST
метод.
- Скопируйте заголовки запроса для этого конкретного запроса. Вам не нужны все они (например, параметр cookie будет добавлен сеансом, поэтому он не нужен для этого примера; также заголовки, начинающиеся с
:
, такие как :method: POST
, не нужны)
- Поместите скопированные заголовки из вашего браузера в файл Python, вот пример с этой самой веб-страницы:
headers = {
"accept": "application/json, text/javascript, */*; q=0.01",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9,fa-IR;q=0.8,fa;q=0.7,de;q=0.6",
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
"dnt": "1",
"origin": "https://stackoverflow.com",
"referer": "/9845280/soobschenie-ob-oshibke-10054-pri-modulyatsii-zaprosov",
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) snap Chromium/74.0.3729.169 Chrome/74.0.3729.169 Safari/537.36",
}
Опубликовать данные
- Если вы хотите сделать почтовый запрос, в разделе
Headers
запроса должен быть другой раздел, называемый чем-то вроде строки "Payload" или "Form Data". Поместите его содержимое в другой файл python и измените его по своему усмотрению.
Использование данных ~
Теперь вы готовы поместить извлеченные данные для использования с запросами Python, а затем использовать re
или BeautifulSoup
в содержимом ответа для извлечения желаемых данных.
В этом примере я захожу на https://aavtrain.com/index.asp
Попробуйте выполнить шаги, которые я написал, и понять, что здесь происходит:
import requests
username = "something"
password = "somethingelse"
headers = {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
"accept-encoding": "gzip, deflate, br",
"cache-control": "max-age=0",
"content-type": "application/x-www-form-urlencoded",
"dnt": "1",
"origin": "https://aavtrain.com",
"referer": "https://aavtrain.com/index.asp",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) snap Chromium/74.0.3729.169 Chrome/74.0.3729.169 Safari/537.36"
}
data = {
"user_name": username,
"password": password,
"Submit": "Submit",
"login": "true"
}
with requests.Session() as session:
session.get("https://aavtrain.com/index.asp")
loggedIn = session.post("https://aavtrain.com/index.asp", headers=headers, data=data)
#... do stuff after logged in..
Надеюсь, это поможет, задавайте любые давние вопросы, и я перезвоню вам.