肯德基全国到处都有!用requests模块爬取肯德基餐厅信息!

187 阅读1分钟

  这一节是使用requests模块爬取肯德基餐厅信息

  在这个案例中,输入店的地址并点击查看后,地址栏中的地址未发生改变,也就是说明这时发起的是一个Ajax请求,需要在network中看XHR。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入

步骤:

  • 先根据Request
    URL指定url(www.kfc.com.cn/kfccda/ashx…
  • 再根据url和 Ajax包最后一段进行参数处理;然后根据Request
    Method确定发送的是什么请求,从而进行发送请求,并定义一个response来接受响应的数据对象;
  • 然后从响应对象中获取响应数据,根据Content-Type确定是什么类型的数据,该用什么方法;最后进行持久化存储

实现代码:

import requests
if __name__=="__main__":
    #1、指定url
    post_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
    #2、进行UA伪装
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'
    }  # 在url之后要紧接着进行UA伪装,也是定义一个headers
    #3、进行参数处理,根据最后一部分确定参数
    address = input('enter an address name:')
    data = {
        'cname':'',
        'pid':'',
        'keyword': address ,
        'pageIndex': '1',
        'pageSize': '10'
    }
    #4、发送请求
    response = requests.post(url = post_url,data = data,headers = headers)
    #5、获取数据,从Content-Type: text/plain; charset=utf-8中可以看出是text类型的
    page_text = response.text
    #6、持久化存储
    filename = address+'.html'
    with open(filename,'w',encoding='utf-8') as fp:
        fp.write(page_text)
    print("over")