#python #python-3.x #web-scraping #beautifulsoup #python-requests
#python #python-3.x #очистка веб-страниц #beautifulsoup #python-запросы
Вопрос:
Я хочу войти на веб-сайт, выполнить поиск на странице, а затем очистить все результаты.
Мне каким-то образом удалось войти в систему с использованием Python и запросов, но когда я выполняю запрос get на странице, на которой я хочу выполнить поиск, или всякий раз, когда я выполняю запрос post на этой странице со всеми критериями поиска, переданными в теле, я на самом деле не получаю никакого результата поиска. Вместо этого в заголовке по-прежнему написано «Login to page», что является заголовком страницы входа в систему, поэтому почему-то кажется, что я не могу выполнить какую-либо операцию REST после входа в систему. Есть ли какой-либо конкретный способ очистить веб-сайт, когда требуется войти в систему, а затем выполнить поиск?
Ниже приведена моя попытка:
import requests
from lxml import html
from bs4 import BeautifulSoup
USERNAME = "abcdefgh"
PASSWORD = "xxxxxxx"
LOGIN_URL = "https://www.assortis.com/en/login.asp"
URL = "https://www.assortis.com/en/members/bsc_search.asp?act=sc"
SEARCH_URL = "https://www.assortis.com/en/members/bsc_results.asp"
def scrapeIt():
session_requests = requests.session()
#login
result = session_requests.get(LOGIN_URL)
tree = html.fromstring(result.text)
# print(tree)
# Create payload
payload = {
"login_name": USERNAME,
"login_pwd": PASSWORD,
"login_btn": "Login"
}
search_payload = {
'mmb_cou_hid': '0,0',
'mmb_don_hid': '0,0',
'mmb_sct_hid': '0,0',
'act': 'contract',
'srch_sdate': '2016-01-01',
'srch_edate': '2018-12-31',
'procurement_type': 'Services',
'srch_budgettype': 'any',
'srch_budget': '',
'srch_query': '',
'srch_querytype': 'all of the words from'
}
# Perform login
result = session_requests.post(LOGIN_URL, data=payload, headers=dict(referer=LOGIN_URL))
# Scrape url
result = session_requests.get(URL, headers=dict(referer=URL))
result = session_requests.post(SEARCH_URL, data=search_payload, headers=dict(referer=SEARCH_URL))
content = result.content
# print(content)
data = result.text
soup = BeautifulSoup(data, 'html.parser')
print(soup)
scrapeIt()
РЕДАКТИРОВАТЬ: веб-страница, возможно, написана на JavaScript.
Комментарии:
1. страница может использовать JavaScript, но request / beautifulsoup / lxml не запускает JavaScript. вы можете открыть веб-браузер, отключить JavaScript и войти на свою страницу, чтобы посмотреть, что может получить скрипт.
2. вы проверяли страницу, которую получаете после входа в скрипт? Я думаю, вы не входили в систему. Я открыл страницу входа и проверил запрос в DevTool в Chrome / Firefox, и я вижу, что он отправляет логин и пароль как
login_name
иlogin_pwd
, неusername
/password
3. @furas извините, это была опечатка, я пробовал с login_name и login_pwd … не работает. Также как отключить java script и просмотреть веб-страницу?
4. он также отправляет запрос POST на
"https://www.assortis.com/login.asp"
— без/en/
указания URL.5. итак, эта страница не может работать без JavaScript. Итак, вы должны использовать
Selenium
Ответ №1:
Сохраните свой response.text в локальный файл после входа в систему, чтобы увидеть, действительно ли вы вошли в систему, проверьте файл, в противном случае вместо обратного проектирования http-запросов попробуйте Selenium chromedriver.
Часть регистрации проще в Selenium, но поиск содержимого на странице — нет, используйте ожидание исключений для динамической загрузки, driver.page_source, чтобы увидеть html, иногда браузер пишет html по-другому, т.Е. <tbody>
теги