Python网络爬虫技术-第4章-常规动态网页爬取_第1页
Python网络爬虫技术-第4章-常规动态网页爬取_第2页
Python网络爬虫技术-第4章-常规动态网页爬取_第3页
Python网络爬虫技术-第4章-常规动态网页爬取_第4页
Python网络爬虫技术-第4章-常规动态网页爬取_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

常规动态网页爬取2024/6/301使用Selenium库爬取动态网页目录逆向分析爬取动态网页2存储数据至MongoDB数据库3小结4在浏览器中打开网站“”,按“F12”键调出Chrome开发者工具或者单击“更多工具”选项中的“开发者工具”选项。Chrome开发者工具中的元素面板上显示的是浏览器执行JavaScript之后生成的HTML源码。找到解决方案的第一条数据对应的HTML源码,如图所示。了解静态网页和动态网页区别1.判断静态网页还有另一种方法查看源码,右键单击鼠标页面,选择“查看页面源代码”,如图所示。了解静态网页和动态网页区别得到服务器直接返回的HTML源码,找到解决方案的第一条数据的信息,如图所示。了解静态网页和动态网页区别在浏览器中打开网站“”,按“F12”键调出Chrome开发者工具,找到“互联网+智慧城市核心技术及行业应用”的HTML信息,如图所示。了解静态网页和动态网页区别2.判断动态网页在浏览器呈现的网页中,右键单击页面,单击“查看页面源代码”选项,在弹出的HTML源码中,查找“互联网+智慧城市核心技术及行业应用”关键字,如图所示。了解静态网页和动态网页区别在确认网页是动态网页后,需要获取从网页响应中由JavaScript动态加载生成的信息,在Chrome浏览器中爬取“”网页的信息,步骤如下。“F12”键打开“”网页的Chrome开发者工具,如图所示。逆向分析爬取动态网页单击网络面板后,发现有很多响应。在网络面板中XHR是Ajax中的概念,表示XML-HTTP-request,一般Javascript加载的文件隐藏在JS或者XHR。通过查找发现,“”网页。“新书”模块的信息在XHR的Preview标签中有需要的信息。在网络面板的XHR中,查看“/bookinfo”资源的Preview信息,可以看到网页新书的HTML信息,如图所示。逆向分析爬取动态网页若需要爬取“”网页标题信息,则步骤如下。单击“/bookinfo”资源的Headers标签,找到“RequestURL”信息,如图所示。逆向分析爬取动态网页打开“RequestURL”URL网址信息,找到需要爬取的信息,如图所示。爬取“”首页新书模块的书名、作者和价格,如代码4‑1所示。逆向分析爬取动态网页1使用Selenium库爬取动态网页目录逆向分析爬取动态网页2存储数据至MongoDB数据库3小结4以Chrome浏览器的chromedrive补丁为例,在安装好Selenium3.9.0之后,下载并安装chromedrive补丁的步骤如下。在Selenium官网下载对应版本的补丁。下载如图所示的“GoogleChromeDriver2.36”文件,根据操作系统选择chromedrive文件。将下载好的chromedrive.exe文件,存放至python安装根目录(与python.exe文件同一目录)即可。安装Selenium库以及下载浏览器补丁SeleniumWebdriver提供两种类型的等待——隐式和显式。显式的等待使网络驱动程序在继续执行之前等待某个条件的发生。隐式的等待使WebDriver在尝试定位一个元素时,在一定的时间内轮询DOM。在爬取“/search/books”网页搜索“Python编程”关键词过程中,用到了显示等待,本节主要介绍显示等待。显式等待是指定某个条件,然后设置最长等待时间。如果在这个时间还没有找到元素,那么便会抛出异常,在登录“/search/books”网页等待10秒。WebDriverWait函数是默认每500毫秒调用一次ExpectedCondition,直到成功返回。ExpectedCondition的成功返回类型是布尔值,对于所有其他ExpectedCondition类型,则返回True或非Null返回值。如果在10秒内不能发现元素返回,就会在抛出TimeoutException异常。WebDriverWait的语法使用格式如下。页面等待WebDriverWait(driver,等待时间)HTML表单包含了表单元素,而表单元素指的是不同类型的input元素、复选框、单选按钮、提交按钮等。填写完表单后,需要提交表单。定位“搜索”按钮并复制该元素的selector,如图所示。页面操作1.填充表单Selenium库中的execute_script方法能够直接调用JavaScript方法来实现翻页到底部、弹框等操作。比如在“/search/books”网页中通过JavaScript翻到页面底部,并弹框提示爬虫。页面操作2.执行JavaScript在页面中定位元素有多种策略。Selenium库提供了如表所示的方法来定位页面中的元素,使用find_element进行元素选取。在单元素查找中使用到了通过元素ID进行定位、通过XPath表达式进行定位、通过CSS选择器进行定位等操作。在多元素查找中使用到了通过CSS选择器进行定位等操作。元素选取定位一个元素定位多个元素含义find_element_by_idfind_elements_by_id通过元素ID进行定位find_element_by_namefind_elements_by_name通过元素名称进行定位find_element_by_xpathfind_elements_by_xpath通过XPath表达式进行定位find_element_by_link_textfind_elements_by_link_text通过完整超链接文本进行定位find_element_by_partial_link_textfind_elements_by_partial_link_text通过部分超链接文本进行定位find_element_by_tag_namefind_elements_by_tag_name通过标记名称进行定位find_element_by_class_namefind_elements_by_class_name通过类名进行定位find_element_by_css_selectorfind_elements_by_css_selector通过CSS选择器进行定位Selenium库的find_element的语法使用格式如下。元素选取driver.find_element_by_id(By.method,‘selector_url’)获取“/search/books”响应的网页搜索框架元素,如图所示。元素选取1.单个元素查找查找“/search/books”网页第一行多个信息,复制到selector的信息是“#nav”如图所示。元素选取2.多个元素查找在自动化Web浏览器时,不需要手动编写期望的条件类,也不必为自动化创建实用程序包,Selenium库提供了一些便利的判断方法如表4‑2所示,在爬取“/search/books”网页搜索“Python编程”关键词的过程中,用到了element_to_be_clickable方法、元素是否可点击等判断方法。预期的条件方法作用title_is标题是某内容title_contains标题包含某内容presence_of_element_located元素加载出,传入定位元组,如(By.ID,'p')visibility_of_element_located元素可见,传入定位元组visibility_of传入元素对象presence_of_all_elements_located所有元素加载出text_to_be_present_in_element某个元素文本包含某文字text_to_be_present_in_element_value某个元素值包含某文字方法作用frame_to_be_available_and_switch_to_itframe加载并切换invisibility_of_element_located元素不可见element_to_be_clickable元素可点击staleness_of判断一个元素是否仍在DOM,可判断页面是否已经刷新element_to_be_selected元素可选择,传元素对象element_located_to_be_selected元素可选择,传入定位元组element_selection_state_to_be传入元素对象以及状态,相等返回True,否则返回Falseelement_located_selection_state_to_be传入定位元组以及状态,相等返回True,否则返回Falsealert_is_present是否出现Alert预期的条件1分析方法与过程目录背景与挖掘目标2结果分析3小结4传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB中的概念和MySQL中的概念进行对比,如表所示。了解MongoDB数据库和MySQL数据库的区别SQL概念MongoDB概念说明databasedatabase数据库tablecollection数据库表∕集合rowdocument数据库行∕文档columnfield数据字段列∕域indexindex索引primarykeyprimarykey主键了解MongoDB数据库和MySQL数据库的区别操作说明MySQLMongoDB显示库列表showdatabases;showdbs进入库usedbname;showcollections创建库createdatabasename;无需单独创建,直接show进去,默认创建库创建表createtabletname(idint);无需单独创建,直接插入数据删除表droptabletname;db.tname.drop()删除库dropdatabasedbname;首先进去该库,使用db.dropDatabase()命令插入记录insertintotname(id)value(1);db.tname.insert({id:1})删除记录deletefromtnamewhereid=1;db.tname.remove({id:1})查询所有记录select*fromtname;db.tname.find()条件查询select*fromtnamewhereid=2;db.tname.find({id:2})多条件查询select*fromtnamewhereid=2

orname='python';db.tname.find($or:[{id:2},

{name:'python'}])查询一条数据select*fromtnamelimit1;db.tname.findone()获取表记录数selectcount(id)fromtname;db.tname.count()MongoDB具有独特操作语句,与MySQL使用传统的sql语句不同。MongoDB与MySQL基本操作命令的区别如表所示。pymongo是Python用于操作MongoDB的模块,在导入pymongo模块之前,需要先使用pip命令安装pymongo模块,安装成功之后,导入pymongo模块,然后建立连接。MongoDB连接字符串的格式如下。2.获取数据库MongoDB的一个实例可以支持多个独立的数据库。在使用pymongo模块时,可以使用MongoClient实例上的属性的方式来访问数据库,如果数据库名称使用属性方式访问无法正常工作(如:python-db),也可以使用字典方式访问。将数据存储入MongoDB数据库1.建立连接数据库产品名://主机IP:主机端口集合是存储在MongoDB中的一组文档,可以类似于关系数据库中的表。在pymongo模块中获取集合的方式与获取数据库一样,或者使用字典方式获取集合。4.插入文档数据在MongoDB中是以JSON类文件的形式保存起来的,而且存储到MongoDB数据库中的数据类型必须是{key:value}型的。在pymongo模块中使用inset_one方法插入文档,将4.1.2小节爬取到的新

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论