Сообщение об ошибке 10054 при модуляции запросов - PullRequest
0 голосов
/ 31 мая 2019

Новый программист здесь.Пытался на веб-сайте, как я изучал Python.Пытался ткнуть, используя запросы и красивый суп.Заранее спасибо

Кажется, ошибка из строки res = запросы.get ('https://www.pof.com/everyoneonline.aspx?page_id=%s'% pageId)

Я попытался удалить страницу разбиения на страницы и очистить только одну страницу, но это не сработало. Также пытался использовать time.sleep 3 секунды между каждым запросом, но это тоже не сработало

#Username and password 
username='MyUsername'
password='MyPassword'


#Login to pof site
from selenium import webdriver
import bs4,requests
browser = webdriver.Chrome(executable_path='/Users/Desktop/geckodriver-v0.24.0-win32/chromedriver.exe')
browser.get('https://www.pof.com')
linkElem= browser.find_element_by_link_text('Sign In')
linkElem.click()
usernameElem=browser.find_element_by_id('logincontrol_username')
usernameElem.send_keys(username)
passwordElem=browser.find_element_by_id('logincontrol_password')
passwordElem.send_keys(password)
passwordElem.submit()

#Webscraping online profile links from first 7 pagination pages
for pageId in range(7):
    res=requests.get('https://www.pof.com/everyoneonline.aspx?page_id=%s' %pageId)
    res.raise_for_status()
    soup= bs4.BeautifulSoup(res.text)
    profile = soup.findAll('div', attrs={'class' : 'rc'})
    for div in profile:
        print (div.findAll('a')['href'])

Ожидаемый результат: печать списка всех ссылок href профиля, поэтомуПозже я могу сохранить их в csv

Фактический результат: запросы.exceptions.ConnectionError: ('Соединение прервано.', ConnectionResetError (10054, 'Существующее соединение было принудительно закрыто удаленным хостом', нет, 10054Нет)) enter code here

1 Ответ

0 голосов
/ 31 мая 2019

Я собираюсь дать вам некоторую общую информацию при просмотре веб-страниц:

  1. Прежде всего, не используйте запросы с селеном вместе! По моему опыту запросы - это самое быстрое и простое решение в 90% случаев.
  2. Всегда старайтесь указывать заголовки для вашего запроса. Отсутствие заголовков приводит к подозрительности веб-страницы, которая может даже заблокировать все ваши запросы (из-за этого может появиться ошибка!)
  3. Для последующих запросов к веб-странице, используйте сеанс !, таким образом ваши куки сохраняются, и вы можете получить доступ к авторизованной странице в течение длительного периода времени.
  4. Этот более объективен, но я предлагаю использовать модуль 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..

Надеюсь, это поможет, задавайте любые давние вопросы, и я перезвоню вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...