cookie
 
        我们访问网页是通过http协议进行的,而http协议是一个无状态协议(无法维持会话之间的状态),比如我们登录一个网站成功后访问另一个网页,那么登录状态就会消失,十分不方便。而我们可以通过Cookie保存会话信息,将会话信息保存在客户端,或者用session保存会话信息在服务器端。但是服务器端会给客户端发送sessionID等信息,这些信息一般保存在Cookie中,大部分时候我们都要用到Cookie,而爬虫中我们可以通过Cookie保持登录状态进行内容爬取。
 
Cookiejar实战精析
    注意:python3中使用Cookiejar库进行处理,而在python2中可以使用Cookielib库进行处理。
    现在我们登录ChinaUnix论坛,http://bbs.chinaunix.net
 
我们先注册一下,然后我们可以通过Fiddler工具进行分析,不过我们现在先使用F12调出调试界面,登录输入用户名密码,点击登录,观察调试界面。在NetWork下找到登录Request URL字段得到POST表单网址http://bbs.chinaunix.net/member.php?mod=logging&action=login&logsubmit=yes。(书中这样写的,但是现在网页自动跳转了,我没找到。。直接用了书上的可以用。)
 
 
 
import urllib.request
import urllib.parse
import http.cookiejar
#这里填写登录成功的url,这里的loginhash是书上的。这里用肯定不行,这里得在登录页面拿到才行
url="http://bbs.chinaunix.net/member.php?mod=logging&action=login&logsubmit=yes&loginhash=L68q"
postdata=urllib.parse.urlencode({
    #这里填写用户名密码,自己填自己的吧
    "username":"yang",
    "password":"1234567890"
}).encode('utf-8')
req=urllib.request.Request(url,postdata)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36')
#创建CookieJar对象
cjar=http.cookiejar.CookieJar()
#使用HTTPCookieProcessor创建cookie处理器,并以其为参数opener为参数
opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))
#将opener安装为全局
urllib.request.install_opener(opener)
file=opener.open(req)
data=file.read()
file=open("D:/crawler/9.html","wb")
file.write(data)
file.close()
url2="http://bbs.chinaunix.net"
data2=urllib.request.urlopen(url2).read()
fhandle=open("D:/crawler/10.html","wb")
fhandle.write(data2)
fhandle.close()
这个代码我还没有弄成功,先放在这里吧。
 
 
 
 
接下来开始手写爬虫实战
 
图片爬虫实战
        首先我们先实现一个简单的爬虫,我们打开京东首页www.jd.com
进入手机分类商品http://list.jd.com/list.html?cat=9987,653,655,我们点击下一页发现网址变了,
 
可以发现这里是使用get方法请求的,如何自动爬取其他页的情况呢?我们可以使用for循环每次循环后把page字段加1,即自动切换到下一页,之后我们要获取对应的图片,使用正则表达式匹配源码中的图片的链接部分,然后通过urllib.request.urlretrieve()方法将对应的链接保存在本地。
我们要先过滤点信息走,我们右击查看源代码:我们要找到一个唯一的标识,并且包含要爬取得内容,以及尽量少的无关信息。这里我们找到<div id = "plist">
这是开头的部分,结尾的标识<div class="page clearfix"满足要求
    这样过滤就是:用正则表达式只取这两个标识中间的内容:patl='<div id="plist".+?<div class="page clearfix">'
 
import re
import urllib.request
import urllib.error
 
def craw(url,page):
    html1=urllib.request.urlopen(url).read()
    html1=str(html1)
    pat1='<div id="plist".+?<div class="page clearfix">'
    result1=re.compile(pat1).findall(html1)
    result1=result1[0]
    pat2='<img width="220" height="220" data-img="1" src="//(.+?\.jpg)">'
    imagelist=re.compile(pat2).findall(result1)
    x=1
 
    for imageurl in imagelist:
        imagename="D://crawler/image/image"+str(page)+str(x)+".jpg"
        imageurl="http://"+imageurl
        try:
            urllib.request.urlretrieve(imageurl,filename=imagename)
        except urllib.error.URLError as e:
            if hasattr(e,"code"):
                x+=1
            if hasattr(e,"reason"):
                x+=1
        x+=1
 
for i in range(1,15):
    url="http://list.jd.com/list.html?cat=9987,653,655&page="+str(i)
    craw(url,i)
 
 
这样就爬取成功了,我亲测可以。
 
 
今天实在是懒就写这么多了
 
 
 
此文是我在学习《精通Python网络爬虫》(韦玮著)的总结,纯手打。
 

python爬虫第五天的更多相关文章

  1. Python爬虫进阶五之多线程的用法

    前言 我们之前写的爬虫都是单个线程的?这怎么够?一旦一个地方卡到不动了,那不就永远等待下去了?为此我们可以使用多线程或者多进程来处理. 首先声明一点! 多线程和多进程是不一样的!一个是 thread ...

  2. Python爬虫实战五之模拟登录淘宝并获取所有订单

    经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 温馨提示 更新时间,2016-02-01,现在淘宝换成了滑块验证了 ...

  3. Python爬虫入门五之URLError异常处理

    大家好,本节在这里主要说的是URLError还有HTTPError,以及对它们的一些处理. 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的 ...

  4. 转 Python爬虫入门五之URLError异常处理

    静觅 » Python爬虫入门五之URLError异常处理 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的服务器 服务器不存在 在代码中, ...

  5. Python爬虫(十五)_案例:使用bs4的爬虫

    本章将从Python案例讲起:所使用bs4做一个简单的爬虫案例,更多内容请参考:Python学习指南 案例:使用BeautifulSoup的爬虫 我们已腾讯社招页面来做演示:http://hr.ten ...

  6. Python爬虫利器五之Selenium的用法

    1.简介 Selenium 是什么?一句话,自动化测试工具.它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Selenium 的 ...

  7. Python爬虫【五】Scrapy分布式原理笔记

    Scrapy单机架构 在这里scrapy的核心是scrapy引擎,它通过里面的一个调度器来调度一个request的队列,将request发给downloader,然后来执行request请求 但是这些 ...

  8. 5.Python爬虫入门五之URLError异常处理

    大家好,本节在这里主要说的是URLError还有HTTPError,以及对它们的一些处理. 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的 ...

  9. python 爬虫(五)

    下载媒体文件 I 使用urllib.request.urlretrieve方法可以下载文件存为指定文件 from urllib.request import urlretrieve from urll ...

随机推荐

  1. k8s部署etcd数据库集群

    ⒈下载 https://github.com/etcd-io/etcd/releases ⒉解压 tar -zxvf etcd-v3.3.12-linux-amd64.tar.gz ⒊移动可执行文件及 ...

  2. [Kubernetes]关于 Kubernetes ,你想要的,都在这儿了

    陆陆续续,关于 Kubernetes 写了有 20+ 篇文章了. 今天这篇文章来一个整合,从实践到理论,可以按需查看(我是按照博客发表时间来排序的,如果后续有想要更新的内容,也会及时更新到这篇文章中) ...

  3. 从基本理解到深入探究 Linux kernel 通知链(notifier chain)【转】

    转自:https://blog.csdn.net/u014134180/article/details/86563754 版权声明:本文为博主原创文章,未经博主允许不得转载.——Wu_Being ht ...

  4. Apollo与ROS

    Apollo项目基于ROS,但是对其进行了改造,主要包括下面三个方面: 通信性能优化 去中心化网络拓扑 数据兼容性扩展 通信性能优化 自动驾驶车辆中包含了大量的传感器,这些传感器可能以非常高频的速度产 ...

  5. python学习第31天

    # 操作系统的发展历程 # 主要的人机矛盾是什么 : CPU的使用率 # 输入\输出数据和CPU计算没有关系 # 操作系统是怎么进化的 # 传统的纸带输入 # 磁带的存储降低了输入输出数据占用的时间, ...

  6. 在js中获取上传图片的宽度和高度

    Html: <input type="file" id="MapUploadTd" onchange="getMapPictureSize(th ...

  7. OpenCV-Python : 直方图

    啥叫直方图 直方图简单来说就是图像中每个像素值的个数统计,比如一副灰度图中像素值为0的有多少个,1的有多少个... 在计算直方图之前,先了解几个术语: dims:要计算的通道数,对于灰度图dims=1 ...

  8. [转] Vue中异步错误处理

    一般在一个项目开始之前,我们一般会对现有的框架做一定功能上的丰富,比如对ajax请求功能的二次封装,封装的功能可能包含了:通用错误处理,请求过滤,响应过滤等等.如果我们封装的函数叫request,那么 ...

  9. Flink on yarn的配置及执行

    1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算.Flink可以自己搭建集群模式已提供为庞大数据的计算.但在实际应用中.都是计算hdfs上的 ...

  10. 【HTTP】---HTTP状态码详解

    https://en.wikipedia.org/wiki/List_of_HTTP_status_codes 1.百科名片 HTTP状态码(HTTP Status Code)是用以表示网页服务器HT ...