第4章常规动态网页爬取

Imagemap
第4章常规动态网页爬取逆向分析爬取动态网页静态网页和动态网页静态网页需要爬取的内容直接从HTML源代码中就能获取到静态网页源码中没有程序代码,一般只有HTML静态网页不管任何人任何时间打开的页面的内容都是不变的一般后缀为.html,.htm静态网页也包括一些能动的部分,这些主要是一些GIF动画等早期网站:dreamweaver,所见即所得静态网站实例Selenium官网:http://www.selenium.org.cn/中国学校:http://www.chinaschool.com/Nginx:CentOS:http://i.hddly.cn/网络爬虫:http://i.hddly.cn/b50506/本站采用:bootstrap3框架静态与伪静态在浏览器里右键打开审查元素,控制台(console),输入代码或粘贴js代码   ...alert(document.lastModified);动态网页除了HTML标记以外,还包括浏览器和服务器交互的代码页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发 ...动态网页也可以是纯文字内容的,也可以是包含各种动画的内容只要是采用了动态网站技术(如PHP、ASP、JSP等)生成的网页都可以称为动态网 ...在浏览器中查看页面相应的内容,如果找不到内容则基本确定使用动态技术一般有查看更多或者需要下拉加载出内容的网页基本是动态网页动态网站实例京东首页:https://www.jd.comCSDN首页:http://csdn.cn微博首页:https://weibo.com/新浪首页:https://www.sina.com.cn/淘宝首页:https://www.taobao.com阳光学院:https://www.ygu.edu.cn/两者区别更新和维护如果要修改网页的内容,就必须修改其源代码动态网页一般以数据库技术为基础,无须改源码,可以降低网站维护的工作量交互性静态网页由于很多内容都是固定的,在功能方面有很大的限制,所以交互性较差动态网页则可以实现更多的功能,如用户的登录、注册、查询等响应速度静态网页内容相对固定,容易被搜索引擎检索,且不需要连接数据库,因此响应速度较快动态网页实际上并不是独立存在于服务器上的网页文件,只有当用户请求时服务器才返回一 ...访问特点静态网页的每个网页都有一个固定的URL,且网页URL以.htm、.html、.s ...动态网页中的“?”对搜索引擎检索存在一定的问题,搜索引擎一般不可能从一个网站的数 ...逆向分析爬取动态网页1,F12打开网页 http://www.ptpress.com.cn2,从元素面板找到新书推荐div,及相应的js脚本/recommendBook/getRecommendBookListForPo ...3,打开网络面板->Fetch/XHR,从Name列表选中:getRecomme ...4,在右侧的Headers标签中,找到Requests URL的地址5,在浏览器中打开Requests URL网址,可获取需要爬取的新书信息6,编写脚本获取新书信息SY_4_1_20210922.py使用Selenium库爬取动态网页1下载浏览器补丁1,查询本机的Chrome浏览器版本找到帮助->关于 google chrome本机如:版本 93.0.4577.82(正式版本) (64 位)下载Chrome浏览器官网:https://www.google.cn/intl/zh-CN/chro ...离线版:https://www.google.com/intl/zh-CN/ch ...国内镜像:http://npm.taobao.org/mirrors/chrom ...2,下载Chrome的补丁文件 chromedrive国内镜像:http://npm.taobao.org/mirrors/chrom ...官网:https://sites.google.com/a/chromium.o ...官网更新:https://sites.google.com/chromium.o ...找到最接近93.0.4577.82的ChromeDriver 93.0.4577 ...选择需要的操作系统版本,win10选择chromedriver_win32版本由于chromedrive与chrome强配套,为避免chrome自动升级带来的 ...3,从压缩包解压出chromedriver.exe,放至python安装目录下, ...4,如何禁止Chrome自动升级1禁用google更新服务1右击“计算机”,选择“管理”2点击“服务和应用程序”3点击“服务”4找到“Google更新服务(gupdate)”和“Google更新服务(gup ...2,删除google升级服务windows powershell(管理员)PS C:\Users\yuxm> sc delete gupdatePS C:\Users\yuxm> sc delete gupdatemPS C:\Users\yuxm> sc delete GoogleChrome ...3,删除google升级定时任务1,win+r,输入命令taskschd.msc2,删除GoogleUpdateTaskMachineCore任务3,删除GoogleUpdateTaskMachineUA任务4删除安装根目录下的update文件夹3,删除目录C:\Program Files (x86)\Google\Upda ...2安装与使用Selenium库0,官方资源:https://github.com/seleniumhq/sel ...0,官方api_for_python:https://www.selenium. ...1,pip install selenium2,引用:from selenium import webdriver3,编写脚本调用seleniumSY_4_2_SELENIUM.py3如何让页面等待显式与隐式等待显式的等待使网络驱动程序在继续执行之前等待某个条件的发生隐式的等待使WebDriver在尝试定位一个元素时,在一定的时间内轮询DOMWebDriverWait(driver,time)driver:表示打开的网页time:等待时间,单位秒显式等待实例SY_4_3_SELE_WAIT.py4如何进行页面操作填充表单选择选项标签实例driver.switch_to.windowSY_4_4_SELE_SWITCH_TAB.py自动单击"提交"按钮实例confirm_btn=wait.util(....)->confirm_btn ...SY_4_5_SELE_SEARCH.py执行JavaScript执行JavaScript实例driver.execute_script:执行javascriptSY_4_6_SELE_SCRIPT.py5如何选取元素定位元素常用方法定位单元素find_element_by_idfind_element_by_namefind_element_by_css_selectorfind_element_by_xpathfind_element+By类定位find_element(By.ID,"searchVal")定位多元素find_elements_by_idfind_elements_by_namefind_elements_by_css_selectorfind_elements+By类定位find_elements(By.CSS_SELECTOR,'#nav')定位一个元素定位一个元素实例driver.find_element_by_id("searchVal")driver.find_element_by_css_selector("#se ...driver.find_element_by_xpath('//*[@id="s ...SY_4_7_SELE_FIND.py通过By类定位实例driver.find_element(By.ID,"searchVal")SY_4_8_SELE_BY.py定位多个元素定位多个元素实例driver.find_elements_by_css_selector('#n ...SY_4_9_SELE_FINDS.py通过By类定位多个元素实例driver.find_elements(By.CSS_SELECTOR,'#n ...SY_4_10_SELE_BYS.py6预期条件判断常用判断方法title_is:标题是某内容title_contains:标题包含某内容presence_of_element_located(By.Id,'元素Id' ...element_to_be_clieckable:元素可单击element_to_be_selected:元素可选择预期条件判断实例EC.element_to_be_clickable((By.CSS_SELEC ...SY_4_11_SELE_KEYWORD.py7常见问题每次运行完selenium程序后,chromedriver.exe进程总是不能彻 ...webdriver中关浏览器:close方法关闭一个tab,quit方法才是完全 ...存储数据至MongoDB数据库MongoDB与MySQL区别1MongoDB是非结构化数据库,MySql是结构化数据库2MongoDB稳定性不如MySQL3存储表格超过5GB后,MongoDB性能表现较好4MongoDB在海量数据存储上有明显的优势5概念对比(MongoDB->MySQL)数据库:database->database数据表:collection->table数据行:document->row数据字段:field->column索引:index->index主键:primary key->primary key6操作命令对比(MongoDB->MySQL)显示库:show dbs->show databases;进入库:use dbname->use dbname显示表: show collections ->show tables创建库:insert -> create database name创建表:insert -> create table tname(id int)删除库:client.drop_database(dbname)->drop d ...删除表:db.drop_collection(tname)->drop tabl ...插入表:db.tname.insert_one({id:1})->insert  ...删记录:db.tname.remove({id:1})->delete from ...查记录:db.tname.find()->select * from  tnam ...条件查:db.tname.find({id:2})->select * from ...条件查:db.tname.find($or:[{id:2},{name:'pyt ...查一条:db.tname.findOne()->select * from tn ...记录数:db.tname.count()->select count(id) f ...入库MongoDB1,建立连接pip install pymongo不能安装第三方bson连接串: 数据库产品名://主机IP:主机端口如: mongodb://localhost:27017/2.获取数据库属性方式无安全认证:client=pymongo.MongoClient('mongod ...有安全认证:client = MongoClient('mongodb://用户 ...db=client.pythondb字典方式本机默认:client=pymongo.MongoClient()指定IP:client = MongoClient('localhost')指定IP及端口:client = MongoClient('localhost' ...db=client['python-db']为什么是'python-db'python-db是库,没有的话自动创建其它'pythondb'可以吗?都是可以的,没有的话自动创建3.获取一个集合集合是存储在MongoDB中的一组文档集合类似于关系数据库中的表获取集合方式:属性方式collection=db.test字典方式collection=db['test']4.插入文档插入单条:insert_one组装json实例a={'bookName':n['bookName'],'aut ...入库: collection.insert_one(a)5,入库MongoDB实例SY_4_17_MONGO_INS.pyMongoDB命令行进入命令方式1,Win+R ,cmd2,进入mongodb目录,如: cd D:\app\mongodb\bin3,运行客户端:  .\mongo.exe4,使用帮助:help5,常用命令显示库: show dbs> show dbsadmin     0.000GBconfig    0.000GBlocal     0.000GBpythondb  0.000GB进入库: use pythondb> use pythondbswitched to db pythondb显示表:show collections> show collectionstest查记录:db.test.findOne()> db.test.findOne(){"_id" : ObjectId("614e862354067f30887b12 ..."bookName" : "和秋叶一起学——秒懂Excel","picPath" : "https://cdn.ptpress.cn/uplo ..."bookId" : "56ae2fc9-3bdb-41ad-9b4b-1399 ...}统计表:db.test.totalSize()> db.test.totalSize()73728表记录:db.test.find().count()> db.test.find().count()86查记录:db.test.find({})> db.test.find({collecter: 'goodym'}){ "_id" : ObjectId("6152b4ccfad67628c656 ...退出:exit6.高级命令查连接数db.serverStatus().connections;{
        "current" : 80,
        "avail ...查询结果 current 是当前连接数,available 是可用连接数,总共的 ...查操作db.currentOp()查topmongotop  查状态mongostatCompass使用document页查询条件在filter内输入过滤条件在project内输入显示哪些字段在sort内输入按哪个字段排序在collation内输入显示结果数量,skip数值表标跳过前面多少个结果,li ...实训练习爬取网页推荐图书信息要点了解静态网页和动态网页的区别掌握爬取动态网页信息的方法说明1,F12打开网页 http://www.ptpress.com.cn2,从元素面板找到新书推荐div,及相应的js脚本/recommendBook/getRecommendBookListForPo ...3,打开网络面板->Fetch/XHR,从Name列表选中:getRecomme ...4,在右侧的Headers标签中,找到Requests URL的地址5,在浏览器中打开Requests URL网址,可获取需要爬取的新书信息6,编写脚本获取新书信息脚本SY_4_20_GET_NEW_BOOKS.py爬取京东首页每日特价商品(拓展)脚本SY_4_20_GET_JD_GOODS.py爬取网页Java图书信息要点掌握Selenium库的使用方法掌握使用Selenium库爬取动态网页的方法说明1,F12打开网页 http://www.ptpress.com.cn/sear ...2,从元素面板找到搜索框和查询按钮搜索框id:searchVal查询按按钮选择路径:#app > div:nth-child(1) > div  ...3,编写脚本获取图书信息1,导入库2,打开模拟器: driver= webdriver.Chrome()3,页面等待:wait = WebDriverWait(driver, 10)4,打开页面:driver.get("http://www.ptpress.co ...5,模拟输入关键字:search_btn.send_keys('Java')输入文本内容 (WebElement.sendKeys(String))6,模拟点击查询:confirm_btn.click()7,获取网页并格式化8,获取需要的内容脚本SY_4_21_SELE_KEYWORD.py将数据存储到MongoDB要点掌握MongoDB数据库的基本使用方法掌握将爬取的数据存储到MongoDB数据库中说明1,导入库import pymongo2,获取连接:client= pymongo.MongoClient('loca ...3,选择库:db = client['pythondb'] 4,选择集合:collection = db.test5,拼接Json串:book_info6,入库:collection.insert_one(book_info)7,关闭连接:client.close()作业使用compass查询入库数据对刚入库数据列表进行截图脚本SY_4_22_MONGO_INBOOKS.py
hide
第4章常规动态网页爬取
hide
逆向分析爬取动态网页
hide
静态网页和动态网页
hide
使用Selenium库爬取动态网页
hide
1下载浏览器补丁
hide
存储数据至MongoDB数据库
hide
实训练习