python爬虫从入门到放弃,含案例分析,超详细讲解(一)

本文是Python爬虫的基础教程,涵盖了爬虫的概述、应用场景、HTTP协议、使用Requests库进行网页抓取,以及数据解析的RE、BS4和XPath方法。通过实例解析,帮助读者快速掌握Python爬虫的基本技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python爬虫

1、认识爬虫

1.1、概述

网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者)

按照一定规律,自动地抓取万维网信息的程序或者脚本。

1.2、应用场景

  • 爬取网页优秀的图片信息
  • 爬取劲爆视频的弹幕信息
  • 爬取优秀的歌声以及曲目

1.3、爬虫和python

爬虫只能用python写吗?其实不然,用Java,c都能写,只不过python对于小白上手快,就像吃饭一般,筷子、勺子、甚至用手抓,他都是可以的,但是大家也都知道筷子勺子吃又优美雅观而且干净。

1.4、爬虫合法吗?

合法!他就像是小刀的存在,小刀可以给人类带来便利,带来一点点危害,也可能会带来很大的危害,没有什么物品是错误的,有的是使用的人,怎么使用,这是关键!

  • 善意的爬虫:不破坏网站的资源
  • 恶意的爬虫:影响网站的正常运行

1.5、第一个简单的爬虫

from urllib.request import urlopen

url="http://www.baidu.com"#获取网站的地址
resp=urlopen(url)#响应地址打开

with open("baidu.html",mode="w",encoding="utf-8") as f:#open方法,文件输出,mode写操作用法,编码格式encoding
    f.write(resp.read().decode("utf-8"))#响应并读写到指定文件
    print("over!")

2、web请求过程解析

  1. 服务器渲染:在服务器那边会把数据和HTML整合到一起,统一返回给浏览器页面中即可看到数据
    在这里插入图片描述

  2. 客户端渲染:第一次请求只要一个HTML骨架,第二次请求拿到数据进行数据展示

在这里插入图片描述

  1. 我们在请求页面的时候,第一次的请求往往是只有一个骨架

在这里插入图片描述

  1. 需要二次请求,才能得到其中的数据,这个看我如下操作

在这里插入图片描述

3、HTTP协议

3.1、概述

超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议

它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。

3.2、HTTP协议把消息分为三大块内容

  • 请求
    • 请求行:请求方式(get/post)请求url 协议
    • 请求头:放一些服务器要使用的附加信息
    • 请求体:一般放一些请求参数
  • 响应
    • 状态行:协议 状态码
    • 响应头:放一些客户端要使用的一些附加信息
    • 响应体:服务器返回真正客户端的内容(html,json)
      在这里插入图片描述

3.3、爬虫常见的重要信息

  • 请求头
    • User-Agent:请求载体的身份标识(用啥发送的请求)
    • Referer:防盗链(这次请求从哪个页面来的,反爬常用)
    • cookie:本地字符串数据信息(用户登录信息,反爬的token)
  • 响应头
    • cookie:本地字符串数据信息(用户登录,反爬的token)
    • 各种神奇莫名其妙的字符串(一般都是token字样,防止各种攻击和反爬)

4、Requests入门

  1. 安装requests第三方库

在这里插入图片描述

或者使用国内源,搜索清华源

https://mirrors.tuna.tsinghua.edu.cn/

语法:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 要下载的库

4.1、爬取网页名字信息

  1. 使用requests(手写一个小爬虫)
import requests

query=input("输入一个名字:")
url=f"https://www.baidu.com/s?ie=UTF-8&wd={
     
     query}"

dic={
   
   
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"
}#拿到头文件,模拟浏览器
resp=requests.get(url,headers=dic)#处理小爬虫

print(resp.text)

4.2、爬取百度翻译

在这里插入图片描述

找到相对应需要爬取的数据url,然后进行爬虫

import requests

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

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

dat={
   
   
    "kw":s
}

# 发送post请求,发送的数据必须放在字典中,通过打他参数进行传递
resp=requests.post(url,data=dat)
# print(resp.text)这个是输出乱码,因此直接使用json
# 将服务器返回内容直接处理成json()=>dict
print(resp.json()) 

4.3、豆瓣信息爬取

import requests

url="https://movie.douban.com/j/search_subjects"

# 封装参数
param={
   
   
"type": "movie",
"tag": "日本",
"sort": "recommend",
"page_limit": 20,
"page_start": 0,
}

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

resp=requests.get(url=url,params=param,headers=headers)
print(resp.json())

resp.close()#关闭resp

5、数据解析

三种解析方式:

  1. re解析
  2. bs4解析
  3. xpath解析

5.1、RE解析

5.1.1、正则表达式
  • 常见的元字符
\d 表示所有的字数
\w 表示大小写字符、数字、下划线
\s 表示空白、空格、换行符、制表符
\t 匹配制表符
\n 匹配换行符
\D 表示所有的非数字
\W 表示除数字字符下划线之外的所有字符
\S 表示非空白
. 表示除了换行符之外的任意内容
[ ]字符组:只要在中括号内的所有字符都是符合规则的字符
[^ ]非字符组:只要在中括号内的所有字符都是不符合规则的字符
^ 表示一个字符的开始
$ 表示一个字符的结束
 | 表示"或",注意,如果两规则有重叠部分,总是长得在前面,短的在后面
()表示分组,给一部分正规则为一组,|这个符号的作用域就可以缩小了
[\d\D] [\w\W] [\s\S] 匹配一切字符
  • 多多使用正则表达式工具测试

https://c.runoob.com/front-end/854

量词

{n} 表示只能出现n次
{n,} 表示至少出现n次
{n,m}表示至少出现n次,至多出现m次
?表示匹配0次或者1次,表示可有可无 但是只能有一个,比如小数点
+表示匹配1次多着或者多次
*表示匹配0次或者多次,表示可有可无,但是有可以有多个,比如小数点后n位

贪婪匹配和惰性匹配

.*    贪婪匹
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘凉者 栽树人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值