Python应用最多的场景还是web快速开发、爬虫、自动化运维。
爬虫在开发过程中也有很多复用的过程,这里总结一下
1、基本抓取网页
get方法
import urllib2
url = "http://www.1668s.com"
response = urllib2.urlopen(url)
print(response.read())
pos
import urllib
import urllib2
url = "http://1668s.com"
form = { name : abc , password : 1234 }
form_data = urllib.urlencode(form)
request = urllib2.Request(url,form_data)
response = urllib2.urlopen(request)
print(response.read())
))
2、使用代理IP
开发爬虫过程中经常会遇到IP被封掉的情况,这时就需要用到代理IP;
在urllib2包中有
import urllib2
proxy = urllib2.ProxyHandler({ http : 127.0.0.1:8087 })
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
response = urllib2.urlopen( http://www.baidu.com )
print(response.read())
com )
print(response.read())
3、Cookies处理
cookies是某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密),python提供了cookielib模块用于处理cookies,cookielib模块
import urllib
from http import cookiejar
cookie_support= urllib2.HTTPCookieProcessor(cookielib.CookieJar())
opener = urllib2.build_opener(cookie_support)
urllib2.install_opener(opener)
content = urllib2.urlopen( http://1668s.com).read()
#关键在于CookieJar(),它用于管理HTTP cookie值、
#存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。
#整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失,所有过程都不需要单独去操作。
#手动添加cookie
cookie = "PHPSESSID=91rurfqm2329bopnosfu4fvmu7; kmsign=55d2c12c9b1e3; KMUID=b6Ejc1XSwPq9o756AxnBAg="
request.add_header("Cookie", coo
q9o756AxnBAg="
request.add_header("Cookie", cookie)
cookie)
4、伪装成浏览器
某些网站反感爬虫的到访,于是对爬虫一律拒绝请求。所以用urllib2直接访问网站经常会出现HTTP Error 403: Forbidden的情况
对有些 header 要特别留意,Server 端会针对这些 header 做检查
- User-Agent 有些 Server 或 Proxy 会检查该值,用来判断是否是浏览器发起的 Request
- Content-T
import urllib2
headers = {
User-Agent : Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6
}
request = urllib2.Request(
url = http://my.oschina.net/jhao104/blog?catalog=3463517 ,
headers = headers
)
print(urllib2.urlopen(requ
jhao104/blog?catalog=3463517 ,
headers = headers
)
print(urllib2.urlopen(request).read())
equest).read())
5、gzip压缩
有没有遇到过某些网页,不论怎么转码都是一团乱码。哈哈,那说明你还不知道许多web服务具有发送压缩
import urllib2, httplib
request = urllib2.Request( http://1668s?.com )
request.add_header( Accept-encoding , gzip )
opener = urllib2.build_opener()
p://1668s?.com )
request.add_header( Accept-encoding , gz
d_header( Accept-encoding , gz
import StringIOimport
gzipcompresseddata = f.read()
compressedstream = StringIO.StringIO(compresseddata)
gzipper = gzip.GzipFile(fileobj=compres
a = f.read()
compressedstream = StringIO.StringIO(compresseddata)
gzipper = gzip.GzipFile(fileobj=compressedstream)
print(gzipper.re
ressedstream)
print(gzipper.read())
ad())
Python学习交流群:741090028 备注:小螺号
閱讀更多 小精靈zx 的文章