Python爬虫-urllib库

本文介绍了如何使用Python通过GET和POST方式发送网页请求,并详细解释了如何设置headers和使用代理IP来模拟真实用户访问,避免被网站屏蔽。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过构建一个request请求发送,然后获取回应response,也就是网页代码

import urllib2

request = urllib2.Request("www.baidu.com")

response = urllib2.urlopen(request)

pageCode = response.read().decode('gbk')



数据传送分为两种方式:GET和POST

GET:直接以链接的方式访问,链接中包含了所有参数,如果包含密码的话,是一种不安全的选择,不适合传送大量数据

POST:POST则不会在链接上显示你提交了什么,可以传说大量数据、、


GET:

import urllib
import urllib2
 
values={}
values['username'] = "1016903103@qq.com"
values['password']="XXXX"
data = urllib.urlencode(values) 
url = "http://passport.youkuaiyun.com/account/login"
geturl = url + "?"+data
request = urllib2.Request(geturl)
response = urllib2.urlopen(request)
print response.read()

POST:

import urllib
import urllib2
 
values = {}
values['username'] = "1016903103@qq.com"
values['password'] = "XXXX"
data = urllib.urlencode(values) 
url = "http://passport.youkuaiyun.com/account/login?from=http://my.youkuaiyun.com/my/mycsdn"
request = urllib2.Request(url,data)
response = urllib2.urlopen(request)
print response.read()

urlopen函数还可以设置超时时间,解决网站反应过慢的问题:

import urllib2
response = urllib2.urlopen('http://www.baidu.com', timeout=10)

是否开启Debug Log

import urllib2
httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
opener = urllib2.build_opener(httpHandler, httpsHandler)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.baidu.com')


有些网站不允许程序直接访问,它会通过一些检测来判断是否进行响应。其中十分基本的就是检验headers,因此我们需要设置headers来完全模拟浏览器。

agent是请求的身份,如果没有不设置的话,服务器不一定会响应。

import urllib2  
 
url = 'http://www.server.com/login'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'  
values = {'username' : 'cqc',  'password' : 'XXXX' }  
headers = { 'User-Agent' : user_agent }  
data = urllib.urlencode(values)  
request = urllib2.Request(url, data, headers)  
response = urllib2.urlopen(request)  
page = response.read() 

为了对付盗链,很多服务器会识别headers中的refer字段是不是自己,如果不是,那么就不响应,所以我们也需要设置该字段。

headers = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'  ,
                        'Referer':'http://www.zhihu.com/articles' }  

有些网站会通过统计访问者的ip,如果某IP短时间内访问太多,则会禁止该ip访问一段时间。这个时候可以使用ip代理,每隔一段时间换一个代理,这样就可以绕过该限制。

enable_proxy = True
proxy_handler = urllib2.ProxyHandler({"http" : 'http://some-proxy.com:8080'})
null_proxy_handler = urllib2.ProxyHandler({})
if enable_proxy:
    opener = urllib2.build_opener(proxy_handler)
else:
    opener = urllib2.build_opener(null_proxy_handler)
urllib2.install_opener(opener)



headers的具体格式:

User-Agent : 有些服务器或 Proxy 会通过该值来判断是否是浏览器发出的请求
Content-Type : 在使用 REST 接口时,服务器会检查该值,用来确定 HTTP Body 中的内容该怎样解析。
application/xml : 在 XML RPC,如 RESTful/SOAP 调用时使用
application/json : 在 JSON RPC 调用时使用
application/x-www-form-urlencoded : 浏览器提交 Web 表单时使用
在使用服务器提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会导致服务器拒绝服务




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值