Python爬虫常用函数说明
1.urllib2.urlopen(url,data,timeout)
第一个参数url即为URL,第二个参数data是访问URL时要传送的数据,第三个timeout是设置超时时间。
第二三个参数是可以不传送的,data默认为空None,timeout默认为 socket._GLOBAL_DEFAULT_TIMEOUT
2.import urllib2
request=urllib2.Request(url)
response=urllib2.urlopen('request')
print response.read()
构造response使得逻辑上更加清晰。
3.post和get区别:
HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。因此GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
具体区别见:http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html
使用post方式模拟登陆:
import urllib
import urllib2
values ={"username":"name","password":"password"}
data=urllib.urlencode(values)
url='http://xxxxx'
request=urllib2.Request(url,data)
response=urllib2.urlopen(request)
print response.read()
使用get方式模拟登陆:
import urllib
import urllib2
values={}
values['username']='name'
values['password']='password'
data=urllib.urlencode(values)
url='http://xxxxx'
geturl=url+'?'+data
request=urllib2.Request(geturl)
response=urllib2.urlopen(request)
print response.read()
在请求中设置headers:
import urllib
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 = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' ,
'Referer':'http://www.zhihu.com/articles' }传入上面request中的headers
备注: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 设置错误会导致服务器拒绝服务
3.urllib2使用环境变量http_proxy来设置HTTP Proxy。
import urllib2
enable_proxy=true
proxy_handler=urllib2.ProxyHandler({'http://some-proxy.com:8080'})
null_proxy_handler=urllib2.ProxyHandler({})
if enable_proxy:
opener=urllib2.build_opener(proxy_handler)
else:
opener=urllib2.build_open(null_proxy_handler)
urllib2.install_opener(opener)