首先,我们先拿到“开封菜”的官方网站(需要md5解密)
24757648371537245B0D3648CF8C987C
1. 在抓包⼯具中先定位到和浏览器地址栏的⽹址⼀样的数据包
①在页面中右击鼠标,点击检查,博主这里用的是Google浏览器
②在弹出来的页面中点击Network,然后在餐厅关键字的搜索框中输入一个城市的名字,点击搜索,这时你会发现,在抓包工具的Name框中,会出现一个GetStoreList.ashx文件,这就是我们爬取网站要用的关键信息,点它!!!
点击Headers,在这里有两个信息需要我们复制在代码中,第一个是包含搜索数据的指定数据包,就是这个一眼就可以看到的Request URL
还有一个是对付网站的UA反爬机制的User-Agent,这个需要把进度条一直拉到最底部,找到之后直接复制就可以
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99
Safari/537.36
2. 查看请求参数
请求参数一共分两种,get和post,显然此页面的请求⽅式为post请求参数:这一点可以在Headers查看到(如果想看get参数如何处理的,可以去看博主的上一篇文章)
点击Payload可以查看请求参数,把这一段复制进你的代码里,但是不要忘记加引号。需要注意一下,在抓包⼯具中:Form Data存放的是post请求的请求参数,⽽Query String中存放的是get请求的请求参数,这一点在写代码时要区分开,否则会爬不到
3. 获取相应数据
获取响应数据
json()可以将获取到的json格式的字符串进⾏反序列化
response = requests.post(url=url,headers=head,data=data)
page_text = response.json()
4.用循环来遍历storeName和addressDetail字段
,这两个字段是网站后台的开发人员命名的,可以在抓包工具的Response中查看到,同时还有存放这些字段信息的Table1
5.源代码
import requests
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36"
}
data = {
"cname": "",
"pid": "",
"keyword": "北京",
"pageIndex": "1",
"pageSize": "10",
}
url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
response = requests.post(url=url,headers=head,data=data)
page_text = response.json()
for dic in page_text['Table1']:
name = dic["storeName"]
address = dic["addressDetail"]
print(name,address)
6.运行结果
以下是5中的源代码的运行结果
这时你会发现,为什么只有10条信息?
那是因为我们在请求参数中只让程序爬取了10条信息,而且这个网站也规定了每一页只能显示10条信息,这时我们修改一下请求参数中的pageSize即可,如果想爬其他城市,就修改keyword
那我们来修改一下,再试试看
data = {
"cname": "",
"pid": "",
"keyword": "天津",
"pageIndex": "1",
"pageSize": "20",
}
只修改data中的数值即可,其他地方不用改
成功了!!!
好了,你可以爬全国任意一个城市的门店信息了,想爬多少,爬哪里都你说了算啦(手动狗头)