#内容为视频笔记及个人理解,若有错误还望各位大佬指正
requests模块
python中原生的一款基于网络请求的模块, 能够模拟浏览器发出请求。
- 指定 URL
- 发出请求
- 获取响应数据
- 持久化存储
import requests
url = "https://www.sogou.com" # 指定URl
response = requests.get(url=url) # 发出请求 并接收 get 所返回的响应对象
page_text = response.text # 响应对象中的text属性所返回的就是响应对象的源码数据(字符串的形式)
# 此时已经获得网页中的数据 存储再一个文本文件 或 tempfile
get(params)参数
当使用浏览器发出请求时, 如果我们需要传入参数时可以使用 params
当我们将 query 对应的 小乌龟 换成其他的词汇时, 搜索出的结果也会产生不同, 我们可以将其作为参数传入 params , params可以接收一个列表或字典。
# -*- coding:utf-8 -*-
import requests
url = "https://www.sogou.com/web?"
# 处理url携带的参数
kw = input("enter a word:")
param = ["query",kw]
response = requests.get(url=url,params=param)
filename = kw+".html"
with open(filename,"w",encoding="utf-8") as fn:
fn.write(response.text)
get(headers)参数
UA : User-Agent (请求载体的身份标识)
UA检测 : 门户网站的服务器会检测对应请求的载体身份标识, 如果检测到请求的载体身份标识为某一款浏览器, 意味着当前发出请求的是正常请求。如果检测到请求的身份载体标识不是基于某一款浏览器, 则表示该次请求是一个非正常请求, 服务器端就很有可能拒绝该次请求。(上述代码执行即可看到非正常请求的显示信息)
UA伪装 : 让爬虫对应的请求载体身份标识伪装成某一款浏览器, 将对应的User-Agent封装到一个字典中, 传入 get 的 headers 中
# -*- coding:utf-8 -*-
import requests
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"}
url = "https://www.sogou.com/web?"
# 处理url携带的参数
kw = input("enter a word:")
param = {"query":kw}
response = requests.get(url=url,params=param,headers=headers)
filename = kw+".html"
with open(filename,"w",encoding="utf-8") as fn:
fn.write(response.text)
print(kw+"爬取完成")
通用爬虫
当我们使用 get 请求获取整张页面的数据时, 可能会带有一些参数, 这些参数以"&"符号连接, 以key=value存在。
此时 get 中的 params 可以接收一个字典形式的参数, 例如搜索框内的参数
param={“query : 小王八”}
在指定请求头时同样要注意也是一个字典的形式(我是每次都忘)
header = {“User-Agent” : (这里是你的浏览器的请求头信息)}
发送请求及接收请求
response = get(url=url, params=param, headers=header)
url=对应的网址
param=参数
header=请求载体的信息(在VScode中并没有提示这个参数, 不过牟问题, 硬上就行)
此时的 response 就是我们请求到的信息
text = response.text # 返回数据信息(即网页源码)
Ajax请求
当我们向页面内输入数据时, 服务器会根据输入内容响应新的结果, 这就是一个ajax请求。
当我们只需要获取我们输入数据所得到的内容, 或者说网页内刷新出来的内容时, 需要检查网页的信息
右键 > 检查 > network > XHR
单击文件列表的文件, 选择headers向下滚动如果我们输入了参数可以看到 Form Data 下的内容有我们输入的参数, 并且对应了一个名称, 在headers那一栏找到response可以看到返回的数据信息
当我们需要爬取这段信息时, 先要确认一下网址的变化, 并查看网页检查信息中的响应结果的数据格式及发出请求的方法。
数据格式即 response headers中的 content-type
请求方式即 general中的 request method
使用post()来向页面发出请求时, post的参数 data 与get的 params 相同, 返回的数据格式为application/json时, 我们可以使用响应对象 .json() 来获取数据, 同样也可以使用 .text 不过建议大家使用 .json()
import requests
import json
if __name__ == "__main__":
# 指定url
url = "http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList"
# 参数
params = {
"on": "true",
"page": 1,
"pageSize": 15,
"productName": "",
"conditionType": 1,
"applyname": "",
"applysn": ""
}
# 请求头信息
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36 Edg/87.0.664.41"
}
# 发起请求
response = requests.post(url=url,data=params, headers=header)
# 获取响应数据
json_dic = response.json()
fp = open("json_.json", "w", encoding="utf-8")
json.dump(json_dic, fp=fp, ensure_ascii=False)
fp.close()
只有当返回的数据为Json格式时, 才可以使用 响应对象 . json 的方法获取Json串。
#第一次学爬虫, 此文章内容为个人理解, 希望不要误导跟我一样初入爬虫的朋友们