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

[经验分享] 54. Python 爬虫(3)

[复制链接]
发表于 2018-8-7 09:00:00 | 显示全部楼层 |阅读模式
  【基于python3的版本】
  rllib下载:
  当不知道urlretrieve方法,写法如下:
from urllib import request  
url = "http://inews.gtimg.com/newsapp_match/0/2711870562/0"
  
req = request.Request(url)
  
res = request.urlopen(req)
  
text = res.read()
  
with open("2.jpg", "wb") as f:
  
    f.write(text)
  知道urlretrieve方法后,如下:
from urllib import request  
url = "http://inews.gtimg.com/newsapp_match/0/2711870562/0"
  
request.urlretrieve(url, "1.jpg")
  urllib的代理(对比Requests的代理方法):
from urllib import request, parse  
data = {
  
    'first': 'true',
  
    'pn': 1,
  
    'kd': 'Python'
  
}
  
url = 'http://2017.ip138.com/ic.asp'
  
# 设置proxy
  
proxy = request.ProxyHandler({'http': '223.241.78.186:8010'})
  
# 挂载opener
  
opener = request.build_opener(proxy)
  
# 安装opener
  
request.install_opener(opener)
  
data = parse.urlencode(data).encode('utf-8')
  
page = opener.open(url, data).read()
  
print(type(page))
  
print(page.decode("gbk"))
  结果:
DSC0000.jpg

  urllib的cookie使用:
  如果已经知道cookie,或者说你是通过抓包获取到的cookie,直接放在header的信息中直接登陆就可以;
  登陆京东网站的cookie信息和不登录京东的cookie信息是不一样的,你可以登录京东以后,抓取cookie的信息,然后访问任何网站就可以了。
import urllib.request  
url = "http://www.jd.com"
  
header = {"user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
  
          "cookie": "xxxxxxxxx(登录过得用户cookie)"
  
         }
  
req = urllib.request.Request(url=url, headers=header)
  
res = urllib.request.urlopen(req)
  
text = res.read().decode("utf-8")
  
print (text)
  执行结果:
DSC0001.jpg

  学习:
  urllib的cookie相关的类
  在python2中cookie的类叫做:import cookielib
  在python3中cookie的类叫做:import http.cookiejar
  opener的概念
  当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例)。在前面,我们都是使用的默认的opener,也就是urlopen。
  urlopen是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是url,data,timeout。
  如果我们需要用到Cookie,只用这个opener是不能达到目的的,所以我们需要创建更一般的opener来实现对Cookie的设置。
  终端输出cookie对象
import urllib.request  
import http.cookiejar
  
url = "http://www.hao123.com"
  
req = urllib.request.Request(url)
  
cookieh = http.cookiejar.CookieJar()  #保存了cookie对象
  
handler = urllib.request.HTTPCookieProcessor(cookieh)
  
#绑定请求,也就是说在一次请求中,只要你进行访问,他就会保存下来你的cookie信息
  
opener = urllib.request.build_opener(handler)
  
r = opener.open(req)
  
print(cookieh)
  打印cookie对象:
<CookieJar[<Cookie BAIDUID=E9770FE732D04AB585E90684F0E307ED: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/>]>  将Cookie保存到文件中:
import urllib.request  
import http.cookiejar
  
url = &quot;http://www.hao123.com&quot;
  
req = urllib.request.Request(url)
  
cookieFileName = &quot;cookie.txt&quot;
  
#文件cookie
  
cookieh = http.cookiejar.MozillaCookieJar(cookieFileName)
  
handler = urllib.request.HTTPCookieProcessor(cookieh)
  
opener = urllib.request.build_opener(handler)
  
r = opener.open(req)
  
print(cookieh)
  
cookieh.save()
  执行:
  保存在了文件cookie.txt中
DSC0002.jpg

  Cookie从文件中读取cookie信息并访问:
import urllib.request  
import http.cookiejar
  
cookie_filename = 'cookie.txt'
  
cookie = http.cookiejar.MozillaCookieJar(cookie_filename)
  
cookie.load(cookie_filename, ignore_discard=True, ignore_expires=True)
  
print(cookie)
  
url = &quot;http://www.hao123.com&quot;
  
req = urllib.request.Request(url)
  
handler = urllib.request.HTTPCookieProcessor(cookie)
  
opener = urllib.request.build_opener(handler)  # 利用urllib2的build_opener方法创建一个opener
  
response = opener.open(req)
  
print(response.read().decode(&quot;utf-8&quot;))#解决乱码的问题

运维网声明 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-547956-1-1.html 上篇帖子: Python学习入门基础教程(learning Python)--1.2.1 Python输出语句print基本使用 . 下篇帖子: Python简单计算器实现(面向对象)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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