python爬取三元组数据笔记(一)

python爬取三元组数据笔记(一)

1、什么是爬虫?
通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程。
2、爬虫的分类:

  • 通用爬虫:抓取系统的主要组成部分,通常抓取的是一整张页面数据
  • 聚焦爬虫:建立在通用爬虫的基础之上,抓取的是页面中特定的局部内容
  • 增量式爬虫:检测网站数据更新情况,只会爬取网站中最新更新的数据

3、robots.txt 协议
规定了网站中哪些数据可以被爬虫爬取。

4、http协议

  • 概念:是服务器和客户端进行数据交互的一种形式。
  • 常用的请求头信息:User-Agent:请求载体的身份标识。Connection:请求完毕之后是断开连接,还是保存连接。

常用的响应头信息:

  • Content-Type:服务端响应回客户端的数据类型。

5、https协议
安全的(进行数据加密的)超文本传输协议。
加密方式:

  • 对称密钥加密:有一把锁,通过客户端将密文与密钥统一发送给服务端,服务端用密钥对密文进行解锁。(容易在传输过程中被拦截。)
  • 非对称密钥加密:有两把锁,服务器端有自己的公钥,发送给客户端,客户端根据其公钥发送密文。(效率低,容易将公钥篡改成其他的密钥)
  • 证书密钥加密:服务器开发者携带公共密钥,向数字证书认证机构提出公开密钥的申请,数字证书认证机构审核通过后,会对密钥所在的证书进行签名(辨别真伪),服务器将证书发给客户端客户端。

6、request模块

概念: python中一款原生的基于网络请求的模块,功能强大,效率极高。

作用:模拟浏览器发送请求。

如何使用(request编写流程):

  • 指定url
  • 发起请求
  • 获取响应数据
  • 持久化存储

7、安装pycharm
https://blog.csdn.net/qq_29883591/article/details/52664478

在pycharm中增加requests库
①:file—>settings—>project interpreter
python爬取三元组数据笔记(一)_第1张图片
②:点击左侧加号按钮,会弹出一个界面,在弹出界面搜索requests。
python爬取三元组数据笔记(一)_第2张图片
python爬取三元组数据笔记(一)_第3张图片
③:点击左下角下载即可。安装后会提示,成功,并且会在界面上看到。
python爬取三元组数据笔记(一)_第4张图片

8、实战编码:

确定需求:爬取搜狗首页数据,按照前面讲的四个步骤

#引入requests库
import requests
if __name__ == '__main__':
# 第一步:指定url
    url = 'https://www.sogou.com/'
#第二步:发起请求
#get方法会返回一个响应对象
    response = requests.get(url=url)
#第三步:获取响应数据(text返回的是字符串形式的响应数据)
    page_text = response.text
#第四步:持久化存储
    with open('./sogou.html','w',encoding='utf-8') as fp:
        fp.write(page_text)
    print('爬取数据结束')

点击运行之后,会出现一个sogou.html的文件,里面有搜狗首界面的源代码。

  • 需求:爬取搜狗指定词条对应的搜索结果页面(简易网页采集器)

比如说搜索任何的界面,会出现任何界面的爬取。
注意**:注释里面的UA伪装,headers里面的User-Agent存放各种浏览器的请求头,模拟浏览器对服务器进行访问。后面都需要使用。**

# UA:User-Agent (请求载体的身份标识)(反爬机制)
# UA检测:门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某一款浏览器
# 就说明此请求就是一个正常请求。但是,如果检测到请求的载体身份标识不属于某一款浏览器的
# 则表明该请求不是正常的请求(爬虫),服务器就会拒绝请求,则无法爬取数据。
# 所以,为了每次爬取都能成功,应该进行UA伪装,进行反反爬数据
import requests
if __name__ == '__main__':
    #UA伪装:将对应的User-Agent封装到一个字典中
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'
    }
    url = 'https://www.sogou.com/web'
    #处理url携带的参数,使web后面的参数可以是变化的 :封装到字典中
    kw = input('enter a word:')
    param = {
        'query':kw
    }
    #对指定的url发起请求对应的url是携带参数的,并且请求过程中处理了参数,param携带的就是参数
    # headers可以来UA伪装成一个浏览器发出的请求
    response = requests.get(url=url,params=param,headers=headers)
    page_text = response.text
    fileName = kw+'.html'
    with open(fileName,'w',encoding='utf-8') as fp:
        fp.write(page_text)
    print(fileName,'保存成功!!!!!!')
  • 需求:破解百度翻译

①:打开百度翻译对应的页面
②:想要爬取的内容并不是查询后的整张页面,而是查询后的一个文本的结果。
③:注意到每次搜索,页面都会进行局部刷新。局部刷新都会有ajax请求。所以,我们只需要捕获ajax请求,其请求数据就是最终的单词对应的结果。
④:操作;
用谷歌浏览器打开百度翻译,右键点击检查。
python爬取三元组数据笔记(一)_第5张图片
python爬取三元组数据笔记(一)_第6张图片
network下面一行的All表示的是每次查询后的访问请求。点击XHR才可以找到ajax的请求。
python爬取三元组数据笔记(一)_第7张图片在百度翻译上进行搜索之后,会发现数据有变化,点击,直到右侧出现所有查询结果后,获取其URL。
python爬取三元组数据笔记(一)_第8张图片

import requests
import json
if __name__ == '__main__':
    post_url = 'https://fanyi.baidu.com/sug'
    # 在请求之前进行UA伪装
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'
    }
    #post请求参数处理,处理数据是data
    word = input('enter a word:')
    data = {
        'kw':word
    }
    #请求发送
    response = requests.post(url=post_url,data=data)
    #获取响应数据  .json直接返回的就是一个obj (只有确定返回的类型是json才可用json返回)
    dic_obj = response.json()
    #进行持久化存储
    fileName = word+'json'
    fp = open(fileName,'w',encoding='utf-8')
    json.dump(dic_obj,fp=fp,ensure_ascii=False)
    print('over!!!')

python爬取三元组数据笔记(一)_第9张图片

你可能感兴趣的:(python,ajax,http,https)