python3.6。爬虫学习入门笔记

爬虫

  • 前提知识:
    • URL
    • HTTP协议
    • web前端,html css js
    • ajax
    • re,Xpath
    • XML

爬虫的定义

  • 百度上详细的介绍
  • 三大步骤:
    • 下载信息
    • 提取正确的信息
    • 根据一定的规则自定跳到另外的网页上执行的两步内容
  • 爬虫分类
    • 通用爬虫
    • 专用爬虫
  • pyhon网络包简介
    • 2.X ----
    • 3.x----urllib,urllib3,httplib2,requests

urllib

  • 包含模块
    • urllib.request:打开和读取模块的urls
    • urllib.error:包含urllib.request产生的常见错误,使用try捕捉
    • urllib.parse: 包含即系url的方法
    • urllib.robotparse:解析robots.txt文件
    • 案例V1
  • 网页编码问题解决
    • chardet 可以自动检测网页的编码格式,但是可能有误
    • 需要安装 conda install chardet
    • 案列V2
  • urlopen的返回项
    • geturl:返回请求对象
    • info:请求返回对象的meta对象
    • getcode:返回对象的请求状态码
  • request.code
    • 访问网络的两种方法
      • get:实际上利用参数给服务器传递信息,参数用dict,然后用parse编码
      • post:一般使用的服务器传递参数的方式
        • post是把信息自动加密
        • 如果使用post信息需要用到data参数
        • 使用post意味着Http的请求头可以需要更改:
          • Content-Type:applocation/x-www.from-urlencode
          • Content-Length:数据长度
          • 也就是说,一旦更改请求方法,需要注意其他请求头部信息相适应
        • urllib.parse,urlencode可以将上字符串改为网络协议的
        • 案例V4
      • 案例V4
      • 为了更多的设置我们的请求信息,单纯的使用urlopen已经不是很好用了
      • 需要利用request.Request()类
      • 案例V6
    • urllib.error:
      • 产生原因:
        • 没网
        • 服务器链接失败
        • 不知道指定的服务器
        • 是osError的子类
        • 案例V7
    • HTTPError:是URLError的一个子类
    • 案例V8
    • UserAgent
      • UserAgent:用户代理简称UA,属于Headers的一部分,服务器通过UA来判断访问者的身份
    • 设置UA可以使用
    • heads
    • add_heads
    • 案例V9
  • ProxyHandler 代理服务器
    • 使用代理IP,爬虫的常用手段
    • 获取代理服务器的地址:
      • www.xicidaili.com
      • www.goubanjian.com
    • 代理用来隐藏真实访问汇总,代理也不允许频繁访问某一个固定网站,所以代理一定要很多
    • 基本使用代理的设置:
      • 设置代理地址
      • 创建ProxyHandler
      • 创建Opener
      • 安装Opener
      • 案例V10

cookie & session

  • 由于http协议的无记忆性,人们为了弥补这个缺憾,所采用的一个补充协议
  • cookie是发送给用户的一半信息,session是保存在服务器的另一半的信息,用来记录信息
  • cookie和session的区别:
    • 存放位置不同
    • cookie不安全
    • session会在服务器上一段时间,会过期的
    • 单个cookie保存不超过4K,很多浏览器限制一个站点最多为20个
  • session 存放位置
    • 存放在服务器
    • 一般情况,session是存放在数据库中
  • cookie 登陆
  • 模拟登陆人人网
  • V11
  • 使用Cookie登陆
    • 直接把cookie复制下来,然后手动放入请求头
    • V12
    • http模块包含我们可以使用的cookie的模块,自动使用cookie
      • CookieJar
        • 管理存储Cookie,向传出的http请求添加Cookie
        • cookie存储在内存里,CookieJar实例回收后cookie将消失
      • FileCookieJar
        • 使用文件管理cookie
        • filename是保存Cookie的文件
      • MozillaCookieJar
        • 创建Mozilla浏览器Cookie.txt兼容的FileCookieJar实例
      • LwqCookieJar
        • 创建于libwww-perla标准兼容的Set-Cookie3格式的FileCookieJar
      • 他们的关系是:Cookie Jar–>FileCookieJar–>MozillaCookieJar&LwqCookieJar
      • 利用Cooke Ja访问人网
      • 案例13
        • 自动使用Cookie登陆
        • 打开登陆界面后自动通过账户密码登陆
        • 自动提取反馈的Cookie
        • 利用提取的Cookie登陆隐私页面
        • handler是Headler的实例
          • 常用的有
          • 创建cookie实例
        • cookie = cookiejar.CookieJar()
        • 生成cookie的管理器
        • cookie_handler = request.HTTPCookieProcessor(cookie)
      • 创建http请求管理器
        • http_handler = request.HTTPHandler()
      • 生成http管理器
        • https_handler = request.HTTPSHandler()
      • 创建请求管理器
        • opener = request.build_opener(http_handler,https_handler,cookie_handler)
      • 创建handler后,使用opener打开,打开后相应的handler进行使用
      • cookie作为一个变量打印出来
      • 案例V14
      • cookie属性
        • name :名称
        • value:值
        • domain :可以访问此cookie的域名
        • path:看可以访问的cookie的页面路经
        • expirse:过期信息
        • size:大小
        • http字段
      • cookie的保存—FileCookieJar
        • 案例15
      • cookie的读取
        • 案例16

SSL

  • SSL证书就是指 遵守SSL安全套结层协议的服务器数字证书
  • CA(CertifacateAuthority)是数字认证中心
  • 遇到不信任的SSL证书处理方法
  • 案例V17

JS加密

http://tool.oschina.net

  • 有的反爬虫策略采用js对于传输的数据进行加密通常是md5值
  • 经过加密就是密文但是,加密函数或者过程一定是在浏览器完成,也就是将JS的代码暴露给使用人
  • 通过阅读加密算法,就可以模拟出加密过程,从而进行破解
  • 案例V18
  • 使用V18和V19进行对比
  • 记住JS一定被保存在本地,然后去找加密算法

AIAX

  • 实质就是一段js代码,是我们的网页进行异步请求
  • 一定会有url,请求方法
  • 使用一般的json格式
  • 案例20
  • 一般GET方式使用的参数的形式发送
  • post使用的是form的方法,也方便于加密

Requests 模块宪哥人类的模块

  • 继承了urlllib的所有方法
  • 底层使用了urllib3
  • 开源
  • 有中文的地址
  • 安装 pip install request
  • get请求:
    • request.get(url)
    • request.request(‘get’,url)
    • 可带有headers和parmas参数
    • 案例21
  • get的返回内容
    • 案例22
  • post
    • rsp = resquest.post(url,data)
    • 案例23
    • data,headers要求是dict类型
  • proxy 代理
    • proxy = {
      “http”:“地址”
      “HTTPs”:‘地址’
      }
      rsp = requests.request(“get”,“http::…”,proxies=proxy)
  • 用户验证
    • 代理验证
      • 可能使用的HTTP basic Auth可以这样
      • 格式就是用户名:密码@代理地址:端口号
      • proxy = {“http”:“china:[email protected]:8888”}
      • res = request.get(“http://www.baidu.com”,proxies=proxy)
  • web 客户端验证
    • 如过遇到需要验证就是添加auth=(用户名,密码)
    • autu=(“用户名”,‘’密码"’)
    • res = request.get(“http://www.baidu.com”,auth=autu)
  • cookie
    • request可以自动处理cookie信息
      • rsp = requests.get(url)
      • 如果对方服务器传送过来cookie信息,则可以考虑反馈的cookie属性得到的,返回一个cookie的实例
      • cookieJar = rsp.cookies
      • 可以将cookie转换成字典
      • cookiedict = requests.utils.dict_from_cookiejar(cookieJar)
  • session
    • 和服务器上的session不一样啦
    • 模拟一次会话,从客户端历览器开始链接服务器,到客户端断开
    • 能让我我们跨请求时保持某些参数,比如说在同一个session实例发出的有的请求之间cookie
      • 创建session对象时候,可以保存cookie值
      • ss = requests.session()
      • headers = {“User-Agent”:“XXXXXXx”}
      • data = {“name”:“XXXXXXx”}
      • 此时有创建的session管理请求,负责发出请求
      • ss.post(“http://www.baidu.com”, data=data,headers=headers)
      • rsp = ss.get(“XXXXXX”)
  • https验证SSL证书
    • 参数verify负责表示是否需要SSL 证书,默认需要TRUE
    • 如果不需要SSL证书验证,则false
      • rsp = requests.get(“https:”,verify=false)

爬虫数据的处理

  • 结构数据:先有结构,再谈数据
    • json文件
      • json Path
      • 转换成相应的Python类型操作(json类)
    • XML
      • 转换成python的类型(xmtodict)
      • Xpath
      • CSS选择器
      • 正则
  • 非结构数据:先有数据,再谈结构
    • 文本
    • 电话号码
    • 邮箱地址
    • 通常处理这种数据时使用正则表达式
    • Html文件
      • 正则
      • Xpath
      • CSS选择器

正则表达式

  • 一套股则,可以在字符串文本中搜查替换等等
  • 案例24,基本的正则的使用规则
  • 案例match的基本使用
  • 常用的方法:
    • match :从开始位置查找,只匹配一次
    • search: 从任何位置开始查找,一次匹配
    • findall:全部查找,返回列表
    • finditer:全部匹配,返回迭代
    • spilt:分割字符,返回列表
    • sub:替换
  • 匹配中文
    • 匹配Unicode范围主要在【u4e00-u9fa5]
    • 案例V27
  • 贪婪于非贪婪
    • 贪婪模式:在整个表达式或者匹配成功的前提下,尽可能多的匹配
    • 非贪婪模式:尽可能少的匹配

XML

  • XML(ExtensibilityleMarkLanguage)
  • http://www.w3cschool
  • 案例V28
  • 概念;父节点,子节点,先辈节点,兄弟节点,后代节点

Xpath

  • Xpath(XML Path language)
  • w3school
  • 常用路径表示式

lxml库

  • 案例29
  • 解析html
  • 文件读取 html
  • etree和xpath配合使用
  • 案例V31

CSS选择器 beatifulsoup4

几种工具的比较

- 正则:快,不好用不用安装

- beatifulsoup 慢使用简单

- lxml: 比较快
  • 使用beatifulsoup的案例
  • 案例V32

beautifulSoup

  • 四大对象
    • Tag
    • NavigableString
    • Beautifulsoup
    • Comment
  • Tag
    • 对应HTML标签
    • 通过soup,tag_name()
    • tag两个重要
      • name
      • 属性
    • 案例V33
  • NavigableString
    • 对应内容值
  • Beautifulsoup
    • 表示一个文档的内容
  • comment
    • 特殊的NavigableString对象
    • 对其输出,则内容不包括注释符号
  • 遍历对象
    • contents: tag的子节点列表的方式输出
    • children:子节点义迭代的形式返回
    • descendants:所有孙节点、
    • string
    • 案例34
  • 搜索文档对象
    • find_all(name,arrts,recursive,text,** kwaargs**)
    • name:按照字符串搜索,可以收入的内容
      • 字符串
      • 正则表达式
      • 列表
    • keywortd参数,表示属性
    • text :对应tag的文本值
  • CSS选择器

你可能感兴趣的:(轻量级爬虫,python爬虫)