持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情
分析网址
百度一下肯德基官网,进入官网,最下面有个餐厅查询,然后点进去。选择按城市搜索。选择北京。打开控制台。然后点击network,可以看到一个网络请求的记录,如果没有,可以点击下一页,就可以看到。调用了这个地址http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname,参数如下,点击下一页,可以看到又多了一个数据。参数中pageIndex从1变为2.也就是说获取第几页的数据。这个pageindex就选择几,所有完全可以写一个循环从1到10获取9页的数据
{
'cname': '北京',
'pid': '',
'pageIndex': 1,
'pageSize': 20
}
过程
- 首先判断是不是在main函数中。创建一个for循环,让里面代码执行9次,并且拿到第几页的page参数。下面就是creat_request准备参数
if __name__ == '__main__':
for page in range(1, 10):
request = create_request(page)
content = get_content(request)
down_load(content, page)
- 这里值得注意⚠️的事post参数必须encode编码一下。否则就会失败,headers有时是可以忽略的。
def create_request( page ):
headers = {
'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36",
}
baseurl = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname"
data = {
'cname': '北京',
'pid': '',
'pageIndex': page,
'pageSize': 20
}
data = urllib.parse.urlencode(data).encode("utf-8")
return urllib.request.Request(url=url, data=data, headers=headers)
- 读取响应的数据,并且以utf-8编码转译
def get_content(request):
response = urllib.request.urlopen(request)
return response.read().decode('utf-8')
- 下载数据到本地,并且给每一页的数据的文件名里增加一下数据的页码,以便于区分
def down_load(content, page):
with open('kendeji' + str(page) + '.json', 'w', encoding='utf-8') as fp:
fp.write((content))
基本上一些简单的爬🐛就是这几步操作,不过是参数与参数之前的博弈。有些可能需要一些特殊的header,但是高级的爬虫我还不太会,可能也不允许会,涉及到犯罪的东西不能触碰。本技术仅是学习交流,切勿滥用,导致人家网站瘫痪。