爬虫入门笔记
爬虫概念
爬虫用途
搜索引擎
爬取图片
爬取网站公开信息......
爬虫分类
通用爬虫和聚焦爬虫
1:全网爬虫,爬取种子URL扩充到整个网络,为门户站点搜索引擎和大型Web服务提供商采集数据
2:主题网络爬虫:选择性的爬取那些与预先设定好的主题相关的页面
积累式爬虫和增量式爬虫
1:通过遍历的方式,规模庞大,但抓取的数据不会再随时间的更新而更新
2:在一定量的规模的基础上,更新已有集合中果实的网页,不重新下载没有变化的网页,但增加了爬行算法的复杂度和实现难度
表层爬虫和深层爬虫
1:表层网页,以超链接可以到达的静态页面为主构成的Web页面
2:大部分内容不能通过静态连接获取,隐藏在搜索表单之后的,只有提交一些关键词才能获取的Web页面
爬虫实现原理
1:通用爬虫:从一个或若干个初始网页的URL开始,在爬取页面的过程中,不断从当前页面抽取新的URL放入列队,直到满足系统的停止提条件
2:聚焦爬虫:网页分析算法过滤与主题无关的链接
robots.txt文件
通过一个符合robots协议的文件来告诉搜索引擎的哪些页面可以爬取,那些页面不能爬取
网页请求原理
浏览网页过程
统一资源定位符:
协议头:
File 访问本地计算机的资源
FTP 访问共享主机的资源
HTTP 超文本传输协议
HTTPS 安全的ssl加密传输协议,访问远程网络资源
Mailto访问电子邮件地址
最常用的是HTTP 与HTTPS
服务器地址和端口:
存放资源的服务器的主机名或IP地址
HTTP程序默认端口号80
HTTPS 443
路径:是由0个或多个“/”符号隔开的字符串
计算机域名系统:
从域名服务器查找该域名对应的IP地址,然后再向IP地址对应的Web服务器发送资源请求
HTTP 网络请求原理
请求格式:请求方法 空格 URL 空格 协议版本
头部字段名: 值 回车符 换行符
请求行:
eg:GET https://www.baidu.com/ HTTP/1.1
请求方法:
1:GET 请求指定的页面信息,并返回实体主体
2:POST 向指定资源提交数据
3:HEAD 类似GET,没有具体内容
4:PUT 客户端传递的数据取代指定文件夹的内容
5:DELETE 请求服务器删除指定页面
6:TRACE 回显服务器收到的请求,用于测试和诊断
五级标题
HTTP抓包工具Fiddler
Fiddler工作原理
以代理网络服务器形式工作 代理地址:127.0.0.1 端口号8888
爬取网络数据:
urllib库
urllib是Python中请求url连接的官方标准库,在Python2中主要为urllib和urllib2,在Python3中整合成了urllib。urllib中一共有四个模块,分别如下:
request:主要负责构造和发起网络请求,定义了适用于在各种复杂情况下打开 URL (主要为 HTTP) 的函数和类
error:处理异常
parse:解析各种数据格式
robotparser:解析robot.txt文件
快速抓取一个网页
import urllib.request
from urllib import request
response=urllib.request.urlopen('http://www.baidu.com')
html=response.read().decode('UTF-8')
print(html)
分析urlopen方法
#response=urllib.request.urlopen(‘http://www.baidu.com’)
‘’’
传入了一个百度首页的URL,
urlopen可以接收多个参数
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
url: 请求的网址
data:要发送到服务器的数据
timeout:设置网站的访问超时时间
urlopen返回对象提供方法:
‘’’
data 参数使用:
import urllib.request
import urllib.parse
data=bytes(urllib.parse.urlencode({'world':'hello'}).encode('utf-8'))
response=urllib.request.urlopen('http://httpbin.org/post',data=data)
print(response.read())
timrout 参数使用
import urllib.request
import urllib.parse
response=urllib.request.urlopen('http://httpbin.org/post',timeout=1)
print(response.read())
使用HTTPResponse对象
import urllib.request
response=urllib.request.urlopen('http://www.itcase.cn')
print(type(response))
#结果:<class ‘http.client.HTTPResponse’>
构造Resquest对象
import urllib.request
# 将url作为Resquest()方法的参数,构造并返回一个Request对象
response=urllib.request.urlopen('http://www.baidu.com')
# 将Resquest对象作为urlopen()方法的参数,发送给服务器并接受响应
response=urllib.request.urlopen(request)
# 使用read()读取网页内容
html=response.read().decode('UTF-8')
print(html)