分类: Python/Ruby
2021-08-13 17:15:26
import requests,json,time,jsonpath,csv
#from urllib.parse import urlencode
base_url = ''
headers = {
#自己加咯
}
Name = [] #搜索结果中地市名
Result = [] #包含搜索结果的数量
FileName=[] #文件名(搜索时)
global s,f
f = 0
# 索引—— ——方便动态创立文件名
def getpages(s):
params = {
#F12 Network 可查
}
page = requests.get(base_url, headers = headers,params = params)
items = json.loads(page.text)
#json.loads: json字符串解码成Python对象
name = jsonpath.jsonpath(items,"$..name")
num = jsonpath.jsonpath(items,'$.content[*].num')
num2 = jsonpath.jsonpath(items,'$.more_city[*].city[*].num')
#jsonpath对Json数据解析
for na in name:
if '中国' in na:
continue
Name.append(na)
for n in num:
Result.append(n)
for n in num2:
Result.append(n)
def Specify_Output(n):
dic = {}
dic = dict(zip(Name,Result))
#将Name 和 Result合并成字典格式
Sort = sorted(dic.items(), key=lambda x : x[1], reverse=True)
#对字典按照key值大小排序,Sort是列表类型
for i in range(n):
print(Sort[i])
def save_data():
file = open((r'D:\Mine\Python\爬虫数据\\'+FileName[f]+'.csv'),'w',encoding='utf-8',newline='')
# 对爬取的不同数据建立csv文件 两个双斜杠是因为一个'\'表示转义
writer = csv.writer(file)
writer.writerow(('{}'.format(s),''))
writer.writerow (('城市或地区','相关个数'))
#使用csv库的时候,要注意只有一个量
for i in range(len(Name)):
writer.writerow((Name[i],Result[i]))
print('数据已保存...')
file.close()
print('文件已关闭...')
if __name__ == '__main__':
while True:
s = input('您要搜索的是:')
FileName.append(s)
#将文件名写入列表,方便后来动态建立csv文件
time_start = time.time()
getpages(s)
time_end = time.time()
print("数据抓取用时:{:.2f}s".format(time_end - time_start))
# 爬取数据计时
print("全国一共有{}个城市和地区有和{}的相关".format(len(Name), s))
n = eval(input('您要输出按搜索结果数排名前多少的地市?\n(回车输出全部数据):'.format(s)))
Specify_Output(n)
print('\n'+'? '*10)
save_data()
f += 1
m = input('\n按q退出 任意键继续')
print('? ' * 10)
#特殊符号可以参考:https://blog.csdn.net/qq_25218903/article/details/70212448
if m == 'q' :
break
else:
Result.clear()
Name.clear()