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请求过程解析
-
服务器渲染:在服务器那边会把数据和HTML整合到一起,统一返回给浏览器页面中即可看到数据
-
客户端渲染:第一次请求只要一个HTML骨架,第二次请求拿到数据进行数据展示
- 我们在请求页面的时候,第一次的请求往往是只有一个骨架
- 需要二次请求,才能得到其中的数据,这个看我如下操作
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入门
- 安装requests第三方库
或者使用国内源,搜索清华源
https://mirrors.tuna.tsinghua.edu.cn/
语法:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 要下载的库
4.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、数据解析
三种解析方式:
- re解析
- bs4解析
- xpath解析