Python爬虫学习笔记:概念、知识和简单应用

什么是爬虫?

通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程。

  • robots.txt协议:规定了网站中那些数据可以被爬取,那些不可以被爬取

使用的开发工具

  • python 3.8
  • pycharm

一个简单的爬虫实例

用程序模拟浏览器,输入一个网址,从该网址中获取到资源或者内容。如爬取百度的界面代码。
代码如下:

from urllib.request import urlopen

url = "http://www.baidu.com"
resp = urlopen(url)  #打开url

# print(resp.read().decode(utf--8)) #打印抓取到的界面

with open("baidu.html",mode="w",encoding="utf-8") as f:  #创建文件
    f.write(resp.read().decode("utf-8"))   #保存到文件中
print("over!")

结果:
在这里插入图片描述在这里插入图片描述

Web请求过程分析

1)服务器渲染:在服务器中直接把数据和html整合并统一返回到浏览器,在页面源代码中能看到数据,是一个静态过程。

举个例子:在百度中搜索“周杰伦”关键字信息。首先客户端会发送关键字到服务器,服务器进行内部检索并将信息排序后插入到html里面,然后返回带有“周杰伦“检索信息的html内容。
在这里插入图片描述
2)客户端渲染:第一次请求只要html骨架,第二次请求拿到数据,进行数据展示。在页面源代码看不到数据,是一个动态过程。

举个例子:查看排行榜页面。首先客户端会请求排行榜页面,服务器返回html骨架,此时客户端未收到数据,然后需要再次请求,由服务器返回数据,最后,由客户端对数据进行拼接。

  • 爬虫时一般想要的是数据,可以对浏览器进行抓包
    在这里插入图片描述

HTTP协议

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP协议把一条消息分为三大模块,无论请求、响应都是三块内容,爬虫时需要注意请求头和响应头,一般含有重要内容

请求:

请求行 -> 请求方式(get/post) 请求url地址 协议

请求头 -> 放一些服务器使用的附加信息

请求体 -> 一般放请求参数
响应:

状态行 - > 协议 状态码

响应头 -> 放一些客户端要使用的一些附加信息

响应体 - > 服务器返回真正客户端要用的内容(HTML,json)等

请求头中的重要内容

  1. User-Agent:请求载体的身份标识

  2. Referer:防盗链(请求从哪个页面来?反爬会用到)

  3. cookie:本地字符串数据新消息(反爬的token)

响应头中的重要内容

  1. cookie:本地字符串数据信息(反爬的token)

  2. 各种莫名其妙的字符串(一般都是token字样,防止攻击和反爬)

请求方式

GET:显示提交,get请求传递参数爬虫中使用”params=“

POST:隐式提交,post请求传递参数爬虫中使用”data=“

requests

requests相比第三节的urllib使用起来更加简洁

安装

pip install requests

GET实例:输入一个你喜欢的明星,使用request爬取搜索结果页面

如果直接爬取页面会被小小的反爬拦截住,因为服务器判断你的操作来源与自动化脚本,为了让我们的操作看起来更像是人为行为,需要User-Agent字段来标识自己的身份。
在这里插入图片描述

代码如下:

import requests

query = input("请输入一个你喜欢的明星")

url = f'https://sogou.com/web?query={query}'

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

resp = requests.get(url,headers=headers) #处理小小的反爬,搜索引擎的搜索栏信息都是get请求

print(resp)  #返回状态码
print(resp.text) #返回页面源代码
resp.close()

输出:

在这里插入图片描述

POST实例:使用requests获取百度翻译结果

开启开发者模式后,在文本框中输入相应单词,然后查看数据包中有个sug(爬取不同的网站时名字可能不同),其中的preview中发现确定是我们要的信息
在这里插入图片描述

同时可以看到请求方式是post
在这里插入图片描述
在payload中可以看到传参的变量值

在这里插入图片描述

  • 使用post方法请求与get方法请求是完全不一样的

代码如下:

import requests

url = "https://fanyi.baidu.com/sug"

s = input("请输入要翻译的单词:")

data = {
    "kw": s
}

#发送post请求
resp = requests.post(url,data=data) #传入参数
print(resp.json())  #将服务器返回的内容直接处理成json
resp.close()

返回结果:

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值