版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目5动态内容爬取-“探索社交媒体动态”任务5.1动态网页特征5.1.1初识动态网页静态网页:内容都位于HTML源代码中,生成后内容和显示效果基本不会变化动态网页:页面代码不变,显示内容可随时间、环境或数据库操作结果而变化关键区别:动态网页依赖JavaScript渲染,核心数据不直接出现在源代码视觉动态与技术动态的区别动态网页指采用动态网站技术生成的网页与网页上的各种动画、滚动字幕等视觉动态效果无直接关系动态网页可以是纯文字内容,也可以是包含动画的内容5.1.2源代码特征数据不直接出现在HTML源代码中示例验证:百度翻译网站翻译"网络爬虫"后,在网页源代码中搜索不到相关释义查看方法:右键选择"查看网页源代码"或使用浏览器开发者工具5.1.3网址特征请求新数据时,网址不会变化典型示例:豆瓣话题广场拖动下拉滚动条,话题内容不断增加,地址栏网址始终不变任务5.2动态网页分析5.2.1理解Ajax和动态加载内容1.Ajax技术概述全称:AsynchronousJavaScriptandXML定义:创建更好、更快以及交互性更强的Web应用程序的技术核心特点:无需刷新整个网页,通过异步方式与服务器进行数据交互,实现网页局部内容的动态更新,显著提升用户体验与网页性能2.传统模式与Ajax模式对比传统网页浏览模式浏览器发送HTTP请求服务器返回完整HTML页面浏览器重新渲染整个页面效率较低,有明显页面刷新等待感Ajax技术模式无需刷新整个页面异步与服务器进行数据交互实现网页局部内容动态更新显著提升用户体验与网页性能5.2.2实现动态加载内容传统爬虫的局限性:requests库仅能获取初始HTML代码,无法获取动态数据解决思路:分析Ajax请求,结合requests与BeautifulSoup抓取动态内容抓取分析步骤:1.打开开发者工具:Chrome浏览器中按下F12键,切换至"网络"选项卡2.触发动态加载:滚动页面或点击"加载更多"按钮3.筛选与分析请求:观察请求的URL、请求方法、请求头及响应数据,依据URL关键词或响应数据格式进行判断5.2.3抓取动态生成的内容1.基于JavaScript的动态渲染技术实现:通过XMLHttpRequest或FetchAPI获取数据识别特征:初始HTML空白、XHR/Fetch请求、动态DOM变化2.无限滚动加载技术实现:监听scroll事件,滚动到页面底部自动触发识别特征:滚动触发请求、URL包含分页参数、无传统分页按钮任务5.3Selenium环境搭建5.3.1安装Selenium1.Selenium简介与特点功能定位:强大的Web应用程序测试工具,在网络爬虫领域广泛应用核心能力:模拟真实浏览器行为,完整执行网页中的JavaScript代码应用场景:处理需要JavaScript渲染的动态网页,成为抓取动态网页数据的重要工具主要功能:自动进行页面导航、填写表单、点击按钮验证应用程序行为是否符合预期用于性能测试、UI测试和功能测试2.安装Selenium命令:pipinstallselenium导入方式:fromseleniumimportwebdriver5.3.2下载浏览器驱动必要性:Selenium需要借助浏览器驱动程序才能控制浏览器浏览器选择:不同浏览器对应不同的驱动程序以Chrome为例的下载步骤:1.查看浏览器版本点击Chrome浏览器右侧"拓展按钮"选择"帮助"→"关于Chrome“记录版本号信息,如版本84.0.4147.105(正式版本)(64位)5.3.2下载浏览器驱动以Chrome为例的下载步骤:2.下载驱动程序访问ChromeDriver官方下载页面找到与当前Chrome浏览器版本匹配的ChromeDriver版本示例:浏览器版本是114.x,就下载对应的114.x版本的ChromeDriver不同系统注意事项Windows系统:下载.exe文件macOS系统:下载.zip文件(需区分Intel芯片/AppleSilicon)Linux系统:下载对应压缩包5.3.2下载浏览器驱动以Chrome为例的下载步骤:3.配置驱动路径方式1:添加到系统环境变量(推荐)Windows系统:打开"系统属性→高级→环境变量"在PATH中添加驱动文件所在目录路径macOS/Linux系统:编辑~/.bash_profile或~/.zshrc文件添加exportPATH="$PATH:/path/to/driver"优势:使用Selenium时,系统可自动找到驱动程序5.3.2下载浏览器驱动以Chrome为例的下载步骤:3.配置驱动路径方式2:在代码中直接指定路径importseleniumfromseleniumimportwebdriverfromselenium.webdriver.chrome.serviceimportService#指定ChromeDriver的路径,这里假设驱动程序在D盘的selenium_driver目录下service=Service('D:/selenium_driver/chromedriver.exe')driver=webdriver.Chrome(service=service)5.3.3验证环境搭建fromseleniumimportwebdriverdriver=webdriver.Chrome()driver.get("")print(driver.title)#输出"百度一下,你就知道"driver.quit()预期结果:浏览器自动打开百度首页并输出标题识别特征:页面出现"Chrome正受到自动测试软件的控制"字样5.3.3验证环境搭建其他浏览器支持与配置Firefox浏览器需下载GeckoDriver配置方式与Chrome类似使用webdriver.Firefox()创建驱动实例Edge浏览器新版Edge(基于Chromium内核)可使用ChromeDriver配置方式类似Chrome旧版Edge浏览器需下载MicrosoftWebDriverSafari浏览器Mac系统使用需在Safari的"开发"菜单中启用"允许远程自动化"选项使用webdriver.Safari()创建驱动实例可能需进行额外配置任务5.4Selenium元素定位精准搜索5.4.1通过标签id属性定位find_element(By.ID,'XX’)特点:通过HTML元素的id属性值定位优点:定位速度最快,准确性高(id属性通常唯一)缺点:可能不存在或动态生成(如包含随机字符串)5.4.1通过标签id属性定位示例代码:fromseleniumimportwebdriverfrommon.byimportBydriver=webdriver.Chrome()driver.get("")#不自动关闭浏览器option=webdriver.ChromeOptions()option.add_experimental_option("detach",True)#操作:输入框输入"Python爬虫"driver.find_element(By.ID,"chat-textarea").send_keys("Python爬虫")效果:浏览器会自动打开百度网站,并在搜索框自动输入“Python爬虫”字样5.4.2通过标签name属性定位find_element(By.NAME,'XX’)特点:通过元素的name属性值定位优点:适用于已知name属性的场景,常见于表单字段缺点:可能匹配多个元素(非唯一属性)5.4.2通过标签name属性定位示例代码:fromseleniumimportwebdriverfrommon.byimportBydriver=webdriver.Chrome()driver.get("/")#不自动关闭浏览器option=webdriver.ChromeOptions()option.add_experimental_option("detach",True)#操作:输入框输入"人工智能"driver.find_element(By.NAME,"q").send_keys("人工智能")效果:浏览器会自动打开必应网站,并在搜索框自动输入“人工智能”字样5.4.3通过标签class属性定位find_element(By.CLASS_NAME,'XX’)特点:通过元素的class属性值定位优点:适用于定位同类元素(如一组按钮或卡片)缺点:class可能动态变化,且可能匹配多个元素5.4.3通过标签class属性定位示例代码:fromseleniumimportwebdriverfrommon.byimportBydriver=webdriver.Chrome()driver.get("/")#不自动关闭浏览器option=webdriver.ChromeOptions()option.add_experimental_option("detach",True)#操作:输入框输入"人工智能"driver.find_element(By.NAME,"q").send_keys("人工智能")#操作:通过class定位搜索按钮并单击driver.find_element(By.CLASS_NAME,"search").click()效果:浏览器会自动打开必应网站,并自动点击搜索按钮进入搜索页面5.4.4通过标签名tag定位find_element(By.TAG_NAME,'XX’)特点:通过元素的标签名(如div、a、p)定位优点:适用于快速获取某类标签的所有实例缺点:定位范围广,可能返回大量非目标元素5.4.4通过标签名tag定位示例代码:fromseleniumimportwebdriverfrommon.byimportBydriver=webdriver.Chrome()driver.get("/")#不自动关闭浏览器option=webdriver.ChromeOptions()option.add_experimental_option("detach",True)#操作:输入框输入"日历"elem=driver.find_elements(By.TAG_NAME,"input")foreinelem:ife.get_attribute("name")=="query":e.send_keys("日历")效果:浏览器会自动打开搜狗网站,并在搜索框自动输入“日历”字样5.4.5通过link定位find_element(By.LINK_TEXT,'XX')#全匹配超链接文本find_element(By.PARTIAL_LINK_TEXT,'XX')#模糊匹配超链接文本特点:通过超链接文本内容定位优点:直接通过可见文本定位链接,直观易读缺点:依赖易变的文本内容,稳定性较差且维护成本高示例代码:fromseleniumimportwebdriverfrommon.byimportBydriver=webdriver.Chrome()driver.get("")#不自动关闭浏览器option=webdriver.ChromeOptions()option.add_experimental_option("detach",True)#操作:点击页面上的"更多"driver.find_element(By.LINK_TEXT,"更多").click()效果:浏览器会自动打开百度网站,并在另外一个页面打开“百度产品大全”网页5.4.5通过link定位示例代码:fromseleniumimportwebdriverfrommon.byimportBydriver=webdriver.Chrome()driver.get("")#不自动关闭浏览器option=webdriver.ChromeOptions()option.add_experimental_option("detach",True)#操作:点击页面上的"更多"driver.find_element(By.PARTIAL_LINK_TEXT,"更").click()效果:结果跟上面代码运行结果一样5.4.5通过link定位5.4.6通过元素的XPath定位find_element(By.XPATH,'XX’)特点:路径语言表达式定位元素优点:可定位复杂嵌套结构或无唯一属性的元素;支持逻辑运算(如and、contains)缺点:依赖页面结构,路径冗长易变;执行效率较低且维护成本高路径类型:绝对路径:从根目录开始,起始于/(如/html/body/div[1]/div[2])相对路径:从任意节点开始,起始于//(如//div[@class="content"])示例代码:fromseleniumimportwebdriverfrommon.byimportBydriver=webdriver.Chrome()driver.get("")#不自动关闭浏览器option=webdriver.ChromeOptions()option.add_experimental_option("detach",True)#使用索引定位。在百度首页点击“贴吧”链接,则用索引【4】定位到【贴吧】标签driver.find_element(By.XPATH,'//div[@id="s-top-left"]/a[4]').click()效果:浏览器会自动打开百度网站,并在另外一个页面打开“百度贴吧”网页5.4.6通过元素的XPath定位5.4.7通过CSS选择器定位find_element(By.CSS_SELECTOR,'XX’)特点:根据元素的CSS选择器来完成定位优点:定位灵活、性能高,支持组合选择器缺点:无法定位无CSS属性的文本内容和复杂层级关系示例代码:fromseleniumimportwebdriverfrommon.byimportBydriver=webdriver.Chrome()driver.get("")#不自动关闭浏览器option=webdriver.ChromeOptions()option.add_experimental_option("detach",True)#通过父元素定位子元素的方法,定位某标签下的第一个子元素::first-childdriver.find_element(By.CSS_SELECTOR,"div#s-top-left>a:first-child").click()效果:浏览器会自动打开百度网站,并在另外一个页面打开“百度新闻”网页5.4.7通过CSS选择器定位5.4.7通过CSS选择器定位常用CSS选择器类型CSS选择器类型说明类选择器.XXX选择class属性为XXX的元素id选择器#XXX选择id属性为XXX的元素元素选择器XXX选择标签名为XXX的元素属性选择器[yyy=’bbb’]选择yyy属性取值为bbb的元素派生选择器AA>XX或AAXX选择AA标签下的XX元素任务5.5Selenium等待机制5.5.1隐式等待定义:一种全局性的等待机制,在查找元素时等待一定时间设置方法:implicitly_wait()工作原理:如果在指定时间内找到元素,立即继续执行如果超时仍未找到元素,抛出NoSuchElementException异常特点:只需要调用一次,之后所有元素查找操作都遵循这个等待时间优点:简单易用,只需设置一次即可;适用于大多数简单的场景缺点:全局性等待,可能导致不必要的等待时间;无法处理复杂的等待条件示例代码:importtimefromseleniumimportwebdriverfromselenium.webdriver.chrome.optionsimportOptions#配置ChromeOptionschrome_options=Options()chrome_options.add_experimental_option("detach",True)browser=webdriver.Chrome(options=chrome_options)browser.get("")browser.implicitly_wait(5)#执行操作print("正在执行操作")#手动控制关闭input("按回车键关闭浏览器")browser.quit()print("浏览器已正常关闭")效果:浏览器会自动打开CSDN网站,当按回车键后,浏览器会自动关闭5.5.1隐式等待5.5.2显式等待定义:更为灵活的等待机制,为特定操作设置等待条件核心组件:WebDriverWait类;expected_conditions模块特点:只针对指定的元素生效,不再是针对所有页面元素优点:灵活性高,可以为不同操作设置不同等待条件;可以处理复杂的等待场景缺点:代码相对复杂,需要更多代码量;需要为每个操作单独设置等待条件示例代码:fromseleniumimportwebdriverfrommon.byimportByfromselenium.webdriver.support.waitimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECbrowser=webdriver.Chrome()#打开csdn首页browser.get("")#显式等待tag=(WebDriverWait(browser,5,0.5).until(EC.presence_of_element_located((By.XPATH,'//*[@id="toolbar-search-input"]'))))tag.send_keys("selenium")效果:浏览器会自动打开CSDN网站,当按回车键后,浏览器会自动关闭5.5.2显式等待5.5.3固定等待定义:最简单的等待机制,通过time.sleep()让脚本暂停执行指定时间特点:无论页面是否加载完成,脚本都会等待指定时间后再继续执行优点:简单易用,适用于简单的测试场景缺点:效率低下,可能导致不必要的等待时间;无法根据页面加载情况动态调整等待时间示例代码:fromseleniumimportwebdriverfromtimeimportsleepfrommon.byimportByfromselenium.webdriver.support.waitimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECbrowser=webdriver.Chrome()sleep(2)#打开csdn首页browser.get("")tag=WebDriverWait(browser,5,0.5).until(EC.presence_of_element_located((By.XPATH,'//*[@id="toolbar-search-input"]')))tag.send_keys("Python")#关闭sleep(2)browser.quit()效果:浏览器会自动打开CSDN网站,当按回车键后,浏览器会自动关闭5.5.3固定等待任务5.6Selenium浏览器操作5.6.1处理浏览器弹窗弹窗类型alert警告消息框:提供"确定"按钮,模式对话框confirm确认消息框:提供"是与否"问题,"确定"和"取消"按钮prompt提示消息框:提供文本字段,可输入答案响应提示处理方法:使用Alert类处理弹窗alert弹窗处理示例代码:fromtimeimportsleepfrommon.alertimportAlertfromseleniumimportwebdriver#启动并打开指定页面browser=webdriver.Chrome()browser.get("")#alert()弹窗处理browser.execute_script("alert('这是一个alert弹窗');")sleep(2)#获取弹窗对象alert=Alert(browser)#输出弹窗内容print(alert.text)#结果:这是alert()弹窗!#确认弹窗alert.accept()sleep(2)browser.quit()效果:浏览器会自动打开抖音网站,同时在页面会弹出一个弹窗“这是一个alert弹窗”,等待2秒后,浏览器自动关闭5.6.1处理浏览器弹窗confirm弹窗处理示例代码:fromtimeimportsleepfrommon.alertimportAlertfromseleniumimportwebdriver#启动并打开指定页面browser=webdriver.Chrome()browser.get("")#confirm()弹窗browser.execute_script("confirm('这是一个confirm弹窗');")sleep(2)#获取弹窗对象confirm=Alert(browser)#输出弹窗内容print(confirm.text)#这是confirm()弹窗!#执行性弹窗的取消按钮confirm.dismiss()#confirm.accept()#执行弹窗确认按钮sleep(2)browser.quit()效果:浏览器会自动打开抖音网站,同时在页面会弹出一个弹窗“这是一个confirm弹窗”,等待2秒后,浏览器自动关闭5.6.1处理浏览器弹窗prompt弹窗处理示例代码:fromtimeimportsleepfrommon.alertimportAlertfromseleniumimportwebdriver#启动并打开指定页面browser=webdriver.Chrome()browser.get("")#prompt()弹窗browser.execute_script("prompt('这是一个prompt弹窗');")sleep(2)#获取弹窗对象prompt=Alert(browser)#输出弹窗内容print(prompt.text)#这是prompt()弹窗!#向弹窗的输入框内输入内容prompt.send_keys("这是弹窗prompt()")sleep(2)#执行性弹窗的确认按钮prompt.accept()sleep(2)browser.quit()效果:浏览器会自动打开抖音网站,同时在页面会弹出一个弹窗“这是一个prompt弹窗”,等待2秒后,浏览器自动关闭5.6.1处理浏览器弹窗5.6.2切换窗口和标签页应用场景:用户可能打开多个窗口或标签页核心方法:switch_to.window()实现步骤:获取所有窗口句柄:driver.window_handles切换窗口:driver.switch_to.window(handle)示例代码:fromseleniumimportwebdriver#启动并打开指定页面driver=webdriver.Chrome()#打开第一个窗口driver.get("")#打开第二个窗口driver.execute_script("window.open('')")#获取所有窗口句柄window_handles=driver.window_handles#切换到第二个窗口driver.switch_to.window(window_handles[1])#在第二个窗口中操作print(driver.title)#切换回第一个窗口driver.switch_to.window(window_handles[0])#关闭浏览器driver.quit()效果:浏览器会自动打开抖音网站,然后再打开一个页面,进入知乎页面,等待2秒后,浏览器自动关闭,同时输出“知乎-有问题,就会有答案”。5.6.2切换窗口和标签页5.6.3浏览器Cookie操作获取Cookie:get_cookies()-获取当前浏览器的所有Cookie添加Cookie:add_cookie()-向浏览器中添加Cookie删除Cookie:delete_cookie()-通过name删除指定Cookiedelete_all_cookies()-删除浏览器中的所有Cookie获取Cookie示例代码:fromseleniumimportwebdriver#启动并打开指定页面driver=webdriver.Chrome()driver.get("")#获得所有Cookie信息并打印cookie=driver.get_cookies()print(cookie)效果:浏览器会自动打开抖音网站,然后输出所有的Cookie信息5.6.3浏览器Cookie操作添加Cookie示例代码:fromseleniumimportwebdriver#启动并打开指定页面driver=webdriver.Chrome()driver.get("")#添加Cookie信息driver.add_cookie({'name':'key-aaaaaaa','value':'value-bbbbbb'})#遍历指定的Cookiesforcookieindriver.get_cookies():print("%s->%s"%(cookie['name'],cookie['value']))效果:浏览器会自动打开抖音网站,然后输出指定条件的所有Cookie信息,通过遍历得到所有的Cookie,其中就包括我们添加的Cookie信息5.6.3浏览器Cookie操作删除Cookie示例代码:fromseleniumimportwebdriver#启动并打开指定页面driver=webdriver.Chrome()driver.get("")cookie=driver.delete_all_cookies()print(cookie)效果:浏览器会自动打开抖音网站,然后输出“None”,没有任何Cookie信息5.6.3浏览器Cookie操作方法:execute_script()示例代码:fromseleniumimportwebdriverdriver=webdriver.Chrome()#打开网页driver.get("")#执行JavaScript代码并获取返回值result=driver.execute_script("returndocument.title;")print(result)#关闭浏览器driver.quit()效果:浏览器会自动打开抖音网站,然后输出“抖音-记录美好生活”,再自动关闭网站5.6.4执行JavaScript代码5.6.5处理iframeiframe特点:内联框架,在当前HTML页面中嵌入另一个文档处理挑战:无法对iframe内元素进行直接定位,需要先切换核心方法:切换到iframe:switch_to.frame()切换回主页面:switch_to.default_content()切换到父iframe:switch_to.parent_frame()多层iframe处理:从外部切换到iframe2需要层层切换从iframe2切换回iframe1可以使用父子切换示例代码:fromseleniumimportwebdriverfrommon.byimportBydriver=webdriver.Chrome()driver.implicitly_wait(10)#抓取排行榜信息driver.get('/#/discover/toplist?id=3778678')#定位到iframe的元素iframe=driver.find_elements(By.TAG_NAME,'iframe')[0]#切到iframe窗口内driver.switch_to.frame(iframe)songList=driver.find_element(By.ID,'song-list-pre-cache')div=songList.find_elements(By.CSS_SELECTOR,'.m-table-ranktbodytr:nth-child(-n+10)b')#使用for循环,获取到每首歌曲的元素,并打印出该元素的text属性值foroneindiv:print(one.get_attribute('title'))#切到iframe的上一层,即为主文档driver.switch_to.parent_frame()#打印主文档的一段内容meta=driver.find_element(By.CSS_SELECTOR,'meta[name="description"]')print('\n'+meta.get_attribute('content'))driver.quit()效果:浏览器会自动打开网易云音乐-云音乐热歌榜网站,然后输出“热歌榜中前10首歌曲名”,以及输出主页的内容5.6.5处理iframe项目实战
社交媒体网站微博爬虫实战【任务描述】构建基于Selenium自动化框架的微博公开内容采集系统,通过模拟真实用户浏览行为,实现对微博平台指定用户或话题下公开动态的定向抓取与结构化存储。系统将遵循数据采集伦理规范,确保采集数据仅用于学术研究与舆情分析,严格避免隐私侵犯与商业滥用。【任务实施】1.预登录与网站访问实现要点:初始化Chrome浏览器驱动访问新浪微博登录页面设置WebDriverWait显式等待采用人工干预方式完成登录,避免处理复杂验证码暂停60秒供用户手动完成登录操作登录流程说明:程序弹出新浪登录网页用户在账户登录框中填写相关信息完成登录包括登录名、密码及短信验证等完成预登录后进入个人主页【任务实施】1.预登录与网站访问示例代码:fromseleniumimportwebdriverfromselenium.webdriver.supportimportexpected_conditionsasECfromselenium.webdriver.support.uiimportWebDriverWaitfrommon.byimportByfrombs4importBeautifulSoupimporttimeimportpandasaspd#初始化浏览器并访问登录页面driver=webdriver.Chrome()print('准备登录W网站...')#发送请求driver.get("/signup/signin.php")wait=WebDriverWait(driver,5)#人工干预登录过程,暂停1分钟进行预登录,此处填写账号密码及验证time.sleep(60)效果:弹出新浪登录网页,在网页的账户登录框中输入相关信息完成登录【任务实施】2.搜索功能实现实现要点:使用CSS选择器定位搜索框和搜索按钮输入搜索关键词"努力学习"执行搜索操作切换到新打开的搜索结果页面搜索流程结果:从个人主页跳转到微博搜索页显示"努力学习"相关的微博内容页面显示搜索结果列表【任务实施】2.搜索功能实现示例代码:#定位搜索框并输入关键词#使用selector去定位关键词搜索框s_input=driver.find_element(By.CSS_SELECTOR,'#search_input')#向搜索框中传入字段s_input.send_keys("努力学习")#定位并点击搜索按钮confirm_btn=driver.find_element(By.CSS_SELECTOR,'#search_submit')confirm_btn.click()#人为移动driver切换到搜索结果页面driver.switch_to.window(driver.window_handles[1])效果:弹出新的窗口,从个人主页跳到微博搜索页【任务实施】3.单页数据爬取数据提取逻辑:定位所有微博卡片节点检查是否有"展开全文"链接根据情况获取完整或部分内容同时提取发布评论的用户名处理动态加载的完整内容显示【任务实施】3.单页数据爬取示例代码:#爬取第一页数据comment=[]username=[]#定位所有评论节点nodes=driver.find_elements(By.CSS_SELECTOR,'div.card>div.card-feed>div.content')#遍历每个评论节点foriinrange(0,len(nodes),1):#检查每个节点是否有“展开全文”的链接flag=Falsetry:nodes[i].find_element(By.CSS_SELECTOR,"p>a[action-type='fl_unfold']").is_displayed()flag=Trueexcept:flag=False#如果有展开全文链接且文字为“展开全文c”,则点击展开并获取完整内容if(flagandnodes[i].find_element(By.CSS_SELECTOR,"p>a[action-type='fl_unfold']").text.startswith('展开全文c')):nodes[i].find_element(By.CSS_SELECTOR,"p>a[action-type='fl_unfold']").click()comment.append(nodes[i].find_element(By.CSS_SELECTOR,'p[node-type="feed_list_content_full"]').text)#否则获取部分内容else:comment.append(nodes[i].find_element(By.CSS_SELECTOR,'p[node-type="feed_list_content"]').text)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026农业扶贫面试题及答案解析
- 2026平原县社工面试题及答案
- 2026青海大学面试题目及答案
- 2026扰民类社工面试题及答案
- 2026社工考生面试题库及答案
- 2026声乐乐理知识面试题及答案
- 2026年长春社区招聘考试试题及答案
- 2026年临潍县事业编考试试题及答案
- 2026年街道基层招聘考试试题及答案
- 2025年医疗冷链箱温度监控设计研究
- 2026年江苏无锡市中考英语试题(附答案)
- 2026电工技师考试题库及参考答案
- 2026年校园安全百日攻坚行动实施方案
- 食道癌课件教学课件
- 四川省宜宾市某中学小升初入学分班考试语文考试真题含答案
- 2026年农业农村部科技发展中心招聘备考题库完整答案详解
- 2026年福建高考物理题库(含答案)
- 2025年宽带网络覆盖提升项目可行性研究报告
- 危险化学品安全培训考试的试题及答案
- 员工宿舍租赁管理方案及流程规范
- 路肩施工安全教育培训课件
评论
0/150
提交评论