2016-12-15 99 views
2

所以我试图发送一个请求到一个网页并阅读它的回应。我做了一个比较请求和页面的代码,我不能得到相同的页面文本。我是否正确使用“请求”? 我真的认为我误解了请求函数的工作原理以及它的作用。有人能帮助我吗?请求函数的功能是什么?

import requests 
import urllib 

def search(): 
     pr = {'q':'pink'} 
     r = requests.get('http://stackoverflow.com/search',params=pr) 
     returntext = r.text 
     urllibtest(returntext) 

def urllibtest(returntext): 
     connection = urllib.urlopen("http://stackoverflow.com/search?q=pink") 
     output = connection.read() 
     connection.close() 
     if output == returntext: 
       print("ITS THE SAME PAGE") 
     else: 
       print("ITS NOT THE SAME PAGE") 

search() 
+0

'urllib.urlopen'应该是'urllib.request.urlopen' – Barmar

+0

@Barmar没有在Python 2 –

+0

伟大的第一个问题! –

回答

1

首先,没有理由期望两个不同的堆栈溢出搜索返回完全相同的响应。

有一个合乎逻辑的区别就在这里过,请求自动为您输出解码:

>>> type(output) 
str 
>>> type(r.text) 
unicode 

可以使用content代替,如果你不希望它做解码,并使用一个更可预测源代码才能看到相同的内容返回 - 例如:

>>> r1 = urllib.urlopen('http://httpbin.org').read() 
>>> r2 = requests.get('http://httpbin.org').content 
>>> r1 == r2 
True 
+0

我打算发布这个答案,但我实际上是看着'urllib.request.urlopen'的解码输出(我在python 3上),这对我来说不同于我从'requests.get '。不知道该怎么做。 –

+0

那么,你可能已经击中了CAPTCHA或其他东西。没有理由期望来自两个'StackOverflow'搜索的响应在两个不同的时间返回相同的内容。 – wim

+0

确实如此,实际上,我认为这就是发生了什么事:'人类验证 - 堆栈溢出' –