Python爬虫学习第二章-5-使用requests模块爬取肯德基餐厅信息
这一节是使用requests模块爬取肯德基餐厅信息
在这个案例中,输入店的地址并点击查看后,地址栏中的地址未发生改变,也就是说明这时发起的是一个Ajax请求,需要在network中看XHR。
步骤:
-
先根据Request
URL指定url(http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword),指定完url紧接着要进行UA伪装,即定义一个headers; -
再根据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")
注意:使用open打开文件的话最后需要加fp。close()方法关闭文件,避免占用资源。使用with open()的话不需要