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. PyCharm 项目删除

    Pycharm 删除项目具体操作如下: 1.选择菜单 File   close project 2.选择要删除的项目右上角选择× 3.找到项目所在目录,删除相应文件夹 之后再次打开pycharm 发现 ...

  2. yii2修改默认控制器

    ---------------------------------- 默认的控制器为site,修改文件 vendor\yiisoft\yii2\web\Application.php public $ ...

  3. nginx unit PHP

    2018-12-26 14:20:33 星期三 综述: nginx unit php 的关系: nginx -> 转发请求到 8300端口 -> unit 转发 8300 收到的请求 -& ...

  4. 奇yin技巧

    关于一些奇yin技巧 关于删除字符串中的一些字串,并且考虑新的字串 例题:luogu4824 luogu3121 方法:开一个栈记录,发现字串后剪去字串长度. for(int i=1;i<=le ...

  5. C# Bitmap生成base64码

    public static string ImgToBase64String(Bitmap bmp) { try { MemoryStream ms = new MemoryStream(); bmp ...

  6. Django组件-cookie与session

    一.会话跟踪技术 1.什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而 ...

  7. listagg within group

    oracle 多行合并成一行: listagg within group 可以和递归方法一起使用查询路径: 例如: SELECT LISTAGG(t.FOLDER_NAME, '/') WITHIN ...

  8. FreeRTOS 启动进程调度后,程序卡死的部分原因分析。

    现象:1,RTOS  使用时 系统卡启动文件               B       .处. 原因分析:该种情况是由于定义开启了中断,但是未开启中断处理服务.程序执行到中断响应式无对应的程序响应 ...

  9. 微信H5支付开发(maven仓库版)

    官方文档:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_1 开发之前确认开通了H5支付功能 一.安装微信sdk 二.创建config ...

  10. .net core ef 通过dbfirst方式连接sql server数据库

    1. 创建基于.net core 的项目(过程略) 2. 使用nuget添加引用 Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore ...