Python POST 请求失败,[Errno 10054] 现有连接被远程主机强制关闭

标签 python post web-scraping beautifulsoup python-requests

我正在使用 Beautiful Soup 尝试抓取网页。该代码运行得很好,但现在不起作用。我认为问题是,源站点更改了他们的登录页面。所以我更换了登录网址,但显然无法连接到该网址。我可以直接连接到它。那么有人可以尝试运行这个并告诉我我做错了什么吗?

import requests
from bs4 import BeautifulSoup
import re
import pymysql
import datetime

myurl = 'http://www.cbssports.com'

loginurl = 'https://auth.cbssports.com/login/index'

try:
    response = requests.get(loginurl)
except requests.exceptions.ConnectionError as e:
    print "BAD DOMAIN"

payload = {  
   'dummy::login_form': 1,  
   'form::login_form': 'login_form',  
   'xurl': myurl,  
   'master_product': 150,  
   'vendor': 'cbssports',  
   'userid': 'myuserid',  
   'password': 'mypassword', 
   '_submit': 'Sign in' }

session = requests.session()
p = session.post(loginurl, data=payload)

#(code to scrape the web page)

我收到以下错误: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='auth.cbssports.com', port=443): url 超出最大重试次数:/login (原因:[Errno 10054] 现有连接被远程主机强制关闭)

该网站是否主动阻止我的自动登录?或者我的数据负载有问题吗?

编辑:这是一段更简单的代码...

import requests

myurl = 'http://www.cbssports.com'

loginurl = 'https://auth.cbssports.com/login/index'

try:
    response = requests.get(myurl)
except requests.exceptions.ConnectionError as e:
    print "My URL is BAD"

try:
    response = requests.get(loginurl)
except requests.exceptions.ConnectionError as e:
    print "Login URL is BAD"

请注意,登录网址是错误的,但主要网址却不是。我可以在浏览器中手动访问这两个网址。那么为什么无法通过 Python 访问登录页面呢?

最佳答案

简短回答:将方案 (http://) 添加到 myurl(从 www.cbssports.comhttp ://www.cbssports.com),然后将其用作 xurl post 值。

<小时/>

更长的答案:您的 session 身份验证和请求代码没问题。我认为问题在于 cbs 的应用程序对您的 xurl 值感到困惑,参数 cbs 读取以决定在成功身份验证后将用户重定向到何处)。您传递的是无模式网址 www.cbssports.com,cbs 将其解释为相对路径 - 没有 http://cbssports.com/www.cbssports.com ,所以它(正确但令人困惑)404。添加一个方案使其成为绝对 URL 可以修复此问题,为您的所有后续请求提供经过身份验证的 session 。万岁!

但是,我无法重现您遇到的connectionException,这让我想知道这是否是网络拥塞而不是cbs方面的反抓取措施。

希望这对您有帮助。

关于Python POST 请求失败,[Errno 10054] 现有连接被远程主机强制关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34487818/

相关文章:

python - conda 是否从使用 pip install 安装的 pypi 更新包?

php - 将其中包含引号的字符串作为不带反斜杠的 post 方法发送

Python 保存空图

python - 如何以特定方式标记我的重复值

python - 根据 django 中的条件提交带有帖子的表单

javascript - jQuery Ajax 文件上传

java - 将 JSON 发布到后端

python - 使用ProcessPoolExecutor进行网页抓取: How to get data back to queue and results?

perl - WWW::Mechanize::Firefox 运行良好:一些尝试使脚本更健壮

python - 如何查找和存储空class和id的信息?