Python如何爬取肯德基(python,开发技术)

时间:2024-04-30 13:18:53 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

Python如何爬取肯德基

准备工作

查看肯德基官网的请求方法:post请求。

Python如何爬取肯德基

X-Requested-With: XMLHttpRequest 判断得肯德基官网是ajax请求

Python如何爬取肯德基

通过这两个准备步骤,明确本次爬虫目标:
ajax的post请求肯德基官网 获取上海肯德基地点前10页。

分析

获取上海肯德基地点前10页,那就需要先对每页的url进行分析。

第一页

#page1#http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname#POST#cname:上海#pid:#pageIndex:1#pageSize:10

第二页

#page2#http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname#POST#cname:上海#pid:#pageIndex:2#pageSize:10

第三页依次类推。

程序入口

首先回顾urllib爬取的基本操作:

#使用urllib获取百度首页的源码importurllib.request#1.定义一个url,就是你要访问的地址url='http://www.baidu.com'#2.模拟浏览器向服务器发送请求response响应response=urllib.request.urlopen(url)#3.获取响应中的页面的源码content内容#read方法返回的是字节形式的二进制数据#将二进制数据转换为字符串#二进制-->字符串解码decode方法content=response.read().decode('utf-8')#4.打印数据print(content)
  • 定义一个url,就是你要访问的地址

  • 模拟浏览器向服务器发送请求 response响应

  • 获取响应中的页面的源码 content内容

if__name__=='__main__':start_page=int(input('请输入起始页码:'))end_page=int(input('请输入结束页码:'))forpageinrange(start_page,end_page+1):#请求对象的定制request=create_request(page)#获取网页源码content=get_content(request)#下载数据down_load(page,content)

对应的,我们在主函数中也类似声明方法。

url组成数据定位

Python如何爬取肯德基

爬虫的关键在于找接口。对于这个案例,在预览页可以找到页面对应的json数据,说明这是我们要的数据。

Python如何爬取肯德基

构造url

不难发现,肯德基官网的url的一个共同点,我们把它保存为base_url

base_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'

参数

老样子,找规律,只有'pageIndex'和页码有关。

data={'cname':'上海','pid':'','pageIndex':page,'pageSize':'10'}

post请求

  • post请求的参数 必须要进行编码

data = urllib.parse.urlencode(data).encode('utf-8')

  • 编码之后必须调用encode方法

  • 参数放在请求对象定制的方法中:post的请求的参数,是不会拼接在url后面的,而是放在请求对象定制的参数中

所以将data进行编码

data=urllib.parse.urlencode(data).encode('utf-8')

标头获取(防止反爬的一种手段)

Python如何爬取肯德基

Python如何爬取肯德基

即 响应头中UA部分。

User Agent,用户代理,特殊字符串头,使得服务器能够识别客户使用的操作系统及版本,CPU类型,浏览器及版本,浏览器内核,浏览器渲染引擎,浏览器语言,浏览器插件等。

headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/94.0.4606.71Safari/537.36Edg/94.0.992.38'}

请求对象定制

参数,base_url,请求头都准备得当后,就可以进行请求对象定制了。

request=urllib.request.Request(base_url,headers=headers,data=data)

获取网页源码

把request请求作为参数,模拟浏览器向服务器发送请求 获得response响应。

response=urllib.request.urlopen(request)content=response.read().decode('utf-8')

获取响应中的页面的源码,下载数据

使用 read()方法,得到字节形式的二进制数据,需要使用 decode进行解码,转换为字符串。

content=response.read().decode('utf-8')

然后我们将下载得到的数据写进文件,使用 with open() as fp 的语法,系统自动关闭文件。

defdown_load(page,content):withopen('kfc_'+str(page)+'.json','w',encoding='utf-8')asfp:fp.write(content)

全部代码

#ajax的post请求肯德基官网获取上海肯德基地点前10页#page1#http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname#POST#cname:上海#pid:#pageIndex:1#pageSize:10#page2#http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname#POST#cname:上海#pid:#pageIndex:2#pageSize:10importurllib.request,urllib.parsedefcreate_request(page):base_url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'data={'cname':'上海','pid':'','pageIndex':page,'pageSize':'10'}data=urllib.parse.urlencode(data).encode('utf-8')headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/94.0.4606.71Safari/537.36Edg/94.0.992.38'}request=urllib.request.Request(base_url,headers=headers,data=data)returnrequestdefget_content(request):response=urllib.request.urlopen(request)content=response.read().decode('utf-8')returncontentdefdown_load(page,content):withopen('kfc_'+str(page)+'.json','w',encoding='utf-8')asfp:fp.write(content)if__name__=='__main__':start_page=int(input('请输入起始页码:'))end_page=int(input('请输入结束页码:'))forpageinrange(start_page,end_page+1):#请求对象的定制request=create_request(page)#获取网页源码content=get_content(request)#下载数据down_load(page,content)

爬取后结果

Python如何爬取肯德基

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Python如何爬取肯德基的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:JS迭代数组计算元素总和并将值链接成字符串的方法下一篇:

9 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18