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}

相关推荐
周杰伦的稻香6 分钟前
Go + Redis:本地部署高性能图片主色调提取服务
开发语言·redis·golang
吴梓穆10 分钟前
Python 语法基础 函数
开发语言·python
不负岁月无痕13 分钟前
C++ 模板核心内容与高频面试题汇总
java·开发语言·c++
Kobebryant-Manba18 分钟前
学习文本处理
开发语言·python
m0_6174939423 分钟前
PaddleOCR报错:OneDnnContext does not have the input Filter 解决方案汇总
python
李可以量化25 分钟前
量化迅投 QMT vs 聚宽 (JoinQuant)全面分析
python·量化·qmt·ptrade·聚宽
福大大架构师每日一题36 分钟前
2026年6月TIOBE编程语言排行榜,Go语言排名第13,Rust语言排名12。关于Rust已进入平台期的报道似乎为时过早。
开发语言·golang·rust
无限进步_40 分钟前
从零实现一个迷你Shell——深入理解Linux命令行解释器
linux·运维·服务器·开发语言·c++·chrome
旅僧40 分钟前
运行UMI镜像
python
拙慕JULY41 分钟前
小程序返回 base64 文件报错
开发语言·javascript·小程序