我正在尝试创建一个程序,该程序将访问我的大学网站上显示我的学期标记的特定https网页。我想抓取网页以检查最终成绩的变化,然后向自己发送电子邮件(这比全天都要随意检查更容易)。
我以前从未进行过网络抓取,并且该站点需要登录身份验证,所以这个问题可能比我想的要复杂,但这是我到目前为止的事情:
import certifi
from bs4 import BeautifulSoup
import urllib3 as u
url = "https://upnet.up.ac.za/psc/pscsmpra/EMPLOYEE/SA/c/UP_SS_MENU.UP_SS_RESULTS_FL.GBL"
http = u.PoolManager(cert_reqs='CERT_REQUIRED',ca_certs=certifi.where())
try:
r = http.request('GET',url,timeout=u.Timeout(connect=1.0, read=2.0))
except u.exceptions.NewConnectionError:
print("Connection Failed")
print(r.status)
soup = BeautifulSoup(r.data,features="html.parser")
print(soup.prettify())
运行此代码将返回以下内容:
200
无法处理Browscap文件。因为它可能会丢失。请 请与您的系统管理员联系。
如果我运行r.headers,我会得到:
HTTPHeaderDict({'Date':'Thu,15 Nov 2018 07:13:27 GMT','Server': 'Apache','Content-Length':'99','X-Frame-Options':'SAMEORIGIN', Set-Cookie: 'appcsmpr08-7007-PORTAL-PSJSESSIONID = 5T8WMyIf2lC2ZSBTaf84UZBA-tV9BLAh!631984709; domain = .up.ac.za;路径= /; HttpOnly, NSC_wt_dbnqvtqspe = ffffffff8adf14db45525d5f4f58455e445a4a422d6f; expires = Thu, 15-Nov-2018 08:09:29 GMT; path = /; httponly, dtCookie = E2152DB7F41B75674D0AE5146876F0EB | UFNDU018MQ;路径= /; Domain = .up.ac.za”,“ X-Clacks-Overhead”:“ GNU Terry Pratchett”, 'Content-Type':'文本/纯文本; charset = UTF-8'})PS C:\ Users \ Shaun \ Documents \ Personal_Projects \ markAlert>
我假设我可以连接,但是我不确定上面的错误是什么意思。谷歌搜索没有帮助。
任何有关如何解决此问题的帮助都值得赞赏!
答案 0 :(得分:0)
该错误来自服务器,因为无法检测到您的请求用户代理,请对其进行设置。
heads = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0'}
http = u.PoolManager(headers=heads)