爬虫基础
-
爬虫:模拟浏览器上网,抓取数据。
-
www.baidu.com/robots.txt
-
常用请求头
- User-Agent
- Connection:请求完毕后,是断开还是保持连接
-
常用响应头
- Content-Type:服务器响应回客户端的数据类型
-
https
- 安全的超文本传输协议
- 加密方式:
- 对称密钥加密
- 非对称密钥加密
- 证书密钥加密
requests
- 使用:
- 确定url
- 发送请求
- 获取响应数据
- 存储
- get方法
requests.get(url= , params= ,headers= )
params为url参数
headers:UA伪装
- post方法
requests.post(url= , data= headers= )
data类似params
- json
json.dumps()函数是将字典转化为字符串
json.dump()函数的使用,将json信息写进文件
json.loads()函数是将字符串转化为字典
json.load()函数的使用,将读取json信息
with open('1.json', 'r') as f: data = json.load(f)
客户端要向服务器端发送一个json字符串,服务器端要接收并处理。下面演示正确的代码:
import json with open('1.json', 'r') as f: data = json.load(f) data = {"company_data": json.dumps(data)} # urlopen()的data参数默认为None,当data参数不为空的时候,urlopen()提交方式为Post from urllib import request, parse url = r'http://192.168.165.4:8000/show/report/' company_data = parse.urlencode(data).encode('utf-8') req = request.Request(url, data=company_data) print(company_data) page = request.urlopen(req).read() page = page.decode('utf-8') print('page是什么', page, type(page))
接收的话,下面的代码只是接收并打印,并没有进行一系列的判断然后去入库之类的,因为我还没做:
def receive_data(request): if request.method == 'POST': print(request.get_full_path()) print(request.body) data = request.POST.get("company_data") if data: try: data = json.loads(data) print("企业数据", type(data), data) return HttpResponse(data) except ValueError as e: print(str(e)) else: return HttpResponse("no data")
百度翻译
if __name__ == "__main__":
url = 'https://fanyi.baidu.com/sug'
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'
}
word = input('enter a word:\n')
data = {
'kw':word
}
response = requests.post(url=url, data= data,headers= header)
dict_ = response.json()
fileName = word+'.json'
with open(fileName, 'w', encoding='utf-8') as fp:
json.dump(dict_,fp=fp, ensure_ascii=False)
print("over")