XB_Category(1)

首先分类的底层结构如下,也有类名,比如(Person)、对象方法列表、类对象方法列表、协议列表 

struct _class_t {
	struct _class_t *isa;
	struct _class_t *superclass;
	void *cache;
	void *vtable;
	struct _class_ro_t *ro;
};

//分类的结构
struct _category_t {
	const char *name;//类名名称
	struct _class_t *cls;
	const struct _method_list_t *instance_methods;//对象方法列表
	const struct _method_list_t *class_methods;//类方法列表
	const struct _protocol_list_t *protocols;//协议列表
	const struct _prop_list_t *properties;//属性列表
};

1.Category的加载处理过程

1.通过Runtime加载某个类的所有Category数据

2.把加载的Category的数据,包括方法、属性、协议等数据,合并到一个大数组中

3.将合并后的Category数据(方法、属性、协议等数据),插入到类原来数据的前面

2.以实例方法列表举例

1> 首先原来的类中有个class_rw_t的结构体,包含了method_list_t列表,这个列表是一个二维数组,有可能 method_list_t *list =[[method1,method2,method3]]这样子。

2> Category中的方法列表同上,当Category(A)与Category(B)方法列表合并之后合并之后,有可能 method_list_t *all_list =[[Amethod1,Amethod2,Amethod3],[Bmethod1,Bmethod2,Bmethod3]]。

3> 合并之前原来类的数组会根据分类方法列表个数重新分配数组内存,也就是扩容,并将原来的一维方法列表移到数组最后。

4> 再通过(while index--){method = all_list[index]},往新数组中添加一维方法列表,因为是index--,所以是后编译的分类的方法先添加

最终可能这样 method_list_t *last_list =[[Bmethod1,Bmethod2,Bmethod3],[Amethod1,Alastmethod2,Amethod3],[method1,method2,method3]]。

 

3.总结

从这里可以看出如果不同分类包括主类中有相同的方法实现,那么主类肯定是最后调用的,优先调用的事后加载的分类中的方法。

4.注意

在class_rw_t结构体重有一个const class_ro_t *ro只读的属性,里边也存在一份方法列表、属性列表、成员变量,如果有分类数据合并,这里依然保持原来类的数据,这里的方法列表是一维的。

KeyError Traceback (most recent call last) File D:\anaconda3\Lib\site-packages\pandas\core\indexes\base.py:3805, in Index.get_loc(self, key) 3804 try: -> 3805 return self._engine.get_loc(casted_key) 3806 except KeyError as err: File index.pyx:167, in pandas._libs.index.IndexEngine.get_loc() File index.pyx:196, in pandas._libs.index.IndexEngine.get_loc() File pandas\\_libs\\hashtable_class_helper.pxi:7081, in pandas._libs.hashtable.PyObjectHashTable.get_item() File pandas\\_libs\\hashtable_class_helper.pxi:7089, in pandas._libs.hashtable.PyObjectHashTable.get_item() KeyError: 'target' The above exception was the direct cause of the following exception: KeyError Traceback (most recent call last) Cell In[54], line 1 ----> 1 da2['target'] = da2['target'].astype('category') 2 da2['xb'] = da2['xb'].astype('category') 3 da2['education'] = da2['education'].astype('category') File D:\anaconda3\Lib\site-packages\pandas\core\frame.py:4102, in DataFrame.__getitem__(self, key) 4100 if self.columns.nlevels > 1: 4101 return self._getitem_multilevel(key) -> 4102 indexer = self.columns.get_loc(key) 4103 if is_integer(indexer): 4104 indexer = [indexer] File D:\anaconda3\Lib\site-packages\pandas\core\indexes\base.py:3812, in Index.get_loc(self, key) 3807 if isinstance(casted_key, slice) or ( 3808 isinstance(casted_key, abc.Iterable) 3809 and any(isinstance(x, slice) for x in casted_key) 3810 ): 3811 raise InvalidIndexError(key) -> 3812 raise KeyError(key) from err 3813 except TypeError: 3814 # If we have a listlike key, _check_indexing_error will raise 3815 # InvalidIndexError. Otherwise we fall through and re-raise 3816 # the TypeError. 3817 self._check_indexing_error(key) KeyError: 'target'
08-05
zy@zy-Lenovo-Legion-R7000P2020H:~/autoware$ colcon build --symlink-install \ --cmake-args \ -DCMAKE_BUILD_TYPE=Release \ -DCUDAToolkit_ROOT=/usr/local/cuda-12.4 \ -DCMAKE_CUDA_COMPILER=/usr/local/cuda-12.4/bin/nvcc \ --continue-on-error \ --allow-overriding can_msgs Starting >>> autoware_lint_common Starting >>> autoware_planning_msgs Starting >>> autoware_simple_object_merger --- stderr: autoware_probabilistic_occupancy_grid_map In this package, headers install destination is set to `include` by ament_auto_package. It is recommended to install `include/autoware_probabilistic_occupancy_grid_map` instead and will be the default behavior of ament_auto_package from ROS 2 Kilted Kaiju. On distributions before Kilted, ament_auto_package behaves the same way when you use USE_SCOPED_HEADER_INSTALL_DIR option. CMake Warning: Manually-specified variables were not used by the project: CMAKE_CUDA_COMPILER CUDAToolkit_ROOT /usr/bin/ccache: invalid option -- 'E' nvcc fatal : Failed to preprocess host compiler properties. CMake Error at autoware_probabilistic_occupancy_grid_map_cuda_generated_utils_kernel.cu.o.Release.cmake:220 (message): Error generating /home/zy/autoware/build/autoware_probabilistic_occupancy_grid_map/CMakeFiles/autoware_probabilistic_occupancy_grid_map_cuda.dir/lib/utils/./autoware_probabilistic_occupancy_grid_map_cuda_generated_utils_kernel.cu.o gmake[2]: *** [CMakeFiles/autoware_probabilistic_occupancy_grid_map_cuda.dir/build.make:105:CMakeFiles/autoware_probabilistic_occupancy_grid_map_cuda.dir/lib/utils/autoware_probabilistic_occupancy_grid_map_cuda_generated_utils_kernel.cu.o] 错误 1 gmake[1]: *** [CMakeFiles/Makefile2:150:CMakeFiles/autoware_probabilistic_occupancy_grid_map_cuda.dir/all] 错误 2 gmake: *** [Makefile:146:all] 错误 2 --- Failed <<< autoware_probabilistic_occupancy_grid_map [29.1s, exited with code 2] Starting >>> autoware_pid_longitudinal_controller --- stderr: autoware_lidar_transfusion In this package, headers install destination is set to `include` by ament_auto_package. It is recommended to install `include/autoware_lidar_transfusion` instead and will be the default behavior of ament_auto_package from ROS 2 Kilted Kaiju. On distributions before Kilted, ament_auto_package behaves the same way when you use USE_SCOPED_HEADER_INSTALL_DIR option. sh: 1: cicc: not found CMake Error at autoware_lidar_transfusion_cuda_lib_generated_preprocess_kernel.cu.o.Release.cmake:280 (message): Error generating file /home/zy/autoware/build/autoware_lidar_transfusion/CMakeFiles/autoware_lidar_transfusion_cuda_lib.dir/lib/preprocess/./autoware_lidar_transfusion_cuda_lib_generated_preprocess_kernel.cu.o gmake[2]: *** [CMakeFiles/autoware_lidar_transfusion_cuda_lib.dir/build.make:411:CMakeFiles/autoware_lidar_transfusion_cuda_lib.dir/lib/preprocess/autoware_lidar_transfusion_cuda_lib_generated_preprocess_kernel.cu.o] 错误 1 gmake[1]: *** [CMakeFiles/Makefile2:192:CMakeFiles/autoware_lidar_transfusion_cuda_lib.dir/all] 错误 2 gmake: *** [Makefile:146:all] 错误 2 --- Failed <<< autoware_lidar_transfusion [34.7s, exited with code 2] Starting >>> autoware_pure_pursuit --- stderr: autoware_planning_validator In this package, headers install destination is set to `include` by ament_auto_package. It is recommended to install `include/autoware_planning_validator` instead and will be the default behavior of ament_auto_package from ROS 2 Kilted Kaiju. On distributions before Kilted, ament_auto_package behaves the same way when you use USE_SCOPED_HEADER_INSTALL_DIR option. CMake Warning: Manually-specified variables were not used by the project: CMAKE_CUDA_COMPILER CUDAToolkit_ROOT /usr/bin/ld: CMakeFiles/test_autoware_planning_validator.dir/test/src/test_planning_validator_functions.cpp.o: in function `PlanningValidatorTestSuite_checkValidFiniteValueFunction_Test::TestBody()': test_planning_validator_functions.cpp:(.text+0xa4): undefined reference to `autoware::planning_validator::PlanningValidator::PlanningValidator(rclcpp::NodeOptions const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0xf0): undefined reference to `autoware::planning_validator::PlanningValidator::checkValidFiniteValue(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0x120): undefined reference to `autoware::planning_validator::PlanningValidator::checkValidFiniteValue(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0x153): undefined reference to `autoware::planning_validator::PlanningValidator::checkValidFiniteValue(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&)' /usr/bin/ld: CMakeFiles/test_autoware_planning_validator.dir/test/src/test_planning_validator_functions.cpp.o: in function `PlanningValidatorTestSuite_checkValidIntervalFunction_Test::TestBody()': test_planning_validator_functions.cpp:(.text+0x4f9): undefined reference to `autoware::planning_validator::PlanningValidator::PlanningValidator(rclcpp::NodeOptions const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0x549): undefined reference to `autoware::planning_validator::PlanningValidator::checkValidInterval(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0x59b): undefined reference to `autoware::planning_validator::PlanningValidator::checkValidInterval(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0x5e0): undefined reference to `autoware::planning_validator::PlanningValidator::checkValidInterval(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0x638): undefined reference to `autoware::planning_validator::PlanningValidator::checkValidInterval(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&)' /usr/bin/ld: CMakeFiles/test_autoware_planning_validator.dir/test/src/test_planning_validator_functions.cpp.o: in function `PlanningValidatorTestSuite_checkValidCurvatureFunction_Test::TestBody()': test_planning_validator_functions.cpp:(.text+0xb24): undefined reference to `autoware::planning_validator::PlanningValidator::PlanningValidator(rclcpp::NodeOptions const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0xb70): undefined reference to `autoware::planning_validator::PlanningValidator::checkValidCurvature(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&)' /usr/bin/ld: CMakeFiles/test_autoware_planning_validator.dir/test/src/test_planning_validator_functions.cpp.o: in function `PlanningValidatorTestSuite_checkValidRelativeAngleFunction_Test::TestBody()': test_planning_validator_functions.cpp:(.text+0xde7): undefined reference to `autoware::planning_validator::PlanningValidator::PlanningValidator(rclcpp::NodeOptions const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0xe64): undefined reference to `autoware::planning_validator::PlanningValidator::checkValidRelativeAngle(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0xec5): undefined reference to `autoware::planning_validator::PlanningValidator::checkValidRelativeAngle(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0xf28): undefined reference to `autoware::planning_validator::PlanningValidator::checkValidRelativeAngle(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0xfef): undefined reference to `autoware::planning_validator::PlanningValidator::checkValidRelativeAngle(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&)' /usr/bin/ld: CMakeFiles/test_autoware_planning_validator.dir/test/src/test_planning_validator_functions.cpp.o: in function `PlanningValidatorTestSuite_checkValidLateralJerkFunction_Test::TestBody()': test_planning_validator_functions.cpp:(.text+0x14b9): undefined reference to `autoware::planning_validator::PlanningValidator::PlanningValidator(rclcpp::NodeOptions const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0x150a): undefined reference to `autoware::planning_validator::PlanningValidator::checkValidLateralJerk(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0x15ea): undefined reference to `autoware::planning_validator::PlanningValidator::checkValidLateralJerk(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0x1662): undefined reference to `autoware::planning_validator::PlanningValidator::checkValidLateralJerk(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0x17f5): undefined reference to `autoware::planning_validator::PlanningValidator::checkValidLateralJerk(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&)' /usr/bin/ld: CMakeFiles/test_autoware_planning_validator.dir/test/src/test_planning_validator_functions.cpp.o: in function `PlanningValidatorTestSuite_checkTrajectoryShiftFunction_Test::TestBody()': test_planning_validator_functions.cpp:(.text+0x1d2b): undefined reference to `autoware::planning_validator::PlanningValidator::PlanningValidator(rclcpp::NodeOptions const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0x1dda): undefined reference to `autoware::planning_validator::PlanningValidator::checkTrajectoryShift(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&, autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&, geometry_msgs::msg::Pose_<std::allocator<void> > const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0x1e2a): undefined reference to `autoware::planning_validator::PlanningValidator::checkTrajectoryShift(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&, autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&, geometry_msgs::msg::Pose_<std::allocator<void> > const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0x1e77): undefined reference to `autoware::planning_validator::PlanningValidator::checkTrajectoryShift(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&, autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&, geometry_msgs::msg::Pose_<std::allocator<void> > const&)' /usr/bin/ld: test_planning_validator_functions.cpp:(.text+0x1ec6): undefined reference to `autoware::planning_validator::PlanningValidator::checkTrajectoryShift(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&, autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&, geometry_msgs::msg::Pose_<std::allocator<void> > const&)' /usr/bin/ld: CMakeFiles/test_autoware_planning_validator.dir/test/src/test_planning_validator_pubsub.cpp.o: in function `prepareTest(autoware_planning_msgs::msg::Trajectory_<std::allocator<void> > const&, nav_msgs::msg::Odometry_<std::allocator<void> > const&, geometry_msgs::msg::AccelWithCovarianceStamped_<std::allocator<void> > const&)': test_planning_validator_pubsub.cpp:(.text+0x3164): undefined reference to `autoware::planning_validator::PlanningValidator::PlanningValidator(rclcpp::NodeOptions const&)' /usr/bin/ld: CMakeFiles/test_autoware_planning_validator.dir/test/src/test_planning_validator_node_interface.cpp.o: in function `generateNode()': test_planning_validator_node_interface.cpp:(.text+0x14d5): undefined reference to `autoware::planning_validator::PlanningValidator::PlanningValidator(rclcpp::NodeOptions const&)' collect2: error: ld returned 1 exit status gmake[2]: *** [CMakeFiles/test_autoware_planning_validator.dir/build.make:736:test_autoware_planning_validator] 错误 1 gmake[1]: *** [CMakeFiles/Makefile2:761:CMakeFiles/test_autoware_planning_validator.dir/all] 错误 2 gmake: *** [Makefile:146:all] 错误 2 --- Failed <<< autoware_planning_validator [54.8s, exited with code 2] Summary: 400 packages finished [12min 14s] 13 packages failed: autoware_behavior_path_goal_planner_module autoware_costmap_generator autoware_cuda_pointcloud_preprocessor autoware_dummy_perception_publisher autoware_lidar_centerpoint autoware_lidar_transfusion autoware_obstacle_cruise_planner autoware_planning_validator autoware_probabilistic_occupancy_grid_map autoware_tensorrt_plugins autoware_tensorrt_yolox bevdet_vendor trt_batched_nms 393 packages had stderr output: agnocast_e2e_test agnocast_ioctl_wrapper agnocast_sample_application agnocast_sample_interfaces agnocastlib astra_camera astra_camera_msgs autoware_accel_brake_map_calibrator autoware_adapi_adaptors autoware_adapi_specs autoware_adapi_v1_msgs autoware_adapi_version_msgs autoware_agnocast_wrapper autoware_ar_tag_based_localizer autoware_auto_common autoware_automatic_pose_initializer autoware_autonomous_emergency_braking autoware_bag_time_manager_rviz_plugin autoware_behavior_path_avoidance_by_lane_change_module autoware_behavior_path_dynamic_obstacle_avoidance_module autoware_behavior_path_external_request_lane_change_module autoware_behavior_path_goal_planner_module autoware_behavior_path_lane_change_module autoware_behavior_path_planner autoware_behavior_path_planner_common autoware_behavior_path_sampling_planner_module autoware_behavior_path_side_shift_module autoware_behavior_path_start_planner_module autoware_behavior_path_static_obstacle_avoidance_module autoware_behavior_velocity_blind_spot_module autoware_behavior_velocity_crosswalk_module autoware_behavior_velocity_detection_area_module autoware_behavior_velocity_intersection_module autoware_behavior_velocity_no_drivable_lane_module autoware_behavior_velocity_no_stopping_area_module autoware_behavior_velocity_occlusion_spot_module autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_rtc_interface autoware_behavior_velocity_run_out_module autoware_behavior_velocity_speed_bump_module autoware_behavior_velocity_stop_line_module autoware_behavior_velocity_template_module autoware_behavior_velocity_traffic_light_module autoware_behavior_velocity_virtual_traffic_light_module autoware_behavior_velocity_walkway_module autoware_bezier_sampler autoware_bluetooth_monitor autoware_boundary_departure_checker autoware_bytetrack autoware_cluster_merger autoware_collision_detector autoware_compare_map_segmentation autoware_component_interface_specs autoware_component_interface_specs_universe autoware_component_interface_tools autoware_component_interface_utils autoware_component_monitor autoware_component_state_monitor autoware_control_evaluator autoware_control_msgs autoware_control_performance_analysis autoware_control_validator autoware_core autoware_core_control autoware_core_localization autoware_core_map autoware_core_perception autoware_core_planning autoware_core_sensing autoware_core_vehicle autoware_costmap_generator autoware_crop_box_filter autoware_crosswalk_traffic_light_estimator autoware_cuda_pointcloud_preprocessor autoware_cuda_utils autoware_default_adapi autoware_detected_object_feature_remover autoware_diagnostic_graph_aggregator autoware_diagnostic_graph_utils autoware_dummy_diag_publisher autoware_dummy_infrastructure autoware_dummy_perception_publisher autoware_duplicated_node_checker autoware_ekf_localizer autoware_elevation_map_loader autoware_euclidean_cluster autoware_euclidean_cluster_object_detector autoware_external_api_msgs autoware_external_cmd_converter autoware_external_cmd_selector autoware_external_velocity_limit_selector autoware_fake_test_node autoware_fault_injection autoware_freespace_planner autoware_freespace_planning_algorithms autoware_frenet_planner autoware_geo_pose_projector autoware_geography_utils autoware_global_parameter_loader autoware_glog_component autoware_gnss_poser autoware_goal_distance_calculator autoware_grid_map_utils autoware_ground_filter autoware_ground_segmentation autoware_gyro_odometer autoware_hazard_status_converter autoware_image_diagnostics autoware_image_transport_decompressor autoware_imu_corrector autoware_internal_localization_msgs autoware_interpolation autoware_iv_external_api_adaptor autoware_iv_internal_api_adaptor autoware_joy_controller autoware_kalman_filter autoware_kinematic_evaluator autoware_landmark_manager autoware_lane_departure_checker autoware_lanelet2_extension autoware_lanelet2_extension_python autoware_lanelet2_map_visualizer autoware_lanelet2_utils autoware_learning_based_vehicle_model autoware_lidar_centerpoint autoware_lidar_marker_localizer autoware_lidar_transfusion autoware_livox_tag_filter autoware_localization_error_monitor autoware_localization_evaluator autoware_localization_msgs autoware_localization_rviz_plugin autoware_localization_util autoware_map_based_prediction autoware_map_height_fitter autoware_map_loader autoware_map_msgs autoware_map_projection_loader autoware_map_tf_generator autoware_mission_details_overlay_rviz_plugin autoware_mission_planner autoware_mission_planner_universe autoware_motion_utils autoware_motion_velocity_dynamic_obstacle_stop_module autoware_motion_velocity_obstacle_cruise_module autoware_motion_velocity_obstacle_slow_down_module autoware_motion_velocity_obstacle_stop_module autoware_motion_velocity_obstacle_velocity_limiter_module autoware_motion_velocity_out_of_lane_module autoware_motion_velocity_planner autoware_motion_velocity_planner_common autoware_motion_velocity_run_out_module autoware_mpc_lateral_controller autoware_mrm_comfortable_stop_operator autoware_mrm_emergency_stop_operator autoware_mrm_handler autoware_msgs autoware_multi_object_tracker autoware_ndt_scan_matcher autoware_node autoware_object_merger autoware_object_range_splitter autoware_object_recognition_utils autoware_object_velocity_splitter autoware_objects_of_interest_marker_interface autoware_obstacle_collision_checker autoware_obstacle_cruise_planner autoware_obstacle_stop_planner autoware_occupancy_grid_map_outlier_filter autoware_operation_mode_transition_manager autoware_osqp_interface autoware_overlay_rviz_plugin autoware_path_distance_calculator autoware_path_generator autoware_path_optimizer autoware_path_sampler autoware_path_smoother autoware_pcl_extensions autoware_perception_objects_converter autoware_perception_online_evaluator autoware_perception_rviz_plugin autoware_pid_longitudinal_controller autoware_planning_evaluator autoware_planning_factor_interface autoware_planning_rviz_plugin autoware_planning_test_manager autoware_planning_topic_converter autoware_planning_validator autoware_point_types autoware_pointcloud_preprocessor autoware_polar_grid autoware_pose2twist autoware_pose_covariance_modifier autoware_pose_estimator_arbiter autoware_pose_initializer autoware_pose_instability_detector autoware_predicted_path_checker autoware_probabilistic_occupancy_grid_map autoware_processing_time_checker autoware_pure_pursuit autoware_pyplot autoware_qp_interface autoware_radar_crossing_objects_noise_filter autoware_radar_fusion_to_detected_object autoware_radar_object_clustering autoware_radar_object_tracker autoware_radar_objects_adapter autoware_radar_scan_to_pointcloud2 autoware_radar_static_pointcloud_filter autoware_radar_threshold_filter autoware_radar_tracks_msgs_converter autoware_radar_tracks_noise_filter autoware_raw_vehicle_cmd_converter autoware_remaining_distance_time_calculator autoware_route_handler autoware_rtc_interface autoware_sampler_common autoware_scenario_selector autoware_scenario_simulator_v2_adapter autoware_sensing_msgs autoware_shape_estimation autoware_shift_decider autoware_signal_processing autoware_simple_object_merger autoware_simple_planning_simulator autoware_simple_pure_pursuit autoware_smart_mpc_trajectory_follower autoware_steer_offset_estimator autoware_stop_filter autoware_string_stamped_rviz_plugin autoware_surround_obstacle_checker autoware_system_diagnostic_monitor autoware_system_monitor autoware_system_msgs autoware_tensorrt_classifier autoware_tensorrt_plugins autoware_tensorrt_yolox autoware_test_node autoware_test_utils autoware_testing autoware_time_utils autoware_topic_relay_controller autoware_topic_state_monitor autoware_tracking_object_merger autoware_traffic_light_arbiter autoware_traffic_light_category_merger autoware_traffic_light_map_based_detector autoware_traffic_light_multi_camera_fusion autoware_traffic_light_occlusion_predictor autoware_traffic_light_recognition_marker_publisher autoware_traffic_light_selector autoware_traffic_light_utils autoware_traffic_light_visualization autoware_trajectory autoware_trajectory_follower_base autoware_trajectory_follower_node autoware_twist2accel autoware_universe_utils autoware_utils autoware_utils_debug autoware_utils_diagnostics autoware_utils_geometry autoware_utils_logging autoware_utils_math autoware_utils_pcl autoware_utils_rclcpp autoware_utils_system autoware_utils_tf autoware_utils_uuid autoware_utils_visualization autoware_v2x_msgs autoware_vehicle_cmd_gate autoware_vehicle_door_simulator autoware_vehicle_info_utils autoware_vehicle_msgs autoware_vehicle_velocity_converter autoware_velocity_smoother autoware_velodyne_monitor awapi_awiv_adapter awsim_labs_sensor_kit_description awsim_labs_sensor_kit_launch awsim_labs_vehicle_description awsim_labs_vehicle_launch awsim_sensor_kit_description awsim_sensor_kit_launch bevdet_vendor boost_io_context boost_serial_driver boost_tcp_driver boost_udp_driver camera_description can_bridge can_msgs cartop common_awsim_labs_sensor_launch common_sensor_launch continental_msgs continental_srvs cubtek_can cubtek_can_msgs cubtek_radar_adapter cuda_blackboard demo_cpp_tf dummy_status_publisher eagleye_coordinate eagleye_fix2kml eagleye_geo_pose_converter eagleye_geo_pose_fusion eagleye_gnss_converter eagleye_msgs eagleye_navigation eagleye_rt eagleye_tf glog imu_description imu_release livox_description llh_converter managed_transform_buffer morai_msgs mussp nebula_common nebula_decoders nebula_examples nebula_hw_interfaces nebula_msgs nebula_ros nebula_sensor_driver nebula_tests negotiated_examples pandar_description pandar_msgs perception_utils pointcloud_to_laserscan radar_description robosense_msgs ros2_wit_imu rtklib_bridge rtklib_msgs sample_sensor_kit_description sample_sensor_kit_launch sample_vehicle_description sample_vehicle_launch seyond single_lidar_common_launch single_lidar_sensor_kit_description single_lidar_sensor_kit_launch tier4_adapi_rviz_plugin tier4_api_msgs tier4_api_utils tier4_auto_msgs_converter tier4_autoware_api_launch tier4_camera_view_rviz_plugin tier4_control_launch tier4_control_msgs tier4_datetime_rviz_plugin tier4_debug_msgs tier4_deprecated_api_adapter tier4_dummy_object_rviz_plugin tier4_external_api_msgs tier4_hmi_msgs tier4_localization_launch tier4_localization_msgs tier4_localization_rviz_plugin tier4_map_launch tier4_map_msgs tier4_metric_msgs tier4_perception_msgs tier4_planning_factor_rviz_plugin tier4_planning_msgs tier4_rtc_msgs tier4_sensing_launch tier4_simulation_msgs tier4_state_rviz_plugin tier4_system_launch tier4_system_msgs tier4_system_rviz_plugin tier4_traffic_light_rviz_plugin tier4_v2x_msgs tier4_vehicle_launch tier4_vehicle_msgs tier4_vehicle_rviz_plugin tmlidar_msg tmlidar_sdk trt_batched_nms velodyne_description vls_description yabloc_common yabloc_image_processing yabloc_monitor yabloc_particle_filter yabloc_pose_initializer 11 packages not processed zy@zy-Lenovo-Legion-R7000P2020H:~/autoware$
最新发布
08-30
import requests import time from bs4 import BeautifulSoup import os import threading import queue import csv # 链接队列 - Creating URL queue for different hot topic categories def getUrl(): urlQueue = queue.Queue() categories = ["total", "science", "digital", "sport", "fashion", "car"] for category in categories: url = f"https://www.zhihu.com/hot?list={category}" urlQueue.put(url) return urlQueue # 获取Header - Setting up request headers def getHeader(): ua_headers = { "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36', "Referer": "https://www.zhihu.com/", "cookie": "_xsrf=mkXvB39sICLvAsCSohtN3wJp4NjqGJIG; _zap=7bb23ee1-0b94-43c3-b389-78a37a29fc30; d_c0=dwHUO4cnWBqPTjo4uOvhL5-uwcTBnDSIek4=|1745372540; q_c1=50775f2dd3934aa58baf30bfe32e6c7a|1745372540000|1745372540000; z_c0=2|1:0|10:1749004103|4:z_c0|80:MS4xRUVVd1N3QUFBQUFtQUFBQVlBSlZUVWY5TEduVjNHeVpESFROelBTX2JWVENqZy03WWN2ckVnPT0=|5124587e70e51cc5704d568f6869e725f6ee809ab0bc22eb8cc7ceb48dcfe93b; __zse_ck=004_JRdm1WT9LZeG=kS7YfvKNpKJgQsDcH/L9UBhMFT91Thl6K5njGgZ=3=sHsLhWm7hk0xO5H1iBhXjiYmLrINoKDsOAZaHXjFU3qqNXg6Ea5YttahRXHV/k8tNp2bcCXVB-aDVMPLLQZ21SkpNES5AErVwYwB3sGz+brCbUbI37Dwujuv4+dQ+/W+UA6S4yI1AmkscDetdOa63sNQK7fRFBk4rX9JuHsMMJF8ERqBtwqhMjaEeZCijEkHWf9UCm2V5r; _ga=GA1.2.398499177.1749404671; _gid=GA1.2.141142736.1749404671; tst=h; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1749004103,1749099944,1749403537,1749477236; HMACCOUNT=5F173391F3FF3AC2; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1749477717; BEC=69a31c4b51f80d1feefe6d6caeac6056; unlock_ticket=AXBTkSiPcBcmAAAAYAJVTVvwRmhgAkBdv11OMgMk9Jo7c1O--F-yrw==; SESSIONID=dgKPmYVKwd0RMSKrWlkr2IJAyBL8el97mYuGlI3U3F3; JOID=UVoUBUMZT0MGmyz6SB21l4F1qBpdfCsPWP10rwRlKnBT2HSwOUiiDGuRLv5BjftB4pjbkieY6wH5ClFjkra_P3g=; osd=U10UCksbSEMJky79SBK9lYZ1pxJfeysAUP9zrwttKHdT13yyPkitBGmWLvFJj_xB7ZDZlSeX4wP-Cl5rkLG_MHA=" } return ua_headers # 获取每个话题信息 - Getting topic information def getContent(urlQueue): while not urlQueue.empty(): try: url = urlQueue.get_nowait() html = requests.get(url=url, headers=getHeader()) htmlValue = BeautifulSoup(html.text, "html.parser") # 获取分类 - Get category from URL category = url.split("=")[-1] # 获取热门话题列表 - Get hot topic list topics = htmlValue.select('.HotItem') for topic in topics: try: # 提取话题标题 - Extract topic title title_elem = topic.select_one('.HotItem-title') title = title_elem.text.strip() if title_elem else "无标题" # 提取链接 - Extract link link_elem = topic.select_one('.HotItem-content a') link = link_elem['href'] if link_elem and 'href' in link_elem.attrs else "" # 提取热度 - Extract hotness hot_elem = topic.select_one('.HotItem-metrics') hotness = hot_elem.text.strip() if hot_elem else "0" # 提取摘要 - Extract excerpt excerpt_elem = topic.select_one('.HotItem-excerpt') excerpt = excerpt_elem.text.strip() if excerpt_elem else "无摘要" content = [[title, link, hotness, excerpt, category]] downloadContent(content) except Exception as e: print(f"提取话题数据出错: {e}") continue except queue.Empty: break except Exception as e: print(f"处理URL出错 {url}: {e}") continue # 下载内容 - Downloading content to CSV def downloadContent(content): src = "./zhihu_hot/" setDir(src) filename = src + 'zhihu_hot_topics.csv' file_exists = os.path.isfile(filename) with open(filename, 'a', newline='', encoding='utf-8-sig') as writer: f_csv = csv.writer(writer) if not file_exists: f_csv.writerow(['标题', '链接', '热度', '摘要', '分类']) f_csv.writerows(content) # 创建目录 - Creating directory if not exists def setDir(filepath): if not os.path.exists(filepath): os.mkdir(filepath) # 主函数 - Main function def main(): start_time = time.time() urlQueue = getUrl() # 多线程启动任务 - Start multiple threads thread_list = [] for i in range(6): # 创建6个线程 thread = threading.Thread(target=getContent, args=(urlQueue,)) thread_list.append(thread) for t in thread_list: t.start() # 启动线程 for t in thread_list: t.join() # 阻塞主线程直到子线程完成 end_time = time.time() print("完成任务耗时为:", end_time - start_time, "秒") if __name__ == '__main__': main() 将上述代码修改为只爬取排名,标题,链接,热度
06-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值