Python高级编程 课件 第9讲 网络爬虫_第1页
Python高级编程 课件 第9讲 网络爬虫_第2页
Python高级编程 课件 第9讲 网络爬虫_第3页
Python高级编程 课件 第9讲 网络爬虫_第4页
Python高级编程 课件 第9讲 网络爬虫_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

第9讲网络爬虫深圳北理莫斯科大学:姜增如第9讲主讲内容2requests模块加载及使用3

爬虫架构及使用1爬虫的概念4Scrapy框架的使用

一、爬虫的概念

网络爬虫称为网络蜘蛛、网络机器人,也被称为网页追逐者,它通过网页链接地址来读取网页的内容,若找到在网页中的其它链接地址,可通过链接地址寻找下一个网页,这样一直循环直到把该网站所有的网页都抓取完为止。网络爬虫就像一只蜘蛛一样,在互联网上沿着URL的丝线爬行,获取每一个URL所指向的网页并分析页面内容。

浏览器是一种多功能客户端软件,只要用户输入地址,浏览器自动将地址封装成HTTP字符串报文,通过socket发送到服务器对应的IP和端口上,web服务器收到请求搜索子目录,并将找到的内容传送给相应客户端浏览器。1、浏览网页的过程

2、爬虫分类用户响应请求(Response)发送请求(Request)服务器发送与响应(1)通用网络爬虫(全网爬虫),其爬行对象由一批种子URL扩充至整个Web,该类爬虫比较适合搜索广泛的主题,主要由搜索引|擎或大型Web服务提供商使用。(2)聚焦网络爬虫(主题网络爬虫),其特点是搜索对选择的关键字爬行与预设主题相关的页面内容。可使用基于内容评价的爬行策略,即:将用户输入的查询词作为主题,按照相关主题搜索信息页面,或使用基于增强学习的爬行策略引入聚焦爬虫,利用贝叶斯分类器对超链接进行分类,计算出每个链接的重要性,

按照重要性决定链接的访问顺序。也可使用基于语境图的爬行策略,即:通过建立语境图建立网页之间的相关度,优先访问距离最近的页面。(3)增量式网络爬虫,只对已下载网页采取增量式更新或只爬行发生变化的网页,即:通过重新访问网页对本地页面进行更新,从而保持本地集中存储的页面为最新页面。(4)深层网络爬虫,指不能直接爬取的一些网站,例如:需要用户登录或填写特定表单信息才能深入爬取的页面。3、常用爬虫模块Python常用的爬虫模块库包含URLlib、requests、lxml、HTML.parser、BeautifulSoup4、scrapy等库,通常需要配套数据库用于存储爬取的数据进行解析。HTML.parser和beautifulsoup4以及lxml都是以DOM(文档对象模型DocumentObjectModel)树的方式进行解析的模块。其中:(1)URLlib模块URLlib是网页下载器,可将爬取URL对应的网页存储成字符串,传送给网页解析器。其子模块功能包括:URLlib.request模块:用于实现基本的http请求。URLlib.error模块:用于异常处理。如在发送网络请求时出现错误,用该模块捕捉并处理。URLlib.parse模块:用于解析数据。URLlib.robotparser:用于解析robots.txt文件,判断是否可以爬取网站信息。大多数网站都有一个名为robots.txt的文档,robots协议是一种存放于网站根目录下的ASCII编码的文本文件,它告诉爬虫网站中哪些内容是不应被搜索引擎获取的,实现判断是否有禁止访客获取的数据。(2)requests模块requests是发送HTTP请求模块,它比

URLlib

模块更简洁,可替代URLlib模块库,详见9.2节。(3)lxml模块lxml是网页解析器,属于第三方插件,可迅速解析xml和

HTML文件,lxml库使用Xpath语法解析定位网页数,能够对XML/HTML文档中的元素进行遍历和查找。(4)HTML.parser模块HTML.parser是Python自带的网页解析模块,它可以分析出HTML里面的标签、数据,是一种处理HTML的简便途径,采用的是一种事件驱动的模式,当找到一个特定的标记时,则调用一个用户定义的函数进行处理。(5)bs4(beautifulsoap4)模块bs4是第三方网页解析器,可将一个网页字符串进行解析,可以按照要求来提取出有用的信息,也可以根据DOM树的方式来解析。网页解析器有正则表达式(直观,将网页转成字符串通过模糊匹配的方式来提取有价值的信息,当文档比较复杂的时候,该方法提取数据时比较困难)。(6)

scrapy模块scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,详细见9.4节。二、requests模块加载及使用1、加载

requests模块(1)首先在PyCharm中加载requests库,在打开PyCharm,单击“File”(文件)菜单,选择“Settings…”命令,或按Ctrl+Alt+s,打开设置界面,单击所建立项目名称下的“PythonInterpreter”(项目编译器)命令,确认当前选择的编译器,然后单击右上角的加号。(2)在搜索框输入:requests,单击左下角的“InstallPackage”,安装完成后,会在InstallPackage上显示“Package‘requests’installedsuccessfully”(库的请求已成功安装),如图9.3所示;如果安装不成功将会显示相应的提示信息。2、requests模块方法和属性常用方法功能描述request()获取请求的请求get()获取HTML网页的主要方法,对应http协议的getpost()向HTML网页提交post请求的方法,对应http协议的posthead()获取HTML网页头信息的方法,对应http协议的headput()向HTML网页提交put请求的方法,对应http协议的putpatch()向HTML网页提交局部修改请求,对应http协议的patchdelete()向HTML网页提交删除请求的方法,对应http协议的delete(1)requests常用方法导入requests模块库后的常用属性包括:importrequestsr=requests.get('网址域名')r.content#以字节形式响应网页内容r.text

#以文本形式响应网页内容r.status_code#返回状态码r.headers#响应头r.request.headers#请求响应头r.cookies#获取相应包的cookie值r.encoding#获取响应包的编码方式r.content#以字节方式返回响应体,(2)requests常用属性(3)response对象方法和属性属性或方法功能描述apparent_encoding编码方式close()关闭与服务器的连接content返回响应的内容,以字节为单位cookies返回一个CookieJar对象,包含了从服务器发回的cookieencoding解码r.text的编码方式headers返回响应头,字典格式json()返回结果JSON对象(结果需要以JSON格式编写的,否则会引发错误)links返回响应的解析头链接next返回重定向链中下一个请求的PreparedRequest对象request返回请求此响应的请求对象status_code返回http的状态码,比如404和200(200是OK,404是NotFound)text返回响应的内容,unicode类型数据URL返回响应的URL抓取苏宁易购的链接网站及网页名。importrequests#导入爬虫的库importre#导入正则表达式HTML=requests.get("/?utm_source=union&utm_medium=005009&adtype=5&utm_campaign=1f152fc7-c1c0-463c-b45a-e6138b5fbd01&union_place=un/")#粘贴苏宁易购的URLHTML.encoding='utf8'#指定编码格式,避免中文乱码src=HTML.text

#网页内容URLs=re.findall('href="(http.*?)"',src)#使用正则表达式提取网页中的http链接forURLinURLs:#输出所有URL链接

print(URL)/city/xiaojiadian.HTML/phone2018.HTML/phone2018.HTML/phone2018.HTML/。。。。。。例1抓取百度上的一幅图片存到文件中。(在中选择一幅图片,右击选择“复制图片地址”到剪贴板,编程中粘贴到requests.get()中进行抓取)importrequests#导入爬虫的库response=requests.get("/search/src=http%3A%2F%2F%2Ffeed%2Fdc54564e9258d109b96a4227293009b56d814d09.jpeg%3Ftoken%3D7cbe6ab5873b368e6bdc58842175bb2c&refer=http%3A%2F%2F&app=2021&size=f360,240&n=0&g=0n&q=75&fmt=auto?sec=1661101200&t=a992fe310f9062f9dd690733621de2d0")#get方法得到图片的地址内容file=open("D:\scrapy\d1.gif","wb")#打开一个文件,wb表示以二进制格式打开一个文件只用于写入file.write(response.content)#写入文件file.close()#关闭操作例2深圳北理莫斯科大学图片三爬虫架构及使用爬虫调度器URL管理器HTML下载器HTML解析器数据存储器1.是否有待获取的URL3.获取新URL9.1新URLj交给管理器2.是或否4.返回URL8.解析出URL数据6.返回HTML内容5.URL交给下载器7.HTML交给解析器9.2.存储有效数据循环执行1、网络爬虫主要框架(1)使用网页下载器(urllib)2、网络爬虫主要模块(2)使用网页解析器(beautifulsoap)(3)BeautifulSoup使用流程

创建BeautifulSoup对象。

使用BeautifulSoup对象的操作方法find_all与find进行解读搜索。利用DOM结构标签特性,提取更为详细的节点信息。安装bs4--pipinstallbs4安装测试frombs4importBeautifulSoupimportbs4print(bs4)使用bs4解析爬取新发地网站菜价页面源代码frombs4importBeautifulSoupimportrequestsurl='/index.html'resp=requests.get(url)

#拿到新发地网站菜价页面源代码resp.encoding="utf-8"print(resp.text)#使用bs4进行解析page=BeautifulSoup(resp.text,"html.parser")

#HTML.parser:指定HTML解析器table=page.find_all("table",attrs_={'boder':'0'})#find_all(“标签”,属性=值):print(table)例3<!DOCTYPEHTML><html><head> <title>北京新发地</title> <metaname="viewport"content="width=device-width,initial-scale=1"> <metaname="viewport"content="width=1500"> <metacharset="utf-8"> <metaname="keywords"content="新发地"/> <linkhref="/css/sliderWip.css"rel="stylesheet"type="text/css"media="all"/> <linkhref="/css/bootstrap.min.css"rel="stylesheet"type="text/css"media="all"> <linkhref="/css/bootstrap-header.css"rel="stylesheet"type="text/css"media="all"/> <linkhref="/css/font-awesome.min.css"rel="stylesheet"type="text/css"media="all"> <linkhref="/css/smoothbox.css"rel="stylesheet"type="text/css"media="all"/> <linkhref="/css/style.css"rel="stylesheet"type="text/css"media="all"/> <linkhref="css/swiper-bundle.min.css"rel="stylesheet"type="text/css"media="all"/>……四、Scrapy框架的使用Scrapy是以一种快速、简单的可扩展方式,提取结构性数据而编写的应用框架,它可应用在数据挖掘,信息处理或存储历史数据等一系列的程序中,该框架可以轻松抓取如亚马逊、淘宝等商品名、价格等信息数据。爬虫scrapy是基于twisted(事件驱动的python网络)开发实现的框架,其内部已经搭建了请求、响应、解析、存储四大组件。爬虫抓取数据的原理是先获取网页文档数据,然后根据数据所在的HTML元素,获取其中所需要的内容。1、scrapy创建爬虫与工作流程(1)创建爬虫工程:建立一个新的scrapy工程文件。在Terminal中键入:scrapy

startproject

爬虫工程文件。(2)生成一个爬虫:在Terminal中键入:scrapy

genspider

爬虫文件名或爬取的域名。(3)抽取Item对象数据,编写一个spider用来爬取某个网站并提取出所有的Item对象。(4)存储提取出来的Item对象,编写一个ItemPipline来存储爬取出的Item对象,下载器下载页面,将生成的响应通过下载器发送到引擎。2、scrapy工作流程SchedulerItemPipelineScrapyEngineDownloaderInternetSpiders1地址:Domain/URL2生成Request放入队列3从队列中取出Request4请求Request生成Response5生成Response6发送Response7Response生成Item8处理Item

3、创建scrapy项目项目名:

文件夹spiders文件夹__init__.pyitems.py:用来存放爬虫爬取的数据模型。middlewares.py:用来存放各种中间件的文件。pipelines.py:用来将items的模型存储到本地磁盘中。settings.py:爬虫配置信息(请求头、发送请求时间、ip代理池等)。spiders包:以后所有的爬虫,都是存放到这个里面。scrapy.cfg:项目的配置文件。(1)创建scrapy项目语法格式:scrapystartproject项目名(2)scrapy框架结构scrapy.cfg:项目的配置文件。爬取百度网站的Html、head

温馨提示

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

评论

0/150

提交评论