目标是爬取KFC官网,某地哪里有门店,前n页数据
选择城市北京,F12检查页面,发现就一个有用的接口,确实是我们需要的。不断观察接口发现Form Data中有个参数是pageIndex,是几就代表了第几页的门店信息。
完整代码
参数前面加了_是为了区分形参和实参
import urllib.requestimport urllib.parsedef create_request(_page):base_url = '/kfccda/ashx/GetStoreList.ashx?op=cname'data = {'cname': '北京','pid': '','pageIndex': _page,'pageSize': 10}headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/98.0.4758.102 Safari/537.36 "}data = urllib.parse.urlencode(data).encode('utf-8')_request = urllib.request.Request(url=base_url, data=data, headers=headers)return _requestdef get_content(_request):res = urllib.request.urlopen(_request)_content = res.read().decode('utf-8')return _contentdef download(_page, _content):with open('kfc' + str(_page) + '.json', 'w', encoding='utf-8') as f:f.write(_content)if __name__ == '__main__':start_page = int(input('起始页面'))end_page = int(input('结束页面'))for page in range(start_page, end_page + 1):request = create_request(page)content = get_content(request)download(page, content)
运行程序,例如输入1和2。(不敢输入太大的数,怕被封IP)
稍等片刻后文件目录下出现了我们的下载文件,kfc1.json即第一页的10个门店信息。
小技巧,文件内容都在一行之中,按住CTRL + ALT + L可以规整格式。但要避免快捷键冲突,例如开着QQ会锁定QQ账号。。关闭QQ即可解决冲突。
总结
与上一篇文章提到的GET请求很相似,都属于ajax的get和post请求POST请求的参数data需要编码为utf-8格式打开文件的时候也要规定打开的编码格式encoding=‘utf-8’CTRL + ALT + L可以让json文件更规整如果觉得《Python 爬虫学习笔记(五(2))urllib POST请求获取KFC门店位置信息》对你有帮助,请点赞、收藏,并留下你的观点哦!