爬虫常识

爬虫在使用场景中的分类

#1、通用爬虫
        抓取系统的重要部分,抓取的是一整张页面的数据
#2、聚焦爬虫
        是建立在通用爬虫的基础上,抓取的似乎页面中的特定的局部内容
#3、增量式爬虫
        检测网站中数据更新的情况,只会抓取网站中最新更新出来的数据

robots.txt协议

君子协议

User-agent:  Baiduspider
Allow:  /article
Allow:  /oshtml
Allow:  /ershou
Allow: /$
Disallow:  /product/
Disallow:  /

User-Agent:  Googlebot
Allow:  /article
Allow:  /oshtml
Allow:  /product
Allow:  /spu
Allow:  /dianpu
Allow:  /oversea
Allow:  /list
Allow:  /ershou
Allow: /$
Disallow:  /

User-agent:  Bingbot
Allow:  /article
Allow:  /oshtml
Allow:  /product
Allow:  /spu
Allow:  /dianpu
Allow:  /oversea
Allow:  /list
Allow:  /ershou
Allow: /$
Disallow:  /

User-Agent:  360Spider
Allow:  /article
Allow:  /oshtml
Allow:  /ershou
Disallow:  /

User-Agent:  Yisouspider
Allow:  /article
Allow:  /oshtml
Allow:  /ershou
Disallow:  /

User-Agent:  Sogouspider
Allow:  /article
Allow:  /oshtml
Allow:  /product
Allow:  /ershou
Disallow:  /

User-Agent:  Yahoo!  Slurp
Allow:  /product
Allow:  /spu
Allow:  /dianpu
Allow:  /oversea
Allow:  /list
Allow:  /ershou
Allow: /$
Disallow:  /
https://www.taobao.com/robots.txt

两种协议与三种加密方式

http协议与https协议

#概念:都是服务器与客户端进行数据交互的一种形式
#只不过https是安全的超文本传输协议

常用的请求头信息
    User-Agent:请求载体的身份标识
    Connection:求情完毕后,是断开连接还是保持连接
常用的响应头信息
    Content-Type:服务器响应回客户端的数据类型
https采用的是证书密钥加密

 UA伪装

#UA:User-Agent(请求载体的身份标识)

#UA检测:
门户网站的服务器会检测对应请求的载体标识,如果检测请求的载体身份标识为某一款浏览器,说明请求是一个正常的请求。反正为不正常请求(爬虫),服务器就很有可能拒绝该次请求

#UA伪装:
让爬虫对用的请求载体身份标识伪装成浏览器

三种加密方式

#1、对称密钥加密
#2、非对称密钥加密
#3、证书密钥加密
#对称密钥加密的基本工作流程
1、客户端制定一套加密规范,对数据进行加密,
2、在传输过程中,把加密规范(密钥)同数据一块发送给服务器
3、服务器拿到加密数据以及密钥,进行解密,进而拿到客户端传递的数据

#弊端:
 在密钥和加密数据的传递过程中,很可能被第三方拦截到,第三方可直接解密,直接拿到数据
对称密钥加密的基本工作流程以及弊端
#非对称加密是使用的时候,有两把锁,公开密钥(公钥)和私有密钥(私钥)

#非对称密钥加密的基本工作流程:
服务器端设置公钥,并发送给客户端, 
客户端按照公钥进行加密,把加密数据发送给服务端
服务端拿到加密数据,使用自己的私钥进行解密

因为解密的密钥不会进行传输,因此,即使拿到公钥和数据,也很难解密,

#但是也存在弊端,
一、非对称加密的凡是效率比较低,它处理起来更为复杂,影响通信速度
二、无法保证客户端所拿到的公钥就是服务器发过来的
        如果公钥在发送过程中被拦截(例如django的中间件),然后对公钥进行篡改,把篡改之后的公钥发送给客户端,    
        客户端按照被篡改的公钥进行加密    
非对称密钥加密的基本工作流程及优缺点
证书密钥加密的基本工作原理与非对称密钥相似
只不过在公钥传输过程中,加入了第三方认证机构

公钥------->>证书认证机构(给公钥签名)----->>证书-------->>客户端
证书密钥加密

requests模块

pip install requests

#requests模块:
    python中原生的一款基于网络请求的模块,简单便捷,效率极高,功能非常清大,(只要掌握了requests模块,就掌握了爬虫占据了爬虫领域的半壁江山)    

#作用:
   模拟浏览器发请求

#如何使用:
        指定url
        发起请求
        获取响应数据
        持久化存储

 requests实战之网页采集器

import requests
# https://www.baidu.com/s?wd=%E5%8D%8E%E4%B8%BA
# 问号要不要都行


if __name__ == '__main__':
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    }

    url='https://www.baidu.com/s'
    kw=input('enter a word:')
    param={
        'wd':kw
    }
    response = requests.get(url=url,params=param,headers=headers)
    page_text = response.text
    fileName=kw+'.html'
    with open(fileName,'w',encoding='utf-8')as f:
        f.write(page_text)
        print('保存成功')
网页采集器
import json,requests

if __name__ == '__main__':
    # 1、指定url
    post_url = 'https://fanyi.baidu.com/sug'
    # 2、进行UA伪装
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    }
    word=input('>>:')
    data = {'kw':word}
    # 发送请求
    response = requests.post(url=post_url,data=data,headers=headers)
    # 获取响应数据,json()方法返回到是obj,(只有在确认是json数据类型才可以使用,content-type: application/json可以确认)
    dic_obj = response.json()
    fileName = word+'.json'
    fp=open(fileName,'w',encoding='utf-8')
    json.dump(dic_obj,fp,ensure_ascii=False)
    print('over!!!')
百度翻译
#有的页面并非是全局刷新,很多是通过ajax局部刷新的(动态加载出阿里的),如果指定该url,并不能拿到想要的数据,

#两种方式检测是否是局部刷新
#方式一、直接用代码验证
import requests
if __name__ == '__main__':
    url='http://125.35.6.84:81/xk/'

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}

    page_text = requests.get(url=url,headers=headers).text

    with open('./huazhuang.html','w',encoding='utf-8')as f:
        f.write(page_text)
#通过打开html文件发现,此页面与直接访问该地址的页面不同,想要拿到的数据没有加载出来,所以,想要的信息不在这个http://125.35.6.84:81/xk/地址


#方式二、直接在浏览器上判断
在浏览器上访问http://125.35.6.84:81/xk/,通过抓包工具,找到地址为http://125.35.6.84:81/xk/的数据包(Network中),找到Response对象,看是否有想要找的数据,可以通过ctrl+f快速查找
原文地址:https://www.cnblogs.com/pdun/p/10931958.html