我的目标是从consumerreports.com中抓取数据,所以我在这个项目中使用了“请求”和“漂亮汤”。抛开网络抓取不谈,我在通过请求成功登录consumerreports.com时遇到了很多问题。
下面是我的代码:我创建了两个文本文件,并在其中编写post和response,这样我就可以检查它是否成功登录。
import requests
import os.path
#declares any necessary variables
#file1, file2 to check if login is successful
save_path = '/Users/myName/Documents/Webscraping Project/'
login_url = 'https://www.consumerreports.org/cro/index.htm'
my_url = 'https://www.consumerreports.org/cro/index.htm'
pName = os.path.join(save_path, 'post text file'+".txt")
rName = os.path.join(save_path, 'response text file'+".txt")
post_file = open(pName, "w")
response_file = open(rName, "w")
#login using Session class from Requests package
with requests.Session() as s:
payload = {"userName":"myName@university.edu","password":"my_password"}
p = s.post(login_url, data=payload)
print(p.text)
r = s.get(my_url)
#saves files to see if login was successful
post_file.write(str(p.text.encode('utf-8')))
response_file.write(str(r.text.encode('utf-8')))
post_file.close()
response_file.close()
print('Files created.')
这是我得到的:
<!DOCTYPE html>
<html>
<head>
<title>405 Not allowed.</title>
</head>
<body>
<h1>Error 405 Not allowed.</h1>
<p>Not allowed.</p>
<h3>Guru Meditation:</h3>
<p>XID: #some number </p>
<hr>
<p>Varnish cache server</p>
</body>
</html>
此外,我检查了'response text file.txt‘的内容,并通过基本的ctrl+f功能确定系统没有成功登录。
似乎web服务器不接受'post‘方法,至少对于这个特定的url是这样,这就是它返回错误的原因。然而,我不知道如何从这里开始。我上网看了看,有人建议我用
response = requests.get(login_url, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'})
创建一个用户代理来“登录”或其他什么。我仍然是python的新手,所以如果有任何建议,我将不胜感激。
发布于 2019-01-28 15:30:35
您可能需要在s.post
中添加标头此错误here有一个解决方案。这对我很管用。希望这能有所帮助。
https://stackoverflow.com/questions/50788971
复制相似问题