【发布时间】:2015-12-28 04:48:43
【问题描述】:
我正在使用 Beautiful Soup 来尝试抓取网页。该代码运行良好,但现在无法正常工作。我认为问题在于,源站点更改了他们的登录页面。所以我替换了 loginurl,它显然无法连接到该 url。我可以直接连接到它。那么有人可以尝试运行它并告诉我我做错了什么吗?
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): Max retries exceeded with 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"
请注意,登录 url 是错误的,但主要的不是。我可以在浏览器中手动访问这两个网址。那么为什么登录页面无法通过 Python 访问呢?
【问题讨论】:
-
看来问题是新的授权站点是https而不是http,Python有https的问题。有谁知道如何解决这个问题?我试过 pip 安装 requests[security] 但没有帮助。
标签: python post web-scraping beautifulsoup python-requests