爬虫入门

爬虫入门笔记

爬虫概念

爬虫用途

搜索引擎
爬取图片
爬取网站公开信息......

爬虫分类

通用爬虫和聚焦爬虫

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)

上一篇:Java ZIP文件解压


下一篇:ZIP文件解压