示例#1
0
 def run(self):
     '''执行函数
     第一步: 获取城市列表
     第二步: 获取每个城市的小区基本信息
     第三步: 获取所有小区的详情信息
     '''
     if os.path.exists(self.citys_file_name) is False:
         self.get_citys()
     for key, value in operation_file.read_json_file(
             self.citys_file_name).items():
         if os.path.exists(
                 self.plots_file_name.format(city_name=key)) is False:
             self.get_plots(value['city_name'], value['city_url'])
     for file_name in os.listdir(self.plots_dir_name):
         self.get_plots_detail(self.plots_dir_name + file_name)
示例#2
0
 def get_all_city_plots(self):
     '''获取所有城市的小区
     读取城市列表 JSON 文件, 获取全部城市列表(字典类型)
     循环城市列表, 获取城市名和对应的 URL, 当前获取的 URL 与展示小区列表的 URL 不同
     判断当前城市小区的 JSON 文件是否存在, 如果存在则说明此城市已完成采集, 跳过当前城市
     通过判断则采集当前城市小区数据
     '''
     for city_key, city_value in operation_file.read_json_file(
             self.citys_file_name).items():
         if os.path.exists(
                 self.plots_file_name.format(
                     file_name=city_value['city_name'])
         ) is True or self.continue_city_name_list.count(
                 city_value['city_name']) >= 1:
             continue
         self._get_plots(city_value['city_name'], city_value['city_url'])
示例#3
0
 def get_plots_detail(self, file_path):
     '''获取当前城市的小区详细信息
     读取小区信息文件, 并循环每个小区信息
     判断此小区是否已采集过详细信息(这里按`地址`这个键来判断), 没有采集则采集详细信息
     每采集20个小区的详细信息则保存一次数据, 小区采集结束后也会保存一次数据
     Args:
         file_path: 单城市的小区信息文件
     '''
     plots_dict = operation_file.read_json_file(file_path)
     num = 1
     for key in plots_dict.keys():
         if plots_dict[key].get('地址') is None:
             plots_dict[key] = self._get_plot_detail(plots_dict[key])
             num += 1
         if num % config.save_file_number == 0:
             print('更新文件{file_path}'.format(file_path=file_path))
             operation_file.write_json_file(file_path, plots_dict)
     if num > 1:
         print('更新文件{file_path}'.format(file_path=file_path))
         operation_file.write_json_file(file_path, plots_dict)
示例#4
0
 def get_plots_detail(self, file_name):
     '''获取当前城市的小区详细信息
     读取小区信息文件, 并循环每个小区信息
     判断此小区是否已采集过详细信息(这里按`地址`这个键来判断), 没有采集则采集详细信息
     每采集20个小区的详细信息则保存一次数据, 小区采集结束后也会保存一次数据
     Args:
         file_name: 单城市的小区信息文件
     '''
     plots_dict = operation_file.read_json_file(file_name)
     i = 1
     for key in plots_dict.keys():
         if plots_dict[key].get('地址') is None:
             common.print_and_sleep('采集{name}小区详情: {url}'.format(
                 name=key, url=plots_dict[key]['plot_url']))
             plots_dict[key] = self._get_plot_detail(plots_dict[key])
             i += 1
             if i % config.save_file_number == 0:
                 print('更新文件:{file_name}'.format(file_name=file_name))
                 operation_file.write_json_file(file_name, plots_dict)
     if i > 1:
         print('更新文件:{file_name}'.format(file_name=file_name))
         operation_file.write_json_file(file_name, plots_dict)
示例#5
0
 def get_all_plot_detail(self):
     # 读取链家目录下全部文件
     # 读取每个文件中的 json 数据
     # 判断每个小区数据, 如果没有详细数据则获取
     # 每获取 100 个小区数据或者本文件读取结束, 保存
     for plot_file in os.listdir(self.plots_dir_name):
         plot_file_name = self.plots_dir_name + plot_file
         plots_dict = operation_file.read_json_file(plot_file_name)
         i = 1
         for plot_key in plots_dict.keys():
             if plots_dict[plot_key].get('地址') is None:
                 plots_dict[plot_key] = self._get_plot_detail(
                     plots_dict[plot_key])
                 i += 1
                 if i % config.save_file_number == 0:
                     print('更新文件: {file_name}'.format(
                         file_name=plot_file_name))
                     operation_file.write_json_file(plot_file_name,
                                                    plots_dict)
         if i > 1:
             print('更新文件: {file_name}'.format(file_name=plot_file_name))
             operation_file.write_json_file(plot_file_name, plots_dict)
示例#6
0
 def get_plots_detail(self, plots_file_name):
     '''获取文件中的小区详情数据
     读取小区数据文件中的数据, 遍历
     判断当前小区数据中是否存在`地址`数据, 如果存在则已经获取过详细数据了, 如果没有则获取
     没采集一定数量的小区详情数据, 就更新一次文件(防止因特殊情况中断采集, 导致采集的数据全部丢失)
     循环结束, 更新文件
     '''
     plots_dict = operation_file.read_json_file(plots_file_name)
     i = 1
     for plot_key in plots_dict.keys():
         if plots_dict[plot_key].get('经纬度') is None:
             common.print_and_sleep('采集{name}小区详情: {url}'.format(
                 name=plots_dict[plot_key]['plot_name'],
                 url=plots_dict[plot_key]['plot_url']))
             plots_dict[plot_key] = self._get_plot_detail(
                 plots_dict[plot_key], plots_dict[plot_key]['plot_url'])
             i += 1
             if i % config.save_file_number == 0:
                 print(
                     '更新文件: {file_name}'.format(file_name=plots_file_name))
                 operation_file.write_json_file(plots_file_name, plots_dict)
     if i > 1:
         print('更新文件: {file_name}'.format(file_name=plots_file_name))
         operation_file.write_json_file(plots_file_name, plots_dict)