常用获取数据的方式?

  1. 企业产生的数据
  2. 数据平台购买的数据
  3. 政府、机构公开的数据
  4. 数据管理公司的数据

爬虫的概念?

网络爬虫又称为网页蜘蛛、网络机器人是一种按照一定的规则自动请求万维网网站并提取网络数据程序或脚本
这里数据是指互联网上公开的并且可以访问到的网业信息

爬虫的分类

  1. 按照使用场景分为通用爬虫和聚焦爬虫
    1.1 通用爬虫又被称为全网爬虫
    2.1 聚焦爬虫又被称为主题网络爬虫
  2. 按照爬取形式又分为累积式爬虫和增量式爬虫
    2.1 增量式爬虫只会在需要时爬行新产生或发生变更页面,并不会重新下载没有发生变化的页面

爬虫爬取步骤

  1. 选取一些网页、将这些网页的链接地址作为种子URL
  2. 将这些种子URL放入到带爬取的URL队列中
  3. 爬虫从待爬取的URL队列中依次读出URL、并通过DNS解析URL、把链接地址转换为网站服务器所对应的IP地址
  4. 将IP地址和网页对应路径名称交给网页下载器、网页下载器负责页面内容的下载
  5. 网页下载器将相应的网页内容下载到本地
  6. 将下载到本地的网页存储到页面库中, 等待建立索引等后续处理;于此同时, 将下载过的网页的URL放入到以爬取的URL队列中,这个队列记载了爬虫系统已经下载过的网页URL,以避免重复下载
  7. 对于下载过的网页, 从中抽取出所包含的链接信息, 并在已爬取URL中检查其中是否被爬取过, 如果还没被爬取过,则将这个URL放入到待爬取的URL队列中
  8. 下载被放入到待爬取URL队列中的URL对应的网页, 如此重复(3)~ (7),形成循环,知到待爬队列为空

通用爬虫网页的分类

  1. 已下载网页
  2. 已过期网页
  3. 待下载网页
  4. 可知网页
  5. 不可知网页

robots.txt文件

  1. 它会限定网络爬虫的访问范围,会保护没有被密码保护的页面
  2. 它使用"#"进行注释,它既可以包含一条记录,又可以包含多条记录
  3. User-Agent:它用于描述搜索引擎的名字
  4. Disallow: 改值用于描述不希望被访问到的一个URL,可是完整路径,也可是不完整路径
  5. Allow: 该项的值用于描述希望被访问到的一组URL
  6. 它只是一种建议, 没有实际的约束力,网络爬虫可以选择不遵守这个协议

防爬虫的策略

  1. 设置User-Agent
  2. 使用代理IP
  3. 降低访问频率
  4. 验证码限制

浏览网页的过程

  1. 浏览器通过DNS服务器查找域名对应的IP地址
  2. 向IP地址对应的Web服务器发送请求
  3. Web服务器响应请求, 发回HTML页面
  4. 浏览器解析HTML内容, 并显示出来

统一资源定位符

  1. 互联网上的每个文件都有唯一的URL
  2. URL地址由协议头、服务器地址、文件路径组成
  3. HTTP的默认端口是80 HTTPS是443
  4. 一个域名必须对应一个IP地址 一个IP地址可能对应零到多个域名

客户端HTTP请求格式

  1. HTTP协议的请求消息由:请求行、请求头部、 空行、 和请求数据四部分组成

重要的请求报头:
User-Agent表示客户端身份信息
Accept:指定浏览器或其他客户端可以接受的文件类型。例如:Accept:text/html 表示客户端希望接受html文本
Referer:表示产生请求的网页来自那个URL
Accept-Encoding:指出浏览器可以接受的编码方式 例如:gzip identity
Accept-Charset:指出浏览器可以接受的字符编码

  1. 常见的字符编码:
  2. iso-8859-1:英文浏览器默认的编码
  3. gb2312:标准的简体中文字符集
  4. utf-8:可以解决多种语言文本显示问题

服务端HTTP响应格式

  1. 响应报文由四部分组成:状态行、响应报头、空行、响应正文

响应状态码

  1. 200表示请求成功
  2. 404表示服务器无法找到请求页面
  3. 403表示服务器拒绝访问,权限不够
  4. 500表示请求未完成

urllib库概述

  1. urllib库是python内置的HTTP请求库
  2. urllib库包含四大模块:

(1) urllib.request:请求模块
(2) urllib.error:异常处理模块
(3) urllib.parse:URL解析模块
(4) urllib.rebotparser:rebots.txt解析模块

  1. 分析urlopen()方法

3.1 参数分析urllib.request.urlopen(url, data=None, [timeout, ]*,cafile=None,capath=None, cadefault=False, context=None)
url:可以是URL地址的字符串, 也可以是一个urllib.request对象
data:用来指明向服务器发送请求的额外信息,data参数必须是一个bytes对象
‘’’

data参数的使用

import urllib.request
import urllib.parse
data = bytes(urlloib.parse.urlencode({‘world’:‘hellow’}).encode(‘utf-8))
reponse = urllib.request.urlopen(‘http://httpbin.org/post’, data=data)
print(response.read())
‘’’
4. 构造Request对象
‘’’
import urllib.request

将url作为Request()方法的参数,构造并返回一个Request对象

request = urllib.request.Request(‘http://baidu.com’)

将Request对象作为urlopen()方法的参数,发送给服务器并接受响应

response = urllib.request.urlopen(request)

使用read()方法读取网页内容

html = response.read().decode(‘UTF-8’)
print(html)
‘’’
‘’’

request对象案例

from urllib import request,parse
from fake_useragent import UserAgent
import urllib.request
ua = UserAgent()
headers = {
‘User-Agent’:ua.random
}
url = “http://httpbin.org/post”
dict_demo = {‘name’:“iction”}
data = bytes(parse.urlencode(dict_demo).encode(‘utf-8’))
request = request.Request(url, data=data, headers=headers)
response = urllib.request.urlopen(request)
html = response.read().decode(‘utf-8’)
print(html)
‘’’

URL编码转换
  1. 当传递URL包含中文或者其他特殊字符(例如:空格或""等)
    ‘’’
    编码
    import urllib.parse
    data = {
    ‘a’:‘传智博客’,
    ‘b’:‘黑马程序员’
    }
    result = urllib.parse.urlencode(data)
    print(result)
    解码
    import urllib.parse
    result = urllib.parse.unquote(‘a=%E4%BC%A0%E6%99%BA%E5%8D%9A%E5%AE%A2&b=%E9%BB%91%E9%A9%AC%E7%A8%8B%E5%BA%8F%E5%91%98’)
    print(result)
    ‘’’

处理GET请求

处理POST请求

添加Headers

  1. 通过Request.add_headers()添加headers
  2. 通过Request.get_headers()查看headers
  3. 通过response.code()可以查看响应状态码

网络异常

  1. HTTPError是URLError的子类

requests库概述

  1. requests是基于Python开发的HTTP第三方库,是requests在urllib的基础上进行了高度的封装,它不仅继承了urllib的所有特性, 而且还支持一些其他的特性
  2. requests库提供了如下常用的类:

(1) requests.Request:表示请求对象
(2) requests.Response:表示响应对象
(3) requests.Session:表示请求会话

Requests类的常用属性

  1. staus_code :响应状态码
  2. text:http响应内容的字符串形式
  3. encoding:设置编码格式
  4. apparent_encoding:自己分析编码格式
  5. content:二进制内容

结构化数据?

XML和JSON等

非结构化数据?

办公文档、文本、HTML、图像等

数据解析技术

  1. 针对文本的解析,有正则表达式
  2. 针对HTML/XML的解析,有XPath、Beautiful Soup 正则表达式
  3. 针对JSON的解析,有JSONPath
  4. 正则表达式,XPath和Beautiful Soup都能实现网页的解析
  5. JSON模块支持JSONPath语法的使用

xpath语法

xpath语法

Beautiful Soup概述

  1. Beautiful Soup包含四大对象

(1) bs4.element.Tag类:表示HTML中的标签
(2) bs4.element.NavigableString类:表示HTLML标签中的文本
(3) bs4.BeautifulSoup类:表示HTML DOM中的全部内容,支持遍历文档树和搜索文档树的大部分方法
(4) bs4.element.Comment类:表示标签内字符串的注释部分,是一种特殊的NavigableString类

  1. bs4解析器的选择顺序是lxml, html5lib, Python标准库
  2. 如果指定的解析器没有安装,那么Beautiful Soup对象会自动选择其他方案
  3. 目前只有lxml解析器支持XML文档, 如果没有安装lxml库,就无法得到解析后的对象

css选择器进行搜索

形式:[code] 选择器 {样式}[\code]
其中在{}之前的部分是"选择器",选择器指明了{}中样式的作用对象,也即样式

JSONPath与json模块

  1. json值可以是字符串 , 数字, 对象, 数组, 逻辑值, null
  2. 例如:{“name”:“XiaoHong”,“age”:18}

json模块的基本使用

  1. json.loads():把JSON格式字符串解码转换成Python对象
  2. json.dumps():把Python类型编码为JSON字符串,返回一个str对象
  3. json.load():读取文件中JSON形式的字符串元素,转换成Python类型
  4. json.dump():将Python内置类型序列化为json对象后写入文件

jsonpath简介

jsonpath语法

以上仅包含选择题部分,填空题请访问下面链接

爬虫期末考试笔记(填空题)

爬虫期末考试笔记(选择题)相关推荐

  1. 爬虫期末考试笔记(填空题)

    User-Agent表示用户代理,是HTTP协议中的一个字段 URL地址由协议头, 服务器地址, 文件路径三部分组成 搜索引擎是通用爬虫最重要的应用领域 ** 协议头指定使用的传输协议 ** 服务器地 ...

  2. java 期末考试笔记

    文章目录 输入输出流 字符流 字符流 + 缓冲流 字节输入输出流 + utf-8 面向对象 长方形求面积 Test类 长方形类 多线程 继承thread Test run Runnable接口 Tes ...

  3. 密码编码学与网络安全期末考试笔记

    文章目录 M 记忆的部分 1 计算机安全核心的三个目标:CIA 三元组 2 一次一密 OTP(one time password) 3 对称密码与非对称密码的对比 4 分组加密工作模式 5 AES(A ...

  4. 计算机组装与维修考试试卷,计算机组装与维修期末考试试卷..doc

    计算机组装与维修期末考试试卷. 组装与维修期末考试试卷 选择题 下列显卡接口中,能在一根线缆上同时传输高清晰.全数字的音频和视频信号的是() DVI B.S-VIDEO C.D-SUB D.HDMI ...

  5. 《金融学》期末考试考前笔记

    <金融学>期末考试考前笔记 前言 今天下午两点要考试了,顺一下金融学的知识点. 之前写了一下<金融学期末复习重点准备>,不过那时候不知道考试题型,不好针对性复习. 现在知道题型 ...

  6. java期末判断题题库_(java期末考试选择题题库.doc

    (java期末考试选择题题库 1.分析以下程序: 1)public class x{ 2)public static void main(String[]args){ 3)String ol=new ...

  7. 枯燥的寒假生活(一) python爬虫模拟登录whu老教务系统获取期末考试成绩(已失效 , 老教务系统增加了新的反爬, 老教务系统已停用)

    python模拟登录老教务系统(2021.6.24更新) 一.写在前面 之前用爬虫爬取的都是静态网页html中的内容,但是大多数时候需要动态处理网页爬取数据.因为学校出成绩太慢了,每次都自己打开浏览器 ...

  8. Oracle期末考试 复习笔记

    Oracle期末考试 复习笔记 复习提纲 引言 本部分旨在为大家介绍数据库及大型数据库相关的概念,需要大家掌握云计算概念. 云计算的应用及分类.云数据库.关系型数据库的基本常识. Oracle 12c ...

  9. 大一c语言学霸笔记图片,大一期末考试复习计划

    期末考试临近,最近很多同学都留言问成长君,该如何复习.下面小编就为大家整理两篇,望给你带来帮助. 一 如果你不想整个考试时期每天最多只能睡三个小时的话.期末考试一定要抱学霸大腿,学霸绝对是考试必备!! ...

最新文章

  1. 树莓派避障小车(python)
  2. 【运营】盘点2014,有哪些O2O名牌被撕。
  3. 河南彩民中奖3亿5千万
  4. Oracle查询一个用户的所有表的结构信息的SQL语句
  5. Linux Linux 集群
  6. 以后外卖还可以买手机了!饿了么与上海迪信通达成合作
  7. Mysql为什么多个大版本并行发布的个人理解
  8. TF-IDF算法的介绍
  9. Mantis1.2.19 在Windows 平台上的安装配置详解
  10. XPS数据分析问题收集及解答
  11. 汽车电子测试系统搭建
  12. CocosCreator物理引擎Demo源码分析(2)-tiled
  13. 红外通信红外编码—NEC协议
  14. android 模拟器加速,android开发怎么设置加速模拟器如真机运行
  15. 基于netty+websocket实现门户游客实时统计功能
  16. 修改apk显示或隐藏桌面图标
  17. Git GUI Here 设置成中文界面
  18. python查询员工信息表
  19. 《大话设计模式 C++版》
  20. 群响刘思毅:如何用 10 个月打造一个 3500 位操盘手的顶级社群

热门文章

  1. 向量空间中的基底和基变换以及坐标变换
  2. 蓝桥ROS云课→一键配置←f1tenth和PID绕圈
  3. Pytorch - 分布式通信原语(附源码)
  4. 北大2022计算机学院夏令营,2022保研夏令营:北京大学国家发展研究院夏令营活动...
  5. 关于MATLAB中直接计算cos90不等于0的解决办法
  6. Unity个人开发中的踩坑记录(混沌式更新)
  7. 大学本科毕业生如何免费进行论文查重
  8. LSP修复--浏览器被劫持
  9. python3中join和格式化的用法 ##16
  10. regexp_replace