Python爬虫入门

简介: 网络爬虫是自动抓取网页数据的程序,通过URL获取网页源代码并用正则表达式提取所需信息。反爬机制是网站为防止爬取数据设置的障碍,而反反爬是对这些机制的对策。`robots.txt`文件规定了网站可爬取的数据。基础爬虫示例使用Python的`urllib.request`模块。HTTP协议涉及请求和响应,包括状态码、头部和主体。`Requests`模块是Python中常用的HTTP库,能方便地进行GET和POST请求。POST请求常用于隐式提交表单数据,适用于需要发送复杂数据的情况。

 一,爬虫概述

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

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

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

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

from urllib.request import urlopen
url="http://www.baidu.com"
response = urlopen(url)
print(response.read().decode("utf-8"))#拿到的是页面源代码

image.gif

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

二,Web请求过程

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

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

三,HTTP协议

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

请求:

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

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

3.

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

响应:

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

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

3.

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

四,Requests模块

安装requests模块:

pip install requests

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)

image.gif

image.gif 编辑

我们发现,我们发送的请求被验证拦截下来了,这是因为我们发送请求的请求头不是设备的型号,而是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)

image.gif

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

五,Post请求

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

image.gif

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

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)

image.gif

输出结果:

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

目录
相关文章
|
3月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
450 7
|
3月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
4月前
|
数据采集 Web App开发 自然语言处理
新闻热点一目了然:Python爬虫数据可视化
新闻热点一目了然:Python爬虫数据可视化
|
4月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
406 1
|
3月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
3月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
4月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
805 19
|
3月前
|
数据采集 存储 JSON
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
|
3月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
653 1
|
4月前
|
调度 数据库 Python
Python异步编程入门:asyncio让并发变得更简单
Python异步编程入门:asyncio让并发变得更简单
267 5

推荐镜像

更多