将爬虫采集器替换并嵌入合并到系统中,大幅度提高爬取速度

master
wufayuan 2 years ago
parent 13bcb4a915
commit ddcf395145

@ -5,11 +5,10 @@ daemon = True
buffer_size = 8 * 1024 * 1024 buffer_size = 8 * 1024 * 1024
[crawler] [crawler]
edge_driver_path = G:\course\yykf\dcs\bin\msedgedriver.exe
max_count_of_crawlers = 10 max_count_of_crawlers = 10
[database] [database]
ip = 192.168.43.64 ip = 192.168.43.65
user = root user = root
password = 427318Aa password = 427318Aa
database = test database = test

@ -2,54 +2,25 @@ import json
import multiprocessing import multiprocessing
import socket import socket
import struct import struct
from configparser import ConfigParser
from json import JSONDecoder from json import JSONDecoder
from msedge.selenium_tools import Edge from dcs.tests.fastcrawler import *
from msedge.selenium_tools import EdgeOptions
from dcs.tests.zhiwang import *
from dcs.tools import message_process as mp from dcs.tools import message_process as mp
from dcs.tools.message_process import parse_request, generate_response from dcs.tools.message_process import parse_request, generate_response
def crawl_zhiwang(word, pages_start, pages_end): def crawl_zhiwang(word, pages_start, pages_end):
logger.info(f'[CRAWLER] crawling pages {pages_start}-{pages_end} of keyword {word}...') logger.info(f'[CRAWLER] crawling pages {pages_start}-{pages_end} of keyword {word}...')
edge_options = EdgeOptions() logger.info(f'[CRAWLER] local crawler is starting...')
edge_options.use_chromium = True
No_Image_loading = {"profile.managed_default_content_settings.images": 2, 'permissions.default.stylesheet': 2}
edge_options.add_experimental_option("prefs", No_Image_loading)
edge_options.add_argument('--headless')
configFile = '../../conf/settings.ini'
con = ConfigParser()
con.read(configFile, encoding='utf-8')
items = con.items('crawler')
items = dict(items)['edge_driver_path']
# print(items)
driver = Edge(options=edge_options, executable_path=items)
soup = driver_open(driver, word)
papers = [] # 用于保存爬取到的论文
paper_id = 0
res = {} # 保存终端爬取结果 res = {} # 保存终端爬取结果
fast_crawler = Fast_crawler()
# 爬取第一篇
if pages_start == 1:
spider(driver, soup, papers)
pages_start += 1
while paper_id < len(papers):
write2res(papers[paper_id], res)
paper_id += 1
while pages_start < pages_end: while pages_start < pages_end:
content = change_page(driver, pages_start) papers = fast_crawler.crawl(word, pages_start)
spider(driver, content, papers) for paper in papers:
while paper_id < len(papers): write2res(paper, res)
write2res(papers[paper_id], res)
paper_id += 1
pages_start += 1 pages_start += 1
driver.close() return res
return res
def write2res(paper: Paper, res): def write2res(paper: Paper, res):

@ -9,7 +9,7 @@ port = 7777
local_ip = ip local_ip = ip
local_port = None local_port = None
# 开启的分布节点数量 # 开启的分布节点数量
count = 5 count = 3
if __name__ == '__main__': if __name__ == '__main__':
clients = [] clients = []

File diff suppressed because one or more lines are too long

@ -1,26 +1,90 @@
import threading import threading
from collections import deque from collections import deque
import bs4 import bs4
from dcs.tests.zhiwang import *
# 定义论文类
import requests
from loguru import logger
class Paper:
def __init__(self, title, authors):
self.title = title
self.authors = authors
def __str__(self):
s = f'title: {self.title}\n'
for i in self.authors:
s += f'author: {i}\n'
return s
# 定义作者类
class Author:
def __init__(self, name, college, major):
self.name = name
self.college = college
self.major = major
class Crawler: def __str__(self):
return f'{self.name}, {self.college}, {self.major}'
class Fast_crawler:
def __init__(self): def __init__(self):
self.url = 'https://kns.cnki.net/kns8/Brief/GetGridTableHtml'
self.url = 'https://kns.cnki.net/kns8/Group/Result'
self.url = 'https://wap.cnki.net/touch/web/Article/Search' self.url = 'https://wap.cnki.net/touch/web/Article/Search'
self.headers = { self.headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.49'} 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.49'}
self.cookies = 'Ecp_ClientId=1220704081600243712; Ecp_loginuserbk=wh0302; knsLeftGroupSelectItem=1;2;; Ecp_ClientIp=202.197.9.22; SID_sug=126002; _pk_ses=*; Ecp_IpLoginFail=220708116.162.2.165; _pk_id=6f3fe3b8-fcc4-4111-ad5f-c2f8aba3a0e3.1656893782.2.1657209667.1657209661.; ASP.NET_SessionId=uppv4o3sgpf45j1lmsc4ogin; SID_kns8=015123157; dblang=ch' self.cookies = 'Ecp_ClientId=1220704081600243712; Ecp_loginuserbk=wh0302; knsLeftGroupSelectItem=1;2;; Ecp_ClientIp=202.197.9.22; SID_sug=126002; _pk_ses=*; Ecp_IpLoginFail=220708116.162.2.165; _pk_id=6f3fe3b8-fcc4-4111-ad5f-c2f8aba3a0e3.1656893782.2.1657209667.1657209661.; ASP.NET_SessionId=uppv4o3sgpf45j1lmsc4ogin; SID_kns8=015123157; dblang=ch'
def get_search_html(self): def get_search_html(self, word, index):
params = { params = {
'searchtype': 0, "searchtype": "0",
'fieldtype': 101, "dbtype": "",
'keyword': 'computer' "pageindex": index,
"pagesize": "10",
"ispart": "False",
"theme_kw": "",
"title_kw": "",
"full_kw": "",
"author_kw": "",
"depart_kw": "",
"key_kw": "",
"abstract_kw": "",
"source_kw": "",
"teacher_md": "",
"catalog_md": "",
"depart_md": "",
"refer_md": "",
"name_meet": "",
"collect_meet": "",
"keyword": word,
"remark": "",
"fieldtype": "101",
"sorttype": "0",
"articletype": "-1",
"yeartype": "0",
"yearinterval": "",
"screentype": "0",
"isscreen": "",
"subject_sc": "",
"research_sc": "",
"depart_sc": "",
"sponsor_sc": "",
"author_sc": "",
"teacher_sc": "",
"subjectcode_sc": "",
"researchcode_sc": "",
"departcode_sc": "",
"sponsorcode_sc": "",
"authorcode_sc": "",
"teachercode_sc": "",
"starttime_sc": "",
"endtime_sc": "",
"timestate_sc": ""
} }
self.headers.update({'X-Requested-With': 'XMLHttpRequest'})
res = requests.post(self.url, data=params, headers=self.headers) res = requests.post(self.url, data=params, headers=self.headers)
if res.status_code == 200: if res.status_code == 200:
@ -28,7 +92,7 @@ class Crawler:
return soup return soup
def get_html_by_link(self, link): def get_html_by_link(self, link):
logger.debug(link) # logger.debug(link)
res = requests.get('https:' + link, headers=self.headers) res = requests.get('https:' + link, headers=self.headers)
if res.status_code == 200: if res.status_code == 200:
soup = bs4.BeautifulSoup(res.text, 'html.parser') soup = bs4.BeautifulSoup(res.text, 'html.parser')
@ -48,17 +112,19 @@ class Crawler:
title = soup.find('div', class_='c-card__title2').text.strip() title = soup.find('div', class_='c-card__title2').text.strip()
authors = soup.find('div', class_='c-card__author') authors = soup.find('div', class_='c-card__author')
if '\x20' in authors.text: authors_links = [i.attrs['href'] for i in authors.find_all('a')]
authors_links_pcd = [i for i in authors_links if i != 'javascript:void(0);']
if len(authors_links_pcd) == 0:
logger.warning('[PARSE] paper parser can not find authors info!')
res.append(Paper(title, [Author(None, None, None)])) res.append(Paper(title, [Author(None, None, None)]))
return return
authors_links = [i.attrs['href'] for i in authors.find_all('a')]
authors_list = [] authors_list = []
for i in authors_links: for i in authors_links_pcd:
if i == 'javascript:void(0);': author_result = self.parse_author_html(self.get_html_by_link(i))
continue if author_result:
authors_list.append(self.parse_author_html(self.get_html_by_link(i))) authors_list.append(author_result)
res.append(Paper(title, authors)) res.append(Paper(title, authors_list))
@staticmethod @staticmethod
def parse_author_html(soup: bs4.BeautifulSoup): def parse_author_html(soup: bs4.BeautifulSoup):
@ -66,19 +132,19 @@ class Crawler:
name = soup.find('div', class_='zz-middle-name-text').text.strip() name = soup.find('div', class_='zz-middle-name-text').text.strip()
college = soup.find('div', class_='zz-middle-company').text.strip() college = soup.find('div', class_='zz-middle-company').text.strip()
major = soup.find('div', class_='zz-info-chart').find('span').text.strip() major = soup.find('div', class_='zz-info-chart').find('span').text.strip()
# print(name)
# print(college)
# print(major)
except AttributeError: except AttributeError:
name = soup.find('div', class_='c-nav__item c-nav__title').text.strip() # logger.warning(f'[PARSE] author parser can not find personal info')
college = None # name = soup.find('div', class_='c-nav__item c-nav__title').text.strip()
major = None # college = None
# major = None
# 这是机构信息,在作者详细信息里面有, 暂时不爬
return None
return Author(name, college, major) return Author(name, college, major)
def crawl(self): def crawl(self, word, index):
sh = self.get_search_html() sh = self.get_search_html(word, index)
pl = self.get_paper_links(sh) pl = self.get_paper_links(sh)
res = deque() res: deque[Paper] = deque()
threads = [] threads = []
for p in pl: for p in pl:
if p == 'javascript:void(0);': if p == 'javascript:void(0);':
@ -86,13 +152,14 @@ class Crawler:
p = self.get_html_by_link(p) p = self.get_html_by_link(p)
t = threading.Thread(target=self.parse_paper_html, args=(p, res,)) t = threading.Thread(target=self.parse_paper_html, args=(p, res,))
threads.append(t) threads.append(t)
# break
[t.start() for t in threads] [t.start() for t in threads]
[t.join() for t in threads] [t.join() for t in threads]
return res return res
if __name__ == '__main__': if __name__ == '__main__':
crawler = Crawler() crawler = Fast_crawler()
data = crawler.crawl() data = crawler.crawl('computer', 1)
for r in data: for r in data:
print(r) print(r)

@ -1,14 +1,10 @@
import random import random
import socket import socket
import threading
from time import sleep from time import sleep
from typing import Optional from typing import Optional
from msedge.selenium_tools import Edge
from msedge.selenium_tools import EdgeOptions
from conf.config import global_var, get_free_addresses, get_crawl_result, get_by_cookie, set_state_client from conf.config import global_var, get_free_addresses, get_crawl_result, get_by_cookie, set_state_client
from dcs.tests.zhiwang import * from dcs.tests.fastcrawler import *
from dcs.tools.database import get_last_crawl_id, create_crawl_result_table from dcs.tools.database import get_last_crawl_id, create_crawl_result_table
from dcs.tools.database import write_results2database from dcs.tools.database import write_results2database
@ -25,39 +21,19 @@ class Crawler(threading.Thread):
self.partial_task = partial_task self.partial_task = partial_task
self.last_crawl_id = last_crawl_id self.last_crawl_id = last_crawl_id
self.results = results self.results = results
self.edge_driver_path = dict(global_var.configs.items('crawler'))['edge_driver_path']
def crawl_zhiwang(self, user_name=None): def crawl_zhiwang(self, user_name=None):
edge_options = EdgeOptions() logger.info(f'[CRAWLER] local crawler is starting...')
edge_options.use_chromium = True
edge_options.add_argument('--headless')
No_Image_loading = {"profile.managed_default_content_settings.images": 2, 'permissions.default.stylesheet': 2}
edge_options.add_experimental_option("prefs", No_Image_loading)
driver = Edge(options=edge_options, executable_path=self.edge_driver_path)
soup = driver_open(driver, self.partial_task.word) # 搜索word
papers = [] # 用于保存爬取到的论文
table_name = f'{user_name}_crawl_result' table_name = f'{user_name}_crawl_result'
create_crawl_result_table(table_name=table_name) create_crawl_result_table(table_name=table_name)
self.partial_task.crawl_id = self.last_crawl_id + 1 self.partial_task.crawl_id = self.last_crawl_id + 1
paper_id = 0 fast_crawler = Fast_crawler()
# 爬取第一篇
if self.partial_task.pages_start == 1:
spider(driver, soup, papers)
self.partial_task.pages_start += 1
while paper_id < len(papers):
write2results(papers[paper_id], results=self.results)
paper_id += 1
while self.partial_task.pages_start < self.partial_task.pages_end: while self.partial_task.pages_start < self.partial_task.pages_end:
content = change_page(driver, self.partial_task.pages_start) papers = fast_crawler.crawl(self.partial_task.word, self.partial_task.pages_start)
spider(driver, content, papers) for paper in papers:
while paper_id < len(papers): write2results(paper, results=self.results)
write2results(papers[paper_id], results=self.results)
paper_id += 1
self.partial_task.pages_start += 1 self.partial_task.pages_start += 1
driver.close()
def test_simulation(self, user_name): def test_simulation(self, user_name):
table_name = f'{user_name}_crawl_result' table_name = f'{user_name}_crawl_result'
@ -78,8 +54,8 @@ class Crawler(threading.Thread):
def run(self) -> None: def run(self) -> None:
try: try:
# self.crawl_zhiwang(user_name=self.partial_task.cui.user_name) self.crawl_zhiwang(user_name=self.partial_task.cui.user_name)
self.test_simulation(user_name=self.partial_task.cui.user_name) # self.test_simulation(user_name=self.partial_task.cui.user_name)
except Exception as e: except Exception as e:
logger.error(f'[ERROR] {str(e)}') logger.error(f'[ERROR] {str(e)}')
finally: finally:
@ -185,16 +161,16 @@ class Spider_task(threading.Thread):
self.free_remote_nodes.remove(f_node) self.free_remote_nodes.remove(f_node)
break break
else: else:
logger.warning(f'[TASK] generate failed, no free remote nodes! spider task {task.request_map} is at state waiting...') logger.warning(f'[TASK] generate remote task failed, no free remote nodes! spider task {task.request_map} is at state waiting...')
logger.info(f'[TASK] generating local task {task.request_map}') logger.info(f'[TASK] generating local task {task.request_map}')
if global_var.spider.crawlers >= global_var.spider.max_count_of_crawlers: if global_var.spider.crawlers >= global_var.spider.max_count_of_crawlers:
logger.warning(f'[TASK] generate failed, crawlers exceed! spider task {task.request_map} is at state waiting...') logger.warning(f'[TASK] generate local task failed, crawlers exceed! spider task {task.request_map} is at state waiting...')
break break
else: else:
crawler = Crawler(task, self.last_crawl_id, self.results) _crawler = Crawler(task, self.last_crawl_id, self.results)
task.thread = crawler task.thread = _crawler
task.task_type = 'local' task.task_type = 'local'
crawler.start() _crawler.start()
global_var.spider.crawlers += 1 global_var.spider.crawlers += 1
if self.is_all_task_crawled(): if self.is_all_task_crawled():
break break

@ -4,11 +4,11 @@ import time
import requests import requests
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
# 定义论文类
from loguru import logger from loguru import logger
from selenium.webdriver.common.by import By from selenium.webdriver.common.by import By
# 定义论文类
class Paper: class Paper:
def __init__(self, title, authors): def __init__(self, title, authors):
self.title = title self.title = title

@ -171,7 +171,7 @@ def create_table(create_sql: str):
cur.close() cur.close()
conn.close() conn.close()
except Exception as e: except Exception as e:
logger.error(f'[ERROR] {str(e)}') logger.warning(f'[DATABASE] {str(e)}')
def create_crawl_result_table(table_name: str): def create_crawl_result_table(table_name: str):

@ -1,859 +1,5 @@
{ {
"crawl_id": 71, "crawl_id": 76,
"table_name": "god_crawl_result", "table_name": "god_crawl_result",
"data": [
[
"test",
"test",
"test",
"test"
],
[
"test",
"test",
"test",
"test"
],
[
"test",
"test",
"test",
"test"
],
[
"test",
"test",
"test",
"test"
],
[
"test",
"test",
"test",
"test"
],
[
"test",
"test",
"test",
"test"
],
[
"孙亚康",
null,
null,
"基于计算机视觉的预制墙板临时支撑安全合规性检查"
],
[
"郭红领",
"清华大学",
"建筑科学与工程;计算机软件及计算机应用;安全科学与灾害防治;",
"基于计算机视觉的预制墙板临时支撑安全合规性检查"
],
[
"罗柱邦",
"清华大学",
"计算机软件及计算机应用;建筑科学与工程;基础医学;",
"基于计算机视觉的预制墙板临时支撑安全合规性检查"
],
[
"张智慧",
"清华大学",
"环境科学与资源利用;建筑科学与工程;工业经济;",
"基于计算机视觉的预制墙板临时支撑安全合规性检查"
],
[
"孙亚康",
null,
null,
"基于计算机视觉的预制墙板临时支撑安全合规性检查"
],
[
"郭红领",
"清华大学",
"建筑科学与工程;计算机软件及计算机应用;安全科学与灾害防治;",
"基于计算机视觉的预制墙板临时支撑安全合规性检查"
],
[
"罗柱邦",
"清华大学",
"计算机软件及计算机应用;建筑科学与工程;基础医学;",
"基于计算机视觉的预制墙板临时支撑安全合规性检查"
],
[
"张智慧",
"清华大学",
"环境科学与资源利用;建筑科学与工程;工业经济;",
"基于计算机视觉的预制墙板临时支撑安全合规性检查"
],
[
"刘思源",
"西南大学",
"计算机硬件技术;高等教育;",
"基于大规模课程大纲数据的中美高校计算机相关课程考核的比较分析"
],
[
"冯蕾霖",
"西南大学",
"计算机硬件技术;",
"基于大规模课程大纲数据的中美高校计算机相关课程考核的比较分析"
],
[
"朱章黔",
"陆军勤务学院",
"数学;计算机硬件技术;计算机软件及计算机应用;",
"基于大规模课程大纲数据的中美高校计算机相关课程考核的比较分析"
],
[
"贾韬",
"西南大学",
"科学研究管理;计算机软件及计算机应用;自动化技术;",
"基于大规模课程大纲数据的中美高校计算机相关课程考核的比较分析"
],
[
"刘思源",
"西南大学",
"计算机硬件技术;高等教育;",
"基于大规模课程大纲数据的中美高校计算机相关课程考核的比较分析"
],
[
"冯蕾霖",
"西南大学",
"计算机硬件技术;",
"基于大规模课程大纲数据的中美高校计算机相关课程考核的比较分析"
],
[
"朱章黔",
"陆军勤务学院",
"数学;计算机硬件技术;计算机软件及计算机应用;",
"基于大规模课程大纲数据的中美高校计算机相关课程考核的比较分析"
],
[
"贾韬",
"西南大学",
"科学研究管理;计算机软件及计算机应用;自动化技术;",
"基于大规模课程大纲数据的中美高校计算机相关课程考核的比较分析"
],
[
"吴迪",
"承德医学院附属医院",
"外科学;临床医学;生物学;",
"3D打印技术与计算机辅助设计应用在全膝关节置换治疗重度膝关节骨关节炎中的可行性"
],
[
"司丽娜",
"承德医学院",
"基础医学;生物学;外科学;",
"3D打印技术与计算机辅助设计应用在全膝关节置换治疗重度膝关节骨关节炎中的可行性"
],
[
"武丽珠",
"承德市中心医院",
"外科学;心血管系统疾病;急救医学;",
"3D打印技术与计算机辅助设计应用在全膝关节置换治疗重度膝关节骨关节炎中的可行性"
],
[
"王建华",
"承德医学院附属医院",
"外科学;计算机软件及计算机应用;基础医学;",
"3D打印技术与计算机辅助设计应用在全膝关节置换治疗重度膝关节骨关节炎中的可行性"
],
[
"罗金伟",
"承德医学院附属医院",
"外科学;",
"3D打印技术与计算机辅助设计应用在全膝关节置换治疗重度膝关节骨关节炎中的可行性"
],
[
"常乾坤",
"承德医学院附属医院",
"外科学;临床医学;基础医学;",
"3D打印技术与计算机辅助设计应用在全膝关节置换治疗重度膝关节骨关节炎中的可行性"
],
[
"吕永明",
"承德医学院附属医院",
"外科学;内分泌腺及全身性疾病;临床医学;",
"3D打印技术与计算机辅助设计应用在全膝关节置换治疗重度膝关节骨关节炎中的可行性"
],
[
"杜元良",
"承德医学院附属医院",
"外科学;内分泌腺及全身性疾病;基础医学;",
"3D打印技术与计算机辅助设计应用在全膝关节置换治疗重度膝关节骨关节炎中的可行性"
],
[
"吴迪",
"承德医学院附属医院",
"外科学;临床医学;生物学;",
"3D打印技术与计算机辅助设计应用在全膝关节置换治疗重度膝关节骨关节炎中的可行性"
],
[
"司丽娜",
"承德医学院",
"基础医学;生物学;外科学;",
"3D打印技术与计算机辅助设计应用在全膝关节置换治疗重度膝关节骨关节炎中的可行性"
],
[
"武丽珠",
"承德市中心医院",
"外科学;心血管系统疾病;急救医学;",
"3D打印技术与计算机辅助设计应用在全膝关节置换治疗重度膝关节骨关节炎中的可行性"
],
[
"王建华",
"承德医学院附属医院",
"外科学;计算机软件及计算机应用;基础医学;",
"3D打印技术与计算机辅助设计应用在全膝关节置换治疗重度膝关节骨关节炎中的可行性"
],
[
"罗金伟",
"承德医学院附属医院",
"外科学;",
"3D打印技术与计算机辅助设计应用在全膝关节置换治疗重度膝关节骨关节炎中的可行性"
],
[
"常乾坤",
"承德医学院附属医院",
"外科学;临床医学;基础医学;",
"3D打印技术与计算机辅助设计应用在全膝关节置换治疗重度膝关节骨关节炎中的可行性"
],
[
"吕永明",
"承德医学院附属医院",
"外科学;内分泌腺及全身性疾病;临床医学;",
"3D打印技术与计算机辅助设计应用在全膝关节置换治疗重度膝关节骨关节炎中的可行性"
],
[
"杜元良",
"承德医学院附属医院",
"外科学;内分泌腺及全身性疾病;基础医学;",
"3D打印技术与计算机辅助设计应用在全膝关节置换治疗重度膝关节骨关节炎中的可行性"
],
[
"康熙",
"中国农业大学",
"计算机软件及计算机应用;农业工程;畜牧与动物医学;",
"基于计算机视觉的奶牛生理参数监测与疾病诊断研究进展及挑战"
],
[
"刘刚",
"中国农业大学",
"计算机软件及计算机应用;自动化技术;农业工程;",
"基于计算机视觉的奶牛生理参数监测与疾病诊断研究进展及挑战"
],
[
"初梦苑",
"河北农业大学",
"计算机软件及计算机应用;畜牧与动物医学;",
"基于计算机视觉的奶牛生理参数监测与疾病诊断研究进展及挑战"
],
[
"李前",
"中国农业大学",
"计算机软件及计算机应用;",
"基于计算机视觉的奶牛生理参数监测与疾病诊断研究进展及挑战"
],
[
"王彦超",
"中国农业大学",
"计算机软件及计算机应用;畜牧与动物医学;",
"基于计算机视觉的奶牛生理参数监测与疾病诊断研究进展及挑战"
],
[
"康熙",
"中国农业大学",
"计算机软件及计算机应用;农业工程;畜牧与动物医学;",
"基于计算机视觉的奶牛生理参数监测与疾病诊断研究进展及挑战"
],
[
"刘刚",
"中国农业大学",
"计算机软件及计算机应用;自动化技术;农业工程;",
"基于计算机视觉的奶牛生理参数监测与疾病诊断研究进展及挑战"
],
[
"初梦苑",
"河北农业大学",
"计算机软件及计算机应用;畜牧与动物医学;",
"基于计算机视觉的奶牛生理参数监测与疾病诊断研究进展及挑战"
],
[
"李前",
"中国农业大学",
"计算机软件及计算机应用;",
"基于计算机视觉的奶牛生理参数监测与疾病诊断研究进展及挑战"
],
[
"王彦超",
"中国农业大学",
"计算机软件及计算机应用;畜牧与动物医学;",
"基于计算机视觉的奶牛生理参数监测与疾病诊断研究进展及挑战"
],
[
"杨骏",
"乐山师范学院",
"计算机软件及计算机应用;自动化技术;电信技术;",
"地方高校计算机专业人才工程能力培养策略"
],
[
"项炜",
"乐山师范学院",
"计算机软件及计算机应用;计算机硬件技术;高等教育;",
"地方高校计算机专业人才工程能力培养策略"
],
[
"敬思远",
"乐山师范学院",
"计算机软件及计算机应用;自动化技术;计算机硬件技术;",
"地方高校计算机专业人才工程能力培养策略"
],
[
"苏炳均",
"乐山师范学院",
"计算机软件及计算机应用;计算机硬件技术;电信技术;",
"地方高校计算机专业人才工程能力培养策略"
],
[
"杨骏",
"乐山师范学院",
"计算机软件及计算机应用;自动化技术;电信技术;",
"地方高校计算机专业人才工程能力培养策略"
],
[
"项炜",
"乐山师范学院",
"计算机软件及计算机应用;计算机硬件技术;高等教育;",
"地方高校计算机专业人才工程能力培养策略"
],
[
"敬思远",
"乐山师范学院",
"计算机软件及计算机应用;自动化技术;计算机硬件技术;",
"地方高校计算机专业人才工程能力培养策略"
],
[
"苏炳均",
"乐山师范学院",
"计算机软件及计算机应用;计算机硬件技术;电信技术;",
"地方高校计算机专业人才工程能力培养策略"
],
[
"张娜娜",
"上海思博职业技术学院",
"计算机软件及计算机应用;轻工业手工业;",
"基于计算机视觉传达的皮革缺陷检测算法研究"
],
[
"张娜娜",
"上海思博职业技术学院",
"计算机软件及计算机应用;轻工业手工业;",
"基于计算机视觉传达的皮革缺陷检测算法研究"
],
[
"李晓辉",
"沈阳农业大学",
"计算机软件及计算机应用;计算机硬件技术;高等教育;",
"新农科背景下大学生计算机应用能力提升教学研究与实践"
],
[
"杨洪伟",
"沈阳农业大学",
"计算机软件及计算机应用;计算机硬件技术;高等教育;",
"新农科背景下大学生计算机应用能力提升教学研究与实践"
],
[
"蒋兰玲",
"辽宁省农业科学院",
"计算机软件及计算机应用;计算机硬件技术;园艺;",
"新农科背景下大学生计算机应用能力提升教学研究与实践"
],
[
"张芳",
"沈阳农业大学",
"计算机软件及计算机应用;计算机硬件技术;高等教育;",
"新农科背景下大学生计算机应用能力提升教学研究与实践"
],
[
"李晓辉",
"沈阳农业大学",
"计算机软件及计算机应用;计算机硬件技术;高等教育;",
"新农科背景下大学生计算机应用能力提升教学研究与实践"
],
[
"杨洪伟",
"沈阳农业大学",
"计算机软件及计算机应用;计算机硬件技术;高等教育;",
"新农科背景下大学生计算机应用能力提升教学研究与实践"
],
[
"蒋兰玲",
"辽宁省农业科学院",
"计算机软件及计算机应用;计算机硬件技术;园艺;",
"新农科背景下大学生计算机应用能力提升教学研究与实践"
],
[
"张芳",
"沈阳农业大学",
"计算机软件及计算机应用;计算机硬件技术;高等教育;",
"新农科背景下大学生计算机应用能力提升教学研究与实践"
],
[
"贾小军",
"嘉兴学院",
"计算机软件及计算机应用;自动化技术;教育理论与教育管理;",
"基于“复盘”模式的计算机通识课程管理研究"
],
[
"张春花",
"嘉兴学院",
"计算机硬件技术;",
"基于“复盘”模式的计算机通识课程管理研究"
],
[
"刘子豪",
"嘉兴学院",
"计算机软件及计算机应用;自动化技术;仪器仪表工业;",
"基于“复盘”模式的计算机通识课程管理研究"
],
[
"贾小军",
"嘉兴学院",
"计算机软件及计算机应用;自动化技术;教育理论与教育管理;",
"基于“复盘”模式的计算机通识课程管理研究"
],
[
"张春花",
"嘉兴学院",
"计算机硬件技术;",
"基于“复盘”模式的计算机通识课程管理研究"
],
[
"刘子豪",
"嘉兴学院",
"计算机软件及计算机应用;自动化技术;仪器仪表工业;",
"基于“复盘”模式的计算机通识课程管理研究"
],
[
"周学勇",
"信阳师范学院",
"数学;高等教育;生物学;",
"一类分数阶计算机病毒模型的稳定性分析"
],
[
"路振国",
"信阳师范学院",
"数学;高等教育;",
"一类分数阶计算机病毒模型的稳定性分析"
],
[
"程晓明",
"信阳师范学院",
"数学;",
"一类分数阶计算机病毒模型的稳定性分析"
],
[
"周学勇",
"信阳师范学院",
"数学;高等教育;生物学;",
"一类分数阶计算机病毒模型的稳定性分析"
],
[
"路振国",
"信阳师范学院",
"数学;高等教育;",
"一类分数阶计算机病毒模型的稳定性分析"
],
[
"程晓明",
"信阳师范学院",
"数学;",
"一类分数阶计算机病毒模型的稳定性分析"
],
[
"李娜",
"中国科学院大学",
"生物学;计算机软件及计算机应用;生物医学工程;",
"计算机辅助血管介入技术进展综述"
],
[
"贺建安",
"东南大学",
"生物学;计算机软件及计算机应用;生物医学工程;",
"计算机辅助血管介入技术进展综述"
],
[
"陈阳",
"东南大学",
"计算机软件及计算机应用;临床医学;计算机硬件技术;",
"计算机辅助血管介入技术进展综述"
],
[
"周寿军",
"中国科学院深圳先进技术研究院",
"计算机软件及计算机应用;生物医学工程;外科学;",
"计算机辅助血管介入技术进展综述"
],
[
"李娜",
"中国科学院大学",
"生物学;计算机软件及计算机应用;生物医学工程;",
"计算机辅助血管介入技术进展综述"
],
[
"贺建安",
"东南大学",
"生物学;计算机软件及计算机应用;生物医学工程;",
"计算机辅助血管介入技术进展综述"
],
[
"陈阳",
"东南大学",
"计算机软件及计算机应用;临床医学;计算机硬件技术;",
"计算机辅助血管介入技术进展综述"
],
[
"周寿军",
"中国科学院深圳先进技术研究院",
"计算机软件及计算机应用;生物医学工程;外科学;",
"计算机辅助血管介入技术进展综述"
],
[
"李正凡",
"云南华能澜沧江水电有限公司",
"水利水电工程;电力工业;自动化技术;",
"基于时间序列的国产化水电站计算机监控系统异常行为报警方法应用"
],
[
"谭良良",
"南京市南瑞继保工程技术有限公司",
"水利水电工程;电力工业;自动化技术;",
"基于时间序列的国产化水电站计算机监控系统异常行为报警方法应用"
],
[
"杨渊",
"西安热工研究院有限公司",
"电力工业;电信技术;水利水电工程;",
"基于时间序列的国产化水电站计算机监控系统异常行为报警方法应用"
],
[
"陈映喜",
"云南华能澜沧江水电有限公司",
"电力工业;水利水电工程;自动化技术;",
"基于时间序列的国产化水电站计算机监控系统异常行为报警方法应用"
],
[
"周喜",
"云南华能澜沧江水电有限公司",
"水利水电工程;电力工业;自动化技术;",
"基于时间序列的国产化水电站计算机监控系统异常行为报警方法应用"
],
[
"杨伟",
"南京市南瑞继保工程技术有限公司",
"水利水电工程;电力工业;自动化技术;",
"基于时间序列的国产化水电站计算机监控系统异常行为报警方法应用"
],
[
"李正凡",
"云南华能澜沧江水电有限公司",
"水利水电工程;电力工业;自动化技术;",
"基于时间序列的国产化水电站计算机监控系统异常行为报警方法应用"
],
[
"谭良良",
"南京市南瑞继保工程技术有限公司",
"水利水电工程;电力工业;自动化技术;",
"基于时间序列的国产化水电站计算机监控系统异常行为报警方法应用"
],
[
"杨渊",
"西安热工研究院有限公司",
"电力工业;电信技术;水利水电工程;",
"基于时间序列的国产化水电站计算机监控系统异常行为报警方法应用"
],
[
"陈映喜",
"云南华能澜沧江水电有限公司",
"电力工业;水利水电工程;自动化技术;",
"基于时间序列的国产化水电站计算机监控系统异常行为报警方法应用"
],
[
"周喜",
"云南华能澜沧江水电有限公司",
"水利水电工程;电力工业;自动化技术;",
"基于时间序列的国产化水电站计算机监控系统异常行为报警方法应用"
],
[
"杨伟",
"南京市南瑞继保工程技术有限公司",
"水利水电工程;电力工业;自动化技术;",
"基于时间序列的国产化水电站计算机监控系统异常行为报警方法应用"
],
[
"刘文",
"上海大学",
"航空航天科学与工程;计算机软件及计算机应用;",
"基于机载计算机的无人机智能巡检方案"
],
[
"陆小锋",
"上海大学",
"计算机软件及计算机应用;临床医学;神经病学;",
"基于机载计算机的无人机智能巡检方案"
],
[
"毛建华",
"上海大学",
"计算机软件及计算机应用;自然地理学和测绘学;自动化技术;",
"基于机载计算机的无人机智能巡检方案"
],
[
"方思凯",
"Shanghai University",
"航空航天科学与工程;计算机软件及计算机应用;",
"基于机载计算机的无人机智能巡检方案"
],
[
"钱国",
"上海宝冶冶金工程有限公司",
"计算机软件及计算机应用;建筑科学与工程;航空航天科学与工程;",
"基于机载计算机的无人机智能巡检方案"
],
[
"刘文",
"上海大学",
"航空航天科学与工程;计算机软件及计算机应用;",
"基于机载计算机的无人机智能巡检方案"
],
[
"陆小锋",
"上海大学",
"计算机软件及计算机应用;临床医学;神经病学;",
"基于机载计算机的无人机智能巡检方案"
],
[
"毛建华",
"上海大学",
"计算机软件及计算机应用;自然地理学和测绘学;自动化技术;",
"基于机载计算机的无人机智能巡检方案"
],
[
"方思凯",
"Shanghai University",
"航空航天科学与工程;计算机软件及计算机应用;",
"基于机载计算机的无人机智能巡检方案"
],
[
"钱国",
"上海宝冶冶金工程有限公司",
"计算机软件及计算机应用;建筑科学与工程;航空航天科学与工程;",
"基于机载计算机的无人机智能巡检方案"
],
[
"黄立鹤",
"同济大学",
"中国语言文字;外国语言文字;高等教育;",
"老年话语的计算机自动文本分析:进展与前景"
],
[
"曲惠宇",
"同济大学",
"中国语言文字;",
"老年话语的计算机自动文本分析:进展与前景"
],
[
"杨晶晶",
"同济大学",
"中国语言文字;精神病学;中国政治与国际政治;",
"老年话语的计算机自动文本分析:进展与前景"
],
[
"黄立鹤",
"同济大学",
"中国语言文字;外国语言文字;高等教育;",
"老年话语的计算机自动文本分析:进展与前景"
],
[
"曲惠宇",
"同济大学",
"中国语言文字;",
"老年话语的计算机自动文本分析:进展与前景"
],
[
"杨晶晶",
"同济大学",
"中国语言文字;精神病学;中国政治与国际政治;",
"老年话语的计算机自动文本分析:进展与前景"
],
[
"杨乐",
"山西工程科技职业大学",
"互联网技术;高等教育;",
"关于高校计算机实验室网络安全管理的研究"
],
[
"杨乐",
"山西工程科技职业大学",
"互联网技术;高等教育;",
"关于高校计算机实验室网络安全管理的研究"
],
[
"孟云飞",
"哈尔滨职业技术学院",
"计算机软件及计算机应用;轻工业手工业;教育理论与教育管理;",
"计算机系统与信息管理融合发展研究"
],
[
"孟云飞",
"哈尔滨职业技术学院",
"计算机软件及计算机应用;轻工业手工业;教育理论与教育管理;",
"计算机系统与信息管理融合发展研究"
],
[
"郝玉成",
"合肥学院",
"化学;无机化工;材料科学;",
"计算机在材料科学中的应用课程改革与应用型人才教学实践研究"
],
[
"张全争",
"合肥学院",
"化学;无机化工;有机化工;",
"计算机在材料科学中的应用课程改革与应用型人才教学实践研究"
],
[
"林文海",
"合肥学院",
"无线电电子学;高等教育;电力工业;",
"计算机在材料科学中的应用课程改革与应用型人才教学实践研究"
],
[
"秦广超",
"合肥学院",
"无机化工;轻工业手工业;化学;",
"计算机在材料科学中的应用课程改革与应用型人才教学实践研究"
],
[
"郝玉成",
"合肥学院",
"化学;无机化工;材料科学;",
"计算机在材料科学中的应用课程改革与应用型人才教学实践研究"
],
[
"张全争",
"合肥学院",
"化学;无机化工;有机化工;",
"计算机在材料科学中的应用课程改革与应用型人才教学实践研究"
],
[
"林文海",
"合肥学院",
"无线电电子学;高等教育;电力工业;",
"计算机在材料科学中的应用课程改革与应用型人才教学实践研究"
],
[
"秦广超",
"合肥学院",
"无机化工;轻工业手工业;化学;",
"计算机在材料科学中的应用课程改革与应用型人才教学实践研究"
],
[
"谭毅飞",
"上海市东亚联合控股(集团)有限公司",
"建筑科学与工程;计算机软件及计算机应用;自动化技术;",
"计算机视觉与传感技术下全新劳务计酬模式探究"
],
[
"谭毅飞",
"上海市东亚联合控股(集团)有限公司",
"建筑科学与工程;计算机软件及计算机应用;自动化技术;",
"计算机视觉与传感技术下全新劳务计酬模式探究"
],
[
"吴涤清",
"徐州医科大学",
"口腔科学;肿瘤学;",
"计算机辅助测量唇腭裂继发颌骨畸形患者手术前后口腔及气道容积的变化"
],
[
"李志萍",
"徐州市中心医院",
"口腔科学;肿瘤学;外科学;",
"计算机辅助测量唇腭裂继发颌骨畸形患者手术前后口腔及气道容积的变化"
],
[
"孟箭",
"徐州市中心医院",
"口腔科学;肿瘤学;临床医学;",
"计算机辅助测量唇腭裂继发颌骨畸形患者手术前后口腔及气道容积的变化"
],
[
"陈彬",
"徐州市中心医院",
"口腔科学;仪器仪表工业;肿瘤学;",
"计算机辅助测量唇腭裂继发颌骨畸形患者手术前后口腔及气道容积的变化"
],
[
"吴涤清",
"徐州医科大学",
"口腔科学;肿瘤学;",
"计算机辅助测量唇腭裂继发颌骨畸形患者手术前后口腔及气道容积的变化"
],
[
"李志萍",
"徐州市中心医院",
"口腔科学;肿瘤学;外科学;",
"计算机辅助测量唇腭裂继发颌骨畸形患者手术前后口腔及气道容积的变化"
],
[
"孟箭",
"徐州市中心医院",
"口腔科学;肿瘤学;临床医学;",
"计算机辅助测量唇腭裂继发颌骨畸形患者手术前后口腔及气道容积的变化"
],
[
"陈彬",
"徐州市中心医院",
"口腔科学;仪器仪表工业;肿瘤学;",
"计算机辅助测量唇腭裂继发颌骨畸形患者手术前后口腔及气道容积的变化"
],
[
"张新星",
"衢州职业技术学院",
"电力工业;机械工业;外科学;",
"计算机辅助骨科手术机器人技术发展及应用综述"
],
[
"赵英杰",
"衢州职业技术学院",
"外科学;自动化技术;生物医学工程;",
"计算机辅助骨科手术机器人技术发展及应用综述"
],
[
"陈超",
"衢州职业技术学院",
"外科学;自动化技术;生物医学工程;",
"计算机辅助骨科手术机器人技术发展及应用综述"
],
[
"张新星",
"衢州职业技术学院",
"电力工业;机械工业;外科学;",
"计算机辅助骨科手术机器人技术发展及应用综述"
],
[
"赵英杰",
"衢州职业技术学院",
"外科学;自动化技术;生物医学工程;",
"计算机辅助骨科手术机器人技术发展及应用综述"
],
[
"陈超",
"衢州职业技术学院",
"外科学;自动化技术;生物医学工程;",
"计算机辅助骨科手术机器人技术发展及应用综述"
]
],
"type": "response" "type": "response"
} }
Loading…
Cancel
Save