Резюме:При сканировании, в дополнение к обычным веб-сайтам, которые можно сканировать без входа в систему, существует также тип веб-сайтов, для которых сначала необходимо войти в систему. Например, Douban, Zhihu и Juzi.com в предыдущей статье. Этот тип веб-сайтов можно разделить на: нужно только ввести пароль учетной записи, в дополнение к паролю учетной записи необходимо ввести или нажать код подтверждения и другие типы. В этой статье в качестве примера используется Juzi.com, который может войти в систему только путем ввода пароля учетной записи, и представлены три часто используемых метода имитации входа в систему.
- Метод POST-запроса: необходимо получить URL-адрес входа в фоновом режиме и заполнить параметры тела запроса, а затем POST-запрос для входа в систему, что относительно проблематично;
- Метод добавления файлов cookie: сначала войдите в систему и добавьте полученные файлы cookie в заголовки, а затем используйте метод GET для запроса входа в систему, что является наиболее удобным;
- Симуляция входа в Selenium: вместо ручного ввода номера учетной записи и пароля выполняется автоматически, что является простым, но относительно медленным.
Ниже мы используем код для реализации трех вышеуказанных методов соответственно.
1. Целевая страница
Это веб-страница, на которую мы хотим получить контент:
Чтобы увидеть информацию о данных, необходимо войти на эту веб-страницу.Интерфейс входа выглядит следующим образом:
Как видите, вам нужно только ввести номер учетной записи и пароль для входа в систему, не вводя код подтверждения, что относительно просто. Затем мы используем тестовую учетную запись и пароль для имитации входа в систему.
2. POST отправить запрос на вход
Во-первых, нам нужно найти URL-адрес POST-запроса.
Есть два способа: первый — просмотреть запрос в инструментах разработки веб-страницы, а второй — просмотреть его в программном обеспечении Fiddler.
Поговорим о первом способе.
Введите пароль учетной записи в интерфейсе входа, откройте инструменты разработчика, очистите все запросы, а затем нажмите кнопку входа, после чего вы увидите, что создается большое количество запросов. Какой URL-адрес POST-запроса? Это требует небольшого опыта, потому что это логин, поэтому попробуйте нажать на запрос со словом «логин». Здесь мы нажимаем на четвертый запрос, и вы можете увидеть запрошенный URL-адрес в заголовках справа.Метод запроса - тип POST, что указывает на то, что URL-адрес найден правильно.
Далее мы спускаемся к данным формы, где есть несколько параметров, в том числе идентификация и пароль, эти два параметра — это учетная запись и пароль, которые нам нужно ввести при входе в систему, то есть параметры, которые должен нести запрос POST.
Конструкция параметра очень проста, далее вам нужно только использовать метод Requests.post для запроса входа на сайт, а затем вы можете сканировать контент.
Ниже мы пытаемся получить запрос POST с помощью Fiddler.
Если вы не знакомы с Fiddler или он не установлен на вашем компьютере, вы можете сначала разобраться и установить его.
Fiddler — это клиентский и серверный HTTP-прокси, а также один из наиболее часто используемых инструментов захвата HTTP-пакетов. Он может записывать все HTTP-запросы между клиентом и сервером, анализировать данные запроса, устанавливать точки останова, отлаживать веб-приложения, изменять запрошенные данные и даже изменять данные, возвращаемые сервером для определенного HTTP-запроса. мощный Это мощный инструмент для веб-отладки.
Адрес загрузки скрипача:
Woohoo.тел Erik.com/download/FI…
Используйте учебник:
Woohoo.Hangge.com/blog/Уборка автомобилей/…
Далее мы перехватываем запрос на вход через Fiddler.
Когда вы нажмете, чтобы войти, на официальной странице Fiddler вы увидите, что слева было перехвачено большое количество запросов. По наблюдениям, URL-адрес 15-го запроса содержит поле «логин», которое, вероятно, является POST-запросом для входа в систему. Мы нажимаем запрос, возвращаемся вправо, нажимаем «инспекторы» и «заголовки» соответственно, мы видим, что это запрос POST, и URL-адрес совпадает с URL-адресом, полученным вышеуказанным методом.
Затем переключитесь на опцию Webforms справа, и вы увидите тело запроса Body. Он также такой же, как и полученный вышеописанным способом.
После получения URL-адреса и параметров тела запроса вы можете начать имитировать вход в систему с помощью метода Requests.post.
код показывает, как показано ниже:
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
}
data = {
'identity':'irw27812@awsoo.com',
'password':'test2018',
}
url ='https://www.itjuzi.com/user/login?redirect=&flag=&radar_coupon='
session = requests.Session()
session.post(url,headers = headers,data = data)
# 登录后,我们需要获取另一个网页中的内容
response = session.get('http://radar.itjuzi.com/investevent',headers = headers)
print(response.status_code)
print(response.text)
Используйте метод session.post для отправки запроса на вход, а затем используйте метод session.get для запроса целевой страницы и вывода HTML-кода. Видно, что содержимое веб-страницы успешно получено.
Далее вводится второй метод.
3. Получите файлы cookie и запросите вход напрямую
В приведенном выше методе нам нужно перейти в фоновый режим, чтобы получить ссылку и параметры запроса POST, что более проблематично. Затем мы можем попробовать сначала войти в систему, получить файл cookie, затем добавить файл cookie в заголовки, а затем использовать метод GET для запроса, процесс намного проще.
код показывает, как показано ниже:
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
'Cookie': '你的cookie',
}
url = 'https://www.itjuzi.com/user/login?redirect=&flag=&radar_coupon='
session = requests.Session()
response = session.get('http://radar.itjuzi.com/investevent', headers=headers)
print(response.status_code)
print(response.text)
Как видите, после добавления куки вам не нужно делать POST-запрос, вы можете напрямую ПОЛУЧИТЬ целевую страницу. Как видите, содержимое веб-страницы также можно успешно получить.
Третий способ описан ниже.
4. Имитация входа в Selenium
Этот метод очень прост: вместо ручных методов используется Selenium для автоматического ввода пароля учетной записи, а затем входа в систему.
Использование Selenium подробно описано в предыдущей статье, если вы с ним не знакомы, то можете ознакомиться с ним:
Woohoo.Ma Kongchengyun.top/Web_scrap в…
код показывает, как показано ниже:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
browser = webdriver.Chrome()
browser.maximize_window() # 最大化窗口
wait = WebDriverWait(browser, 10) # 等待加载10s
def login():
browser.get('https://www.itjuzi.com/user/login')
input = wait.until(EC.presence_of_element_located(
(By.XPATH, '//*[@id="create_account_email"]')))
input.send_keys('irw27812@awsoo.com')
input = wait.until(EC.presence_of_element_located(
(By.XPATH, '//*[@id="create_account_password"]')))
input.send_keys('test2018')
submit = wait.until(EC.element_to_be_clickable(
(By.XPATH, '//*[@id="login_btn"]')))
submit.click() # 点击登录按钮
get_page_index()
def get_page_index():
browser.get('http://radar.itjuzi.com/investevent')
try:
print(browser.page_source) # 输出网页源码
except Exception as e:
print(str(e))
login()
Здесь мы сначала находим местоположение узла учетной записи на веб-странице:'//*[@id="create_account_email"]'
, а затем используйте метод input.send_keys для ввода номера учетной записи.Точно так же найдите расположение поля пароля и введите пароль. Затем найдитеАвторизоватьсяРасположение кнопки://*[@id="login_btn"]
, а затем используйте метод submit.click() для реализации операции нажатия кнопки входа в систему для завершения входа. Как видите, содержимое веб-страницы также можно успешно получить.
Выше приведены несколько способов имитации необходимости авторизации на веб-сайте. После входа в систему вы можете начать сканирование необходимого контента.
5. Резюме:
- В этой статье реализуются три метода имитации входа в систему соответственно, и рекомендуется сначала выбрать второй метод, то есть сначала метод получения файлов cookie, а затем запрос прямого входа в систему с помощью Get.
- В этой статье имитируется вход на веб-сайт, требуется только ввести пароль учетной записи, не требуется получать соответствующие параметры шифрования, такие как Authenticity_token. В то же время нет необходимости вводить код подтверждения, поэтому метод относительно прост. Тем не менее, есть еще много веб-сайтов, которым необходимо иметь дело с параметрами шифрования, вводом кода подтверждения и другими проблемами при имитации входа в систему. Он будет представлен позже.
Рекомендуемое чтение:
Эта статья закончилась.
Добро пожаловать в долгое нажатие, чтобы идентифицировать и подписаться на мой официальный аккаунт