Ajax 数据抓取
什么是Ajax?
Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。
通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
Ajax 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。
Ajax-get 请求
今天我们看的是豆瓣的电影排行——>就是这个东东
在豆瓣电影里,当我们把滚动条拉到最底下后,会重新加载,但是页面没有刷新,这是另一个接口,是Ajax数据,而这时看一下,时get请求
我们再F12一下,Ajax数据看,不用看ALL 直接看XHR
分析 query string 我们发现 start limit
经过分析,我们 知道,start 是指从第几条电影开始,limit是指,每次加载多少
下面我们写代码:
import urllib.request
import urllib.parse
url = 'https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&'
page = input('请输入你先要第几页的数据')
number = 20
start = (int(page)-1)*number
data = {
'start': start,
'limit': number,
}
# 将字典来转化为 query_string
query_string = urllib.parse.urlencode(data)
#print(query_string)
url += query_string
#print(url)
# 这里的头部,我就简单的伪装一下
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36'
}
# 构建请求对象,发送请求
request = urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(request)
# 打印一下看看
print(response.read().decode())
顺利的,我们成功了,来个图看看
我们发现Ajax get请求数据的抓取和普通get的没有太大区别,主要的要分析传递的参数,
Ajax-post 请求
下面我们查询一下肯德基餐厅的地址信息
同样我们看到了三个参数,keyword
pagelndex
pageSiz
分析于上面相似,直接看代码 ,不多解释了
import urllib.request
import urllib.parse
url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'
city = input('你所在的城市:')
page = input('你想浏览的页码:')
pagesize = input('你想每页显示几个:')
# 构建处理表单
formdata = {
'cname': city,
'pid': '',
'pageIndex': page,
'pageSize': pagesize,
}
formdata = urllib.parse.urlencode(formdata).encode()
# 伪装
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36'
}
request = urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(request,data=formdata)
print(response.read().decode())
如果想看好几页,那就循环抓取一下,今天就学这些了,
明天我们学习一下 代理设置和 URLError
我又来要赞了,如果觉得可以学到些什么,或者讲解的清楚的话,点个赞再走吧
欢迎各位路过的大佬评论,指正错误