网络爬虫基础之入门

网络爬虫分类

1、通用爬虫

通用网络爬虫:是捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。
主要目的:是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。(百度快照)

通用网络爬虫 从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提供支持,它决定着 整个引擎系统的内容是否丰富,信息是否即时,因此其性能的优劣直接影响着搜索引擎的效果。
工作流程
在这里插入图片描述

搜索引擎如何获取一个新网站的URL:
1. 新网站向搜索引擎主动提交网址:
2. 在其他网站上设置新网站外链
3. 和DNS解析服务商(如DNSPod等)合作,新网站域名将被迅速抓取。

爬虫限制:
搜索引擎蜘蛛的爬行是被输入了一定的规则的,它需要遵从一些命令或文件的内容。
1. rel=“nofollow”,,告诉搜索引擎爬虫无需抓取目标页,同时告诉搜索引擎无需将的当前页的Pagerank传递到目标页.
2. Robots协议(也叫爬虫协议、机器人协议等),全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。

通用爬虫局限性:
1.大多情况下,网页里90%的内容对用户来说都是无用的。
2. 搜索引擎无法提供针对具体某个用户的搜索结果。
3. 图片、数据库、音频、视频多媒体等不能很好地发现和获取。
4. 基于关键字的检索,难以支持根据语义信息提出的查询,无法准确理解用户的具体需求。
在这里插入图片描述

2、聚焦爬虫

聚焦爬虫,是"面向特定主题需求"的一种网络爬虫程序,它与通用搜索引擎爬虫的区别在于:聚焦爬虫在实施网页 抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息。

HTTP与HTTPS

1、HTTP

HTTP协议-80端口
HyperTextTransferProtocol, 超文本传输协议是一种发布和接收HTML页面的方法。
HTTP工作原理:
网络爬虫抓取过程可以理解为模拟浏览器操作的过程。

浏览器发送HTTP请求的过程:
1.根据域名到DNS中找到IP
2.根据IP建立TCP连接(三次握手)
3.连接建立成功发起http请求
4.服务器响应http请求
5.浏览器解析HTML代码并请求html中的静态资源(js,css)
6.关闭TCP连接(四次挥手)
7.浏览器渲染页面

**URL(Uniform/UniversalResourceLocator的缩写):**统一资源定位符,是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。
基本格式: scheme://host[:port#]/path/…/[?query-string][#anchor]

客户端HTTP请求
客户端发送一个HTTP请求到服务器的请求消息,包括以下格式:
在这里插入图片描述
在这里插入图片描述
请求方法:
根据HTTP标准,HTTP请求可以使用多种请求方法.
HTTP0.9:只有基本的文本GET功能。
HTTP1.0:完善的请求/响应模型,并将协议补充完整,定义了三种请求方法:GET,POST和HEAD方法。
HTTP1.1:在1.0基础上进行更新,新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法。
在这里插入图片描述
get和post方法的区别:
在这里插入图片描述
常用的请求报头:
Host: 主机和端口号
Connection : 客户端与服务连接类型, 默认为keep-alive
User-Agent: 客户浏览器的名称
Accept: 浏览器或其他客户端可以接受的MIME文件类型
Referer:表明产生请求的网页来自于哪个URL
Accept-Encoding:指出浏览器可以接受的编码方式。
Accept-Language:语言种类
Accept-Charset: 字符编码
Cookie:浏览器用这个属性向服务器发送Cookie
Content-Type:POST请求里用来表示的内容类型。

服务端HTTP响应
HTTP响应由四个部分组成,分别是:状态行 、 消息报头 、 空行 、 响应正文在这里插入图片描述
常见的响应状态码:

  • 200: 请求成功
  • 302: 请求页面临时转移至新url
  • 307和304: 使用缓存资源
  • 404: 服务器无法找到请求页面
  • 403: 服务器拒绝访问,权限不够
  • 500: 服务器遇到不可预知的情况

cookie和session
服务器和客户端的交互仅限于请求/响应过程,结束之后便断开,在下一次请求时,服务器会认为新的客户端。为了维护他们之间的链接,让服务器知道这是前一个用户发送的请求,必须在一个地方保存客户端的信息。

  • Cookie:通过在客户端记录的信息确定用户的身份。
  • Session:通过在服务器端记录的信息确定用户的身份。

2、HTTPS

HTTPS-443端口
HypertextTransferProtocoloverSecureSocketLayer, 简单讲是HTTP的安全版,在HTTP下加入SSL 层。

在这里插入图片描述

项目案例

百度图片下载器
1、分析项目需求
http://image.baidu.com/search/index?tn=baiduimage&word=cat
2. 分析网页源代码,配合F12
3. 编写正则表达式或者其他解析器代码
4. 存储数据到本地
5. 正式编写python爬虫代码

"""
File:01_百度图片自动下载器.py
Author:Tcyw
Date:2020-04-09
Connect:741047561@qq.com
Description:

"""
import os
import re

from colorama import Fore
import requests
def download_image(url,keywords):
    """
    下载图片
    :param url:
    :return:
    """
    # 1.向服务器发起HTTP请求
    response = requests.get(url)
    # 2.获取服务器的响应信息
    data = (response.text)
    # print(dir(response))
    # 3.编写正则表达式,获取图片网址
    pattern = r'"objURL":"(.*?)"'
    # 4.根据正则表达式寻找符和条件的图片网址
    image_urls = re.findall(pattern, data)
    print(len(image_urls))
    print(image_urls[:3])
    index = 1
    # 5.下载猫的图片到本地
    for image_url in image_urls:
        try:
            response = requests.get(image_url)
            print(image_url)
        except Exception as e:
            print(Fore.RED + '下载失败:%s' %image_url)
        else:
            old_image_filename = image_url.split('/')[-1]
            if old_image_filename:
                image_format = old_image_filename.split('.')[-1]
            else:
                image_format = 'jpg'
            # 生成文件的存储目录,keywords=‘cat’,'dog'
            if not os.path.exists(keywords):
                os.mkdir(keywords)
            # response.text 返回unicode的文本信息,response.content返回的是bytes类型的信息
            image_path = os.path.join(keywords, str(index) + '.' + image_format)
            with open(image_path, 'wb') as f:
                f.write(response.content)
                print("[+] 保存图片%s.jpg成功" % (index))
                index += 1
if __name__ == '__main__':
    keyword = input("批量下载图片的关键字:")
    url = 'http://image.baidu.com/search/index?tn=baiduimage&2&word=' + keyword
    print(Fore.RED + '[+]正在请求网址:%s' %(url))
    download_image(url,keyword)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值