一、爬虫的基本概念
爬虫:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息。
爬虫的合法性:几乎每一个网站都有一个名为 robots.txt 的文档,当然也有部分网站没有设定 robots.txt。对于没有设定 robots.txt 的网站可以通过网络爬虫获取没有口令加密的数据,也就是该网站所有页面数据都可以爬取。如果网站有 robots.txt 文档,就要判断是否有禁止访客获取的数据。
二、爬虫在使用场景中的分类
分为:
- 通用爬虫:抓取系统重要组成部分,抓取的是一整张页面数据。
- 聚焦爬虫:是建立在通用爬虫的基础之上,抓取的是页面中特定的局部内容。
三、 爬虫的基本原理
网页请求的过程分为两个环节:
- Request (请求):每一个展示在用户面前的网页都必须经过这一步,也就是向服务器发送访问请求。
- Response(响应):服务器在接收到用户的请求后,会验证请求的有效性,然后向用户(客户端)发送响应的内容,客户端接收服务器响应的内容,将内容展示出来,就是我们所熟悉的网页请求。
网页请求的方式也分为两种:
- GET:最常见的方式,一般用于获取或者查询资源信息,也是大多数网站使用的方式,响应速度快。
- POST:相比 GET 方式,多了以表单形式上传参数的功能,因此除查询信息外,还可以修改信息。
所以在爬取网站前应该先确定一下是什么请求。
四、 爬虫的基本流程
-
通用爬虫基本流程:
- 指定url
- 基于requests模块发起请求
- 获取响应中的数据
- 进行持久化存储
get请求类:
#爬虫实战-网页采集器
import requests
from requests.api import head
if __name__ =="__main__":
#UA伪装:将封装到一个字典中
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
url = "https://www.sogou.com/web"
#处理url所携带的参数:存储在字典中
kw = input("输入关键字:")
param = {
"query":kw
}
#模拟浏览器请求 有参数
response = requests.get(url=url,params=param,headers=headers)
#存储数据
page_text = response.text
#持久性存储
filename = kw+".html"
with open(filename,"w",encoding="utf-8") as fp:
fp.write(page_text)
print(filename,"保存成功!")
post请求类:
例1:
#获取百度翻译
#post请求,携带了参数
#响应数据是一组json数据
import requests
import json
if __name__ == "__main__":
word = input("请输入:")
#1.获取URL
post_url = "https://fanyi.baidu.com/sug" #这边必须是sug ,要写了翻译的内容再去看request url
#2.UA伪装
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
#3.post请求参数处理(同get一样)
data = {
"kw":word
}
#4.请求发送
response = requests.post(url=post_url,data=data,headers=headers)
#5.获取响应数据:json()方法返回的是obj(对象),如果确定数据是json类型,才可以使用json()
dic_obj = response.json()
#print(dic_obj)
#持久化存储
filename = word + ".json"
fp = open(filename,"w",encoding="utf-8")