Python爬虫入门

一,爬虫概述

网络爬虫,顾名思义,它是一种顺着url爬取网页数据的自动化程序或者脚本。可以认为地,我们给予爬虫一个网站的url,它就会返回给我们网站的源代码,我们通过正则表达式来筛选我们需要的内容数据,这就是爬虫的目的,而所谓的反爬和反反爬策略只是这个过程的障碍与应对。

反爬机制:门户网站对爬虫的应对策略,防止爬虫对网站的数据进行爬取。

反反爬策略:对反爬机制的应对策略

Robots.txt:该文件规定了网站哪些数据是否允许爬取。

python 复制代码
from urllib.request import urlopen

url="http://www.baidu.com"

response = urlopen(url)

print(response.read().decode("utf-8"))#拿到的是页面源代码

上述代码就是最简单的爬虫,获取到url后返回给我们网页的源代码(页面源代码html,css,js,在浏览器中,浏览器会对代码进行渲染。)

二,Web请求过程

客户端向服务端发送请求,服务端接收到请求后进行判断,允许后进行html拼接,然后返回给客户端,客户端浏览器对html文件进行渲染形成我们所看见的页面。

实际情况中,网站通常会采用分布式,即将html文件和数据分开来返回给客户端,这样可以把服务器的压力分摊,当访问人数过多时不至于服务器宕机。

三,HTTP协议

HTTP协议(Hyper Text Transfer Protocol超文本传输协议),是用于从万维网传输超文本到本地浏览器的传送协议。

请求:

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

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

4.请求体 -> 放一些请求参数

响应:

1.状态行 -> 协议 状态码

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

4.响应体 -> 服务器返回的真正客户端要用的内容

四,Requests模块

安装requests模块:

pip install requests

python 复制代码
Import requests

#爬取百度源代码
url="http://www.baidu.com"

res=requests.get(url)#[Response200]200是状态码,没问题
print(res.content.decode('utf-8'))#拿到源代码



Import requests

content=input("输入你要检索的内容")

url=f"https://www.sogou.com/web?query={content}"

response=requests.get(url)

print(response.text)

我们发现,我们发送的请求被验证拦截下来了,这是因为我们发送请求的请求头不是设备的型号,而是python的型号,这被服务端识别并拦截。

python 复制代码
importrequests

content=input("输入你要检索的内容")
headers=
{"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/124.0.0.0Safari/537.36Edg/124.0.0.0"}

url=f"https://www.sogou.com/web?query={content}"

response=requests.get(url,headers=headers)

print(response.text)

我们模拟了设备的请求头,再次发送,成功骗过服务端,获取到数据。

五,Post请求

我们打开百度翻译,调成英文输入法,打开network观察XHR(ajax请求)

看得出来,表单数据放在了XHR文件中而没有拼接在url上,所以说post是一种隐式提交,get是显式提交

python 复制代码
import requests
import json
headers={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/124.0.0.0Safari/537.36Edg/124.0.0.0"}

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

data={
"kw":input("请输入一个单词")
}
response=requests.post(url,data=data)
response=json.loads(response.text)
print(response)

输出结果:

{'errno': 0, 'data': [{'k': 'happy', 'v': 'adj. 快乐的; 幸福的; 巧妙的; 〈口〉有点醉意的'}, {'k': 'Happy', 'v': '[人名] 哈皮; [地名] [美国] 哈皮'}, {'k': 'Happy Day', 'v': '新春如意(歌名)'}, {'k': 'happy lot', 'v': '福分;福气'}, {'k': 'happy home', 'v': '快乐家庭'}], 'logid': 2211867141}

相关推荐
listhi520几秒前
基于空时阵列最佳旋转角度的卫星导航抗干扰信号处理的完整MATLAB仿真
开发语言·matlab·信号处理
岁岁岁平安5 分钟前
本机 MongoDB 注册系统服务、启用security认证
数据库·python·mongodb
lly20240620 分钟前
Kotlin 类和对象
开发语言
是苏浙25 分钟前
零基础入门C语言之C语言内存函数
c语言·开发语言
zhmhbest26 分钟前
Qt 全球峰会 2025:中国站速递 —— 技术中立,拥抱更大生态
开发语言·qt·系统架构
程序员大雄学编程26 分钟前
用Python来学微积分30-微分方程初步
开发语言·python·线性代数·数学·微积分
关于不上作者榜就原神启动那件事30 分钟前
模拟算法乒乓球
开发语言·c++·算法
我爱学习_zwj1 小时前
App通信:HTTP与JSON全解析
python
机器学习ing.1 小时前
U-Net保姆级教程:从原理到医学细胞分割实战(PyTorch版)!
人工智能·pytorch·python·深度学习·机器学习
88号技师1 小时前
2025年7月一区SCI优化算法-Logistic-Gauss Circle optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法