以爬取kfc餐厅信息为例:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# @Time : 2022/8/31 13:15
# @Author : 苏生pai
# @version: python 3.10.1
# @File : KFC店家信息.py
# @Software: PyCharm
'''
kfc餐厅信息网址:http://www.kfc.com.cn/kfccda/storelist/index.aspx
'''
import time
import random
import requests
if __name__ == '__main__':
url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
#UA伪装
header={
'User-Agent':'***'
}
city=input('查询的地方:')
page=1
f = open(f'{city}kfc地址.txt', 'w', encoding='utf-8')
while True:
param={
'cname': '',
'pid':'',
'keyword': city,
'pageIndex':str(page),
'pageSize':'10'
}
# 获取相应数据
response=requests.post(url=url,data=param,headers=header)
# 这个页面是一个text,不是json
page_text = response.text
null = None
a=eval(page_text)
print(a,type(a))
if not a['Table1']:
break
for dic in a['Table1']:
f.write(dic['storeName'])
f.write('\n')
f.write(dic['addressDetail'])
f.write('\n\n')
# print(dic['storeName'])
# print(dic['addressDetail'])
# print('*'*60)
#注意:最好加一个,防止垃圾网站崩了
time.sleep(random.uniform(0.5,1.5))
page+=1
f.close()
print('数据爬取成功!')
注意的点主要有两个:
一、需要在每个page循环中增加一个延时,防止有的不是很好网站崩了
time.sleep(random.uniform(0.5,1.5))
二、如果page过于多,最好不要写成如上述所示的全部爬取,可以设置需要循环的次数,防止崩溃,例如
while page<10:
|