学了python爬虫也有一段时间了,试着写了一小段代码看看自己掌握的程度, 目标是准确爬取到肯德基在指定城市的所有餐厅位置,话不多说,直接上代码:
import requests #导入库
if __name__ == "__main__":
#指定url
url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword"
首先要做的就是导入requests库,接下来按照爬取步骤就是得到url链接了,这个链接是从肯德基官网得到的,首先打开网站,接着按F12进入检查模式

依次点击完之后发现下面并没有显示任何数据,这时我们在网站的查询栏里随便输入一个城市,来看看会出现什么


在网站点击查¥查询之后会出来一组数据,点开就能得到爬虫需要的很多数据了。
- Request URL: 后面的链接就是发送请求的url。
- Request Method: POST 告诉我们这个请求是属于post请求,而不是get请求。
- Content-Type: text/plain; charset=utf-8 这个代表的是数据类型为text/plain,所以后面就不能用json。
- User-Agent: 这个就是我们用来UA伪装的数据了,等会也会使用到。
- From Data:
- cname: #这里是空的所以不用管
- pid: #也是空的所以不用管
- keyword: 深圳 #我刚刚查询的是深圳,所以这里显示了一个深圳,表示这个是关键词
- pageIndex: 1 #这个表示的页码
- pageSize: 10 #这个是每页显示的地址数量
分析完之后可以接着开始写代码了:
import requests #导入库
if __name__ == "__main__":
#指定url
url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword"
#自定义查询
kw = input("请输入要查询的城市:")
keyword = kw
#编辑参数
data = {
'cname':'',
'pid':'',
'keyword': kw, #查询关键字
'pageIndex': '1',#页码
'pageSize': '100'#每页显示的地址数量
}
由于我不想固定的只获取到某个地区的数据,所以在这里把keyword参数写成用户自定义的类型,其它参数可以不变,如果想获取到当前地区所有的地址的话,可以把'pageSize'的值附高一点
接下来就是进行UA伪装,把我们获取到的User-Agent:写到代码里面就可以了,接着发送请求,这里注意一下刚刚看到网页是用的post请求,所以我们下面也需要使用post来发送请求:
response = requests.post(url=url,data=data,headers=headers)
发送完请求会得到返回数据,把数据保存下来。到此整个代码就结束了。最后运行一下看看会不会报错,是否准确得到了自己想要的数据。我把完整代码放到下面,可以参考一下:
import requests #导入库
if __name__ == "__main__":
#指定url
url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword"
#自定义查询
kw = input("请输入要查询的城市:")
keyword = kw
#编辑参数
data = {
'cname':'',
'pid':'',
'keyword': kw, #查询关键字
'pageIndex': '1',#页码
'pageSize': '100'#每页显示的地址数量
}
#UA伪装
headers = {'User-Agent': '填入自己的伪装地址'}
#发送请求
response = requests.post(url=url,data=data,headers=headers)
#获取数据
list_data = response.text
#数据化保存
filename = kw + 'kfc.html'
with open(filename,'w',encoding='utf-8') as fp:
fp.write(list_data)
print(filename,"获取完毕!!")