设为首页 收藏本站
查看: 850|回复: 0

[经验分享] 53. Python 爬虫(2)

[复制链接]

尚未签到

发表于 2018-8-7 11:29:48 | 显示全部楼层 |阅读模式
  Cookie
  Requests通过会话信息来获取cookie信息
  Cookie的五要素:
  Name   value   domain   path  expires
  打印cookie的五大要素
import requests  
url = "http://www.hao123.com"
  
s = requests.session()
  
r = s.get(url)
  
print (r.cookies)
  
for cook in r.cookies:
  
    print (cook.name)
  
    print (cook.value)
  
    print (cook.domain)
  
    print (cook.path)
  
    print (cook.expires)
  
    print ("#" * 30)
  打印结果:
<RequestsCookieJar[<Cookie BAIDUID=C425EDB0B83699C89BDA3D02B25C53BA:FG=1 for .hao123.com/>, <Cookie hz=0 for .www.hao123.com/>, <Cookie ft=1 for www.hao123.com/>, <Cookie v_pg=normal for www.hao123.com/>]>  
BAIDUID
  
C425EDB0B83699C89BDA3D02B25C53BA:FG=1
  
.hao123.com
  
/
  
1548337791
  
##############################
  
hz
  
0
  
.www.hao123.com
  
/
  
None
  
##############################
  
ft
  
1
  
www.hao123.com
  
/
  
1516809599
  
##############################
  
v_pg
  
normal
  
www.hao123.com
  
/
  
None
  
##############################
  你只要获得了登陆页的cookies,你就可对网站进行合理的请求和访问了。
  使用已知cookie信息,如何访问网站:
import requests  
url = 'http://httpbin.org/cookies'
  
r = requests.get(url, cookies={'key1': 'value1', 'key2': 'value2'})
  
print(r.text)
  结果:
{  
    &quot;cookies&quot;: {
  
    &quot;key1&quot;: &quot;value1&quot;,
  
    &quot;key2&quot;: &quot;value2&quot;
  
    }
  
}
  请求到我的IP地址:
import requests  
url = &quot;http://2017.ip138.com/ic.asp&quot;
  
s = requests.session()
  
r = s.get(url=url)
  
print (r.encoding)
  
r.encoding = &quot;gbk&quot;
  
print (r.text)
  代理访问:
  采集时为避免被封IP,经常会使用代理。
  requests也有相应的proxies属性。
  西刺代理
import requests  
proxies = {
  
&quot;http&quot;: &quot;http://139.208.187.142:8118&quot;
  
}
  
r1 = requests.get(&quot;http://2017.ip138.com/ic.asp&quot;, proxies=proxies)
  
r1.encoding = &quot;gbk&quot;
  
print (r1.text)
  请求结果:
<html>  
<head>
  
<meta http-equiv=&quot;content-type&quot; content=&quot;text/html; &quot;>
  
<title> 您的IP地址 </title>
  
</head>
  
<body style=&quot;margin:0px&quot;><center>您的IP是:[139.208.187.142] 来自:吉林省延边朝鲜族自治州 联通</center></body></html>
  如果代理需要账户和密码,则需这样:
proxies = {  
    &quot;http&quot;: &quot;http://user:pass@10.10.1.10:3128/&quot;,
  
}
  requests的中文乱码问题:
import requests  
param = {&quot;key1&quot;: &quot;hello&quot;, &quot;key2&quot;: &quot;world&quot;}
  
url = 'https://www.baidu.com/'
  
r = requests.get(url=url)
  
print(r.encoding)              #ISO-8859-1默认使用的是这个
  
r.encoding = &quot;utf-8&quot;
  
print(r.text)
  这样就可以正常显示了
  总结:
  Requests给你提供的所有接口,在传输数据的时候,都可以以key:value的形式进行传输,这个也是为什么特别使用requests的原因
  如果你使用urllib,那么你就没有这么幸运了,很多事情都需要你自己去处理,并不可以直接通过dict的形式进行传输,需要进行装换。
  Urllib 模块
  在python2和python3上有差异
  在python2上,urllib和urllib2各有各的功能,虽然urllib2是urllib的包装、升级版,但是urllib2还是不能完全替代urllib,而在python3中,则全部封装成1个类:urllib
python2:  
import urllib
  
import urllib2
python3:  
import urllib
  Request方法:
import urllib.request  
urllib.request.Request(url, data=None, headers = {}, method= None)
  先看看python2中的urllib2和urllib的区别
  (1)urllib2可以接收一个request对象,并以此可以来设置一个url的headers,但是urllib只可以接收一个url,这就意味着你不能通过urllib伪装自己的请求头。
  举例:
  python2中接收request对象:
urllib2.Request  python3中接收request对象:
urllib.request.Request()  python3 对这个方法重新进行了封装。
  (2)ullib模板可以提供运行urlencode的方法,该方法用于GET查询字符串的生成,urllib2不具备这样的功能,而且urllib.quote等一系列qoute和unquote功能没有被加入urllib2中,因此有时也需要urllib的辅助。这就是为什么有时候urllib和urllib2一起使用的原因。(quote 是用来给url转码的)
  举例:
  python2中使用urllib.encode
data = {&quot;key1&quot;:&quot;hello&quot;, &quot;key2&quot;:&quot;world&quot;}  
d = urllib.encode(data)
  作用:等同于域名后面的参数 www.**.com?key1=hello&key2=world
  python3中使用parse.urlencode
from urllib import parse  
import urllib.request
  
url = &quot;www.hao123.com&quot;
  
data = {&quot;key1&quot;:&quot;hello&quot;, &quot;key2&quot;:&quot;world&quot;}
  
ndata = parse.urlencode(data) #将数据转化成一个字典形式
  
print (ndata)
  
#打印结果:key1=hello&key2=world
  
#继续往下:
  
req = urllib.request.Request(url=url, data=ndata.encode(&quot;utf-8&quot;))
  
res = urllib.request.urlopen(req)
  
print (res.read().decode(&quot;utf-8&quot;))
  【注意】:urlencode()主要作用就是将url附上要提交的数据。Post的数据必须是bytes或者iterable of bytes,不能是str,因此需要进行encode()编码
  方法解释:
urllib.request.urlopen(url, data=None, timeout=None)  
url    需要打开的网站
  
data    psot提交的数据
  
Timeout       网站访问的超时时间
  但是没法伪装我们的头信息
from urllib import request  
req = request.Request(url, headers=headers, data=data)
  
html = request.urlopen(req).read()
  如果不自己添加信息,只需要加头信息,即添加一个字典形式的头信息即可访问,如下:
... ...  
headers = {&quot;User-Agent&quot;:
  
&quot;Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36&quot;}
  
req = urllib.request.Request(url=url, headers=headers)
  
res = urllib.request.urlopen(req)
  
print (res.read().decode(&quot;utf-8&quot;))
  分享链接:时下流行的浏览器User-Agent大全
  http://blog.csdn.net/u012175089/article/details/61199238
  同理,python2同样可以实现添加头信息,请求页面:
import urllib  
import urllib2
  
headers = {&quot;User-Agent&quot;:
  
&quot;Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36&quot;}
  
url = &quot;https://www.qiushibaike.com&quot;
  
req = urllib2.Request(url, headers=headers)
  
res = urllib2.urlopen(req)
  
print (res.read())

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-548153-1-1.html 上篇帖子: python里常用的函数类型 下篇帖子: Python中def function(*args)用法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表