爬虫总结(一)

爬虫总结(一)

urllib2模块

urllib2直接访问url

response = urllib2.urlopen("http://www.baidu.com/")
#读取html源码使用read方法
html = response.read()

urllib2构造header来反爬虫

#1.构造request对象(get请求)
url = "http://www.baidu.com/"

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}

#这种request是get请求,因为没有给data传值,如果需要使用get方式传参,可以把参数经过urllib.urlencode之后拼接到url上
request = urllib2.Request(url , headers = headers)

response = urllib2.urlopen(request)

#2.构造request对象(post请求)
#假设这是需要post的数据
formdata =  {
    "type":"AUTO",
    "i":"i love python",
    "doctype":"json",
    "xmlVersion":"1.8",
    "keyfrom":"fanyi.web",
    "ue":"UTF-8",
    "action":"FY_BY_ENTER",
    "typoResult":"true"
}

#进行url编码
data = urllib.urlencode(formdata)

request = urllib2.Request(url , data = data , headers = headers)

#发送post请求
response = urllib2.urlopen(request)

自定义handler构造具有代理功能的opener

#注意:urllib2.urlopen()其实就是使用urllib2给我们创建的默认的opener对象,这个对象的功能相对较弱,如果需要增加功能,需要我们自己构建

#1.使用具有代理功能的handler
httpproxy_handler = urllib2.ProxyHandler({"http" : "124.88.67.81:80"})

#2.根据handler构建opener
opener = urllib2.build_opener(httpproxy_handler)

request = urllib2.Request("http://www.baidu.com/")

#3.如果这么写,只有使用opener.open()方法发送请求才使用了自定义的代理
response = opener.open(request)

#4.如果这么写,就是将opener应用到全局,之后所有的,不管是opener.open()还是urlopen()发送请求,都将使用自定义代理
#urllib2.install_opener(opener)

#response = urllib2.urlopen(request)

自定义handler构造具有保存cookie功能的opener

#1.构建一个CookieJar对象来保存cookie
cookiejar = cookielib.CookieJar()

#2.构建handler
handler = urllib2.HTTPCookieProcessor(cookiejar)

#3.构建opener
opener = urllib2.build_opener(handler)

#4.以get方法访问页面,访问之后会自动保存cookie到cookiejar中
opener.open("http://www.baidu.com/")

#5.可以按标准格式将保存的cookie打印出来
cookieStr = ""
for item in cookiejar:
    cookieStr = cookieStr + item.name + "=" + item.value + ";"

##舍弃最后一位的分号
print cookieStr[:-1]

Requests模块

Requests引入

  1.Requests继承了urllib2的所有特性。Requests支持连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的URL和POST数据自动编码
  2.安装方式,利用pip安装,pip install requests

Request访问url

1.最基本的请求可以直接使用get方法

response = requests.get("http://www.baidu.com/")

2.添加headers和查询参数
如果想要添加headers,可以传入headers参数来增加请求头中的headers信息。如果要将参数放在url中传递,可以利用params参数

#需要提交的参数
kw = {'wd' : '长城'}

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}

#params接受一个字典或者字符串的查询参数,字典类型自动转为url编码,不需要urlencode()
response = requests.get("http://www.baidu.com/s?" , params = kw , headers = headers)

#查看响应内容,response.text返回的是Unicode格式的数据
print response.text

#查看响应内容,response.content返回的字节流数据
print response.content

3.post请求

formdata = {
    "type":"AUTO",
    "i":"i love python",
    "doctype":"json",
    "xmlVersion":"1.8",
    "keyfrom":"fanyi.web",
    "ue":"UTF-8",
    "action":"FY_BY_ENTER",
    "typoResult":"true"
}

url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"

headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}

#这里使用的是data而不是params,因为这是post请求,而且不需要我们手动进行参数url编码
response = request.post(url , data = formdata , headers = headers)

print response.text

#如果是json文件可以直接显示
print response.json()

4.Cookie和Session
Cookies
如果一个响应中包含了cookie,那么我们可以利用cookies参数拿到:

response = requests.get("http://www.baidu.com/")

#返回CookieJar对象
cookiejar = response.cookies

#将CookieJar转换为字典
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)

print cookiejar

print cookiedict

Session
在requests里,session对象是一个非常常用的对象,这个对象代表一次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器断开。会话能让我们在跨请求时保持某些参数,比如:在同一个Session实例发出的所有请求之间保持cookie

#实现登陆人人网
#1.创建session对象,可以保存Cookie值
sess = requests.session()

#2.处理headers
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}

# 3. 需要登录的用户名和密码
data = {"email":"mr_mao_hacker@163.com", "password":"alarmchime"}  


#4.发送带有用户名和密码的请求,并获取登陆后cookie值,保存在sess里
sess.post("http://www.renren.com/PLogin.do" , data = data)

#5.访问需要登陆权限的页面
response = sess.get("http://www.renren.com/410043129/profile")

#6.打印响应内容
print response.text
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值