requests+bs4使用(post方式)
一、介绍
现在很多网站都会用到前后端分离的开发策略,前端只是负责渲染,数据通过其他路由去获取,比如https://gary666.com/pub,如果你直接用get方式请求这个网页的话是获取不到主要内容的(比如这个例子中表格中的数据),因为没有执行他请求数据的js,提示可以通过chrom浏览器network观察他真实请求数据的url,这里用了一种异步的技术。
真实请求数据的url为:https://www.gary666.com/result,这样对于我们爬虫也有一个好处就是我们不用再去解析网页内容,只要找到请求数据的接口(一般结合返回的数据格式都是json的,很规范),就很容易获取到自己想要的内容。
爬取这个网页的课程信息(主要是requests的post方法,bs4没用到)
其中传递的参数有page(表示页码),rows(表示每页的条数)
- 输出:所有的课程名、学分、教师名、授课院系、领域、时间地点、备注
- 基本要求:所有页数据、封装函数、数据存储
二、参考代码
# -*- coding: utf-8 -*-
# author:Gary
import requests
url = 'https://www.gary666.com/result' # 需要post的url
for page in range(1, 33): # 多少页:32页
data = {
'page': page,
'rows': 10
} # 需要post的数据
res = requests.post(url, data).json() # 获取post的返回数据,也可以采用.text方法获取网页内容
print(res) # 查看返回内容
items = res['rows'] # 提取主要内容
for item in items: # 获取对应的信息
print(item['Cname'], item['grade'], item['Tname'], item['department'], item['type'], item['timeLocation'],
item['tips'])
三、运行结果
参考文献:
- 关于json格式的介绍:https://blog.csdn.net/woay2008/article/details/94366000
- 使用chrom浏览器Network查看前后台数据传输请求:https://blog.csdn.net/museions/article/details/75144263
- 不同浏览器前端调试查看返回页面的json数据:https://blog.csdn.net/bcbobo21cn/article/details/88564944