版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
7.1
网络爬虫工作的基本原理7.2
网页内容获取-requests库概述7.3网页内容解析-BeautifulSoup库7.6实战:大数据论文文章标题采集习题7.5实战:热门电影搜索of5617.7实战:全国空气质量第七章网络爬虫7.4
正则表达式7.1网络爬虫工作的基本原理7.2网页内容获取-requ第七章网络爬虫of3127.1.1网页的概念7.1类的方法1、URL的含义URL(UniformResourceLocator,URL)称为统一资源定位符,也称为网址。互联网上的每个页面,都对应一个URL。如:浏览上海市空气质量和pm2.5指标的网址为/air/shanghai.html。URL主要包含四个部分:协议部分,如上海市空气质量网址的协议为“http:”,表示超文本传输协议;网站名部分,如上海市空气质量网址的网站名部分为,表示该网页所在的主机位置;端口部分,跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符,端口不是一个URL必须的部分,如果采用默认端口80,则可以省略端口部分;虚拟目录和文件名部分,如上海市空气质量网址的虚拟目录和文件名部分内容为/air/shanghai.html,表示该网页在这个主机上的具体路径。第七章网络爬虫of3127.1.1网页的概念7.1类第七章网络爬虫of3137.1.1网页的概念7.1类的方法2、页面的渲染用户若想要浏览城市空气质量排名情况,必须输入网址:/air。得到如图7.1的结果,网页的样式,实际上是html源代码经过渲染后形成的。这个页面实际上是用户通过浏览器向DNS服务器提交/air后,找到web主机服务器,主机服务器经过解析,将包含图片、HTML、JS、CSS等文件返回到用户浏览器,用户浏览器将这些文件的代码解析渲染,最终就是用户看到的结果。整个这个过程称为用户的请求和响应,响应给客户的是html代码。第七章网络爬虫of3137.1.1网页的概念7.1类第七章网络爬虫of3147.1.1网页的概念7.1类的方法3、网页文件的格式网页文件主要是由各种标签对构成的一个纯文本文件,如:<head>与</head>标签对,<li>与</li>标签对等,不同的标签有不同的作用。如:li标签定义列表项目,span标签被用来组合文档中的行内元素。标签可以有属性,可以有显示的文本。下面以表格第一行乐山市对应的第二列的html代码(<spanclass="tdtd-2nd"><ahref="/air/leshan.html"target="_blank">乐山市</a></span>)为例进行说明:<spanclass="tdtd-2nd">与</span>:是一对标签,class="tdtd-2nd",说明,span标签有一个class属性,值为"tdtd-2nd",用于设置列的外观。<ahref="/air/leshan.html"target="_blank">乐山市</a>,是span标签的内嵌<a>标签,用于设置超链接的,超链接文本是“乐山市”,超链接网址是/air/leshan.html,是个相对路径,绝对路径是/air/leshan.html。第七章网络爬虫of3147.1.1网页的概念7.1类第七章网络爬虫of3157.1.2网络爬虫的工作流程7.1类的方法网络爬虫实质上是一个能自动下载网页的程序,它是搜索引擎中最核心的部分。通用网络爬虫是从一个或若干个初始网页上的URL开始,读取网页的代码并对页面结构进行分析、过滤,并对感兴趣的内容建立索引,同时提取网页上的其他感兴趣的超链接地址,放入到待爬行队列中,如此循环,直到满足系统的停止条件为止。在爬取网页过程中,如何根据当前网页的超链接页面,形成待爬行队列呢?目前有基于IP地址搜索策略、广度优先策略、深度优先策略和最佳优先等,具体请看相关文档。第七章网络爬虫of3157.1.2网络爬虫的工作流程7第七章网络爬虫of3167.1.3Python与网页爬虫7.1类的方法使用Python语言实现网络爬虫和信息提交是非常简单的事情,代码行数很少,也无须知道网络通信等方面知识,非常适合非专业读者使用。然而,肆意的爬取网络数据并不是文明现象,通过程序自动提交内容争取竞争性资源也不公平。就像那些肆意的推销电话一样,他们无视接听者意愿,不仅令人讨厌也有可能引发法律纠纷。在互联网上爬取数据,要遵从Robots排除协议(RobotsExclusionProtocol),它也被称为爬虫协议,是网站管理者表达是否希望爬虫自动获取网络信息意愿的方法。管理者可以在网站根目录放置一个robots.txt文件,并在文件中列出哪些链接不允许爬虫爬取。一般搜索引擎的爬虫会首先捕获这个文件,并根据文件要求爬取网站内容。Robots排除协议重点约定不希望爬虫获取的内容,如果没有该文件则表示网站内容可以被爬虫获得,然而,Robots协议不是命令和强制手段,只是国际互联网的一种通用道德规范。绝大部分成熟的搜索引擎爬虫都会遵循这个协议,建议个人也能按照互联网规范要求合理使用爬虫技术。第七章网络爬虫of3167.1.3Python与网页爬7.1
网络爬虫工作的基本原理7.2
网页内容获取-requests库概述7.3网页内容解析-BeautifulSoup库7.6实战:大数据论文文章标题采集习题7.5实战:热门电影搜索of5677.7实战:全国空气质量第七章网络爬虫7.4
正则表达式7.1网络爬虫工作的基本原理7.2网页内容获取-requ第七章网络爬虫of3187.2.1requests对象7.2网页内容获取-requests库概述http工作原理:HTTP是基于请求-响应模式的,客户端发出请求叫Request,服务器端的响应叫Response。HTTP请求服务器端,常用的方式是GET和POST。通常,GET表示向指定的服务器请求数据,POST表示向指定的服务器提交要被处理的数据。Requests请求的相关函数:Get(url,timeout=n):对应HTTP的get方法,获取网页内容,timeout设定每次请求的超时时间,单位秒。该函数将网页的内容封装成一个Response对象并返回。Post(url,data={‘key’:’value’}):对应HTTP的post方式,其中字典用于传递客户端数据。第七章网络爬虫of3187.2.1requests对象第七章网络爬虫of3197.2.2response对象7.2网页内容获取-requests库概述通过Response对象的属性可以获取网页内容。属性:Status_code:http请求返回的状态,整数,200表示连接成功,404表示失败。在处理网页数据前,要先判断该状态值。Text:页面内容,以字符串形式存储在text中。Encoding:HTTP响应内容的编码格式,通过此属性可以更改返回页面的编码格式,便于处理中文。方法:Json():如果HTTP响应页面包含JSON格式数据,该方法能够在HTTP响应内容中解析存在的JSON数据,这将带来解析HTTP的便利。raise_for_status():方法能在非成功响应后产生异常,即只要返。回的请求状态status_code不是200,这个方法会产生一个异常,用于try…except语句。使用异常处理语句可以避免设置一堆复杂的if语句,只需要在收到响应调用这个方法。第七章网络爬虫of3197.2.2response对象第七章网络爬虫of31107.2.2response对象7.2网页内容获取-requests库概述当遇到网络问题时阿,requests会产生几种常用异常。例如:DNS查询失败、拒绝连接等,requests会抛出ConnectionError异常。遇到无效HTTP响应时,requests则会抛出HTTPError异常。若请求url超时,则抛出Timeout异常。请求超过了设定的最大重定向次数,则会抛出一个TooManyRedirects异常。所以在使用requests时,通常需要将此语句放在try快中进行处理。第七章网络爬虫of31107.2.2response对第七章网络爬虫of31117.2.2response对象7.2网页内容获取-requests库概述【案例7-1】爬取天堂图片网中小黄人图片网页的内容importrequestsdefgethtmltext(url):try:r=requests.get(url,timeout=30)r.raise_for_status()returnr.textexcept:return"“url="/tupian/xiaohuangren_t21343/"print(gethtmltext(url))第七章网络爬虫of31117.2.2response对7.1
网络爬虫工作的基本原理7.2
网页内容获取-requests库概述7.3网页内容解析-BeautifulSoup库7.6实战:大数据论文文章标题采集习题7.5实战:热门电影搜索of56127.7实战:全国空气质量第七章网络爬虫7.4
正则表达式7.1网络爬虫工作的基本原理7.2网页内容获取-requ第七章网络爬虫of31137.3.1BeautifulSoup库概述7.3网页内容解析-BeautifulSoup库beautifulsoup4库,也称为BeautifulSoup库或bs4库,用于解析和处理HTML和XML。它的最大优点是能根据HTML和XML语法建立解析树,进而高效解析其中的内容。类似于c#中的或HTTP中的文档类HTML建立的Web页面一般非常复杂,除了有用的内容信息外,还包括大量用于页面格式的元素,直接解析一个Web网页需要深入了解HTML语法,而且比较复杂。beautifulsoup4库将专业的Web页面格式解析部分封装成函数,提供了若干有用且便捷的处理函数。有关beautifulsoup4库的更多介绍请参考这个第三方库主页:/software/BeautifulSoup/bs4/第七章网络爬虫of31137.3.1Beautiful第七章网络爬虫of31147.3.1BeautifulSoup库概述7.3网页内容解析-BeautifulSoup库例如:有一个描述学生选课的XML代码,表示20004146学生选修了2门课,20004176选修了1门课。<scs> <sc> <sno>20004146</sno> <courses> <course> <cno>1111</cno> <grade>67</grade> </course> <course> <cno>2222</cno> <grade>78</grade> </course> </courses> </sc> <sc> <sno>20004176</sno> <courses> <course> <cno>2222</cno> <grade>70</grade> </course> </courses></sc></scs>第七章网络爬虫of31147.3.1Beautiful第七章网络爬虫of31157.3.1BeautifulSoup库概述7.3网页内容解析-BeautifulSoup库它对应的BeautifulSoup对象的逻辑结构可以理解成这样一棵树。树中一般有4类节点:Tag,NavigableString,BeautifulSoup,Comment,但很多时候,可以把节点当作Tag对象。第七章网络爬虫of31157.3.1Beautiful第七章网络爬虫of31167.3.2beautifulsoup4库常用方法和tag节点7.3网页内容解析-BeautifulSoup库beautifulsoup4提供Xpath操作方式解析数据:1.即按照解析树的逻辑结构,解析数据。2.解析树上的常用节点是tag节点。3.常用方法:BeautifulSoup(html,”html.parser”):该方法需要两个参数,第一参数是需要提取数据的html文档内容或XML,第二个参数是指定解析器。该方法的目的是生成一颗解析树。find_all(name,attrs,recursive,string,limit):方法可以根据标签名字、标签属性和内容检索并返回标签列表。name为标签名;attrs为标签的属性名和值,采用JSON表示;recursive,设置查找层次;string标签的字符串内容;limit返回匹配结果的个数。利用string参数可以实现模糊查找。find(name,attrs,recursive,string):返回找到的第一个结果,find_all()函数由于可能返回更多结果,所以采用列表形式存储返回结果;find()函数返回字符串形式,找不到,返回None。第七章网络爬虫of31167.3.2beautiful第七章网络爬虫of31177.3.2beautifulsoup4库常用方法和tag节点7.3网页内容解析-BeautifulSoup库例如:根据选课学号和门数标签字符串,输出选课的学号。>>>soup=BeautifulSoup('<scs><sc><sno>20004146</sno><number>2</number></sc><sc><sno>20181012</sno><number>5</number></sc></scs>')>>>tag=soup.scs>>>print(tag.string)
>>>print(tag.contents[0].name)
>>>print(tag.contents[0].sno.string)
>>>soup.find_all('sno')第七章网络爬虫of31177.3.2beautiful7.1
网络爬虫工作的基本原理7.2
网页内容获取-requests库概述7.3网页内容解析-BeautifulSoup库7.6实战:大数据论文文章标题采集习题7.5实战:热门电影搜索of56187.7实战:全国空气质量第七章网络爬虫7.4
正则表达式7.1网络爬虫工作的基本原理7.2网页内容获取-requ第七章网络爬虫of31197.4.1正则表达式概念7.4正则表达式从网页中解析需要的数据,除了采用beautifulsoup4库的方法,也可以根据被查找字符串的特征,采用正则表达式的方法,得到符合条件的子字符串。正则表达式库是python的标准库,使用时:importre,即可。正则表达式(RegularExpression):称为规则表达式,又称为规则字符串,它通过一个字符序列来表示满足某种逻辑条件的字符串,主要用于字符串模式匹配或字符串匹配。一个正则表达式由字母、数字和一些特殊符号组成,特殊符号也称为元字符,在正则表达式中具有特殊的含义,可以用来匹配一个或若干个满足某种条件的字符,这些元字符才是构成正则表达式的关键要素。正则表达式通过元字符的各种运用,可以表示丰富的匹配字符串。对程序员来说,如果需要从源字符串中得到需要的子字符串(也称结果字符串),首先要分析子字符串在源字符串中的规律,根据规律去描述正则表达式。第七章网络爬虫of31197.4.1正则表达式概念7.第七章网络爬虫of31207.4.2正则表达式元字符介绍7.4正则表达式1、字符限定元字符字符作用[m1m2……mn]表示一个字符集合(m1、m2……mn等均为单个字符),表示可以与集合中的任意一个字符匹配[^m1m2……mn]表示可以与集合之外的任意一个字符匹配[m-n]表示一个字符范围集合,表示可以与字符m到n之间的所有字符匹配[^m-n]表示可以与集合范围之外的任意一个字符匹配\d用来匹配一个数字字符,相当于“[0-9]”\D用来匹配一个非数字字符,相当于“[^0-9]”\w用来匹配一个单词字符(包括数字、大小写字母和下画线),相当于“[A-Za-z0-9_]”\W用来匹配任意一个非单词字符,相当于“[^A-Za-z0-9_]”\s用来匹配一个不可见字符(包括空格、制表符、换行符等)\S用来匹配一个可见字符.用来匹配除了换行符外的任意一个字符第七章网络爬虫of31207.4.2正则表达式元字符介第七章网络爬虫of31217.4.2正则表达式元字符介绍7.4正则表达式【简单案例】>>>importre>>>str='''<spanclass="tdtd-2nd"><ahref="/air/nanchang.html"target="_blank">南昌市</a></span><spanclass="tdtd-4rd">17</span><spanclass="tdtd-4rd"><emclass="f1"style="color:#79b800">优</em></span>'''则:>>>re.findall(r"\d\d",str)['17','79','80']#匹配出str中只含2个数字的字符串>>>re.findall(r"[6789]\d",str)#匹配出str中只含2个数字的字符串,且第一个数字符号可以是6或7或8或9['79','80']>>>re.findall(r"td.",str)#匹配出str中以td开头,第三个字符不是换行符的连续三个字符['td','td-','td','td-','td','td-']>>>s='aaa,bbbccchigh'#定义字符串>>>re.findall(r'[a-zA-Z]+',s)['aaa','bbb','ccc','high']#实现了分词效果第七章网络爬虫of31217.4.2正则表达式元字符介第七章网络爬虫of31227.4.2正则表达式元字符介绍7.4正则表达式2、数量限定元字符字符作用*用来匹配前面的字符任意多次(0到多次)+用来匹配前面的字符一次或多次?用来匹配前面的字符零次或一次{n}用来匹配前面的字符n次,n是一个非负整数{n,}用来匹配前面的字符至少n次,n是一个非负整数{n,m}用来匹配前面的字符串至少n次,至多m次,m和n为非负整数且n≤m*?,+?,??,{}??跟在前面所述的任何一个数量限定符后面时,表示匹配模式是非贪婪的,即尽可能少地匹配字符串。而默认情况下,匹配是贪婪的,即尽可能多地匹配所搜索的字符串。请将案例7-2中注释掉的正则表达式改为list1=re.findall(r"\"_blank\">.{1,}?</",str1),看运行结果第七章网络爬虫of31227.4.2正则表达式元字符介第七章网络爬虫of31237.4.2正则表达式元字符介绍7.4正则表达式【简单案例】>>>importre>>>str='''<spanclass="tdtd-2nd"><ahref="/air/nanchang.html"target="_blank">南昌市</a></span><spanclass="tdtd-4rd">17</span><spanclass="tdtd-4rd"><emclass="f1"style="color:#79b800">优</em></span>'''则:#re.findall(r"\d{2,}",str)等价于re.findall(r"\d\d",str),re.findall(r"\d\d\d…",str)>>>re.findall(r"\d{2,}",str)['17','79','800']#匹配出str中至少含2个数字的字符串>>>re.findall(r"\d{1,}b\d{1,}",str)['79b800']#匹配出str中数字串中包含一个字母b的字符串>>>s="fdfd<a>aaaaa</a>dfefe<b>bbbb</b>">>>regex='<.*?>.*?<\/.*?>'>>>re.findall(regex,s)['<a>aaaaa</a>','<b>bbbb</b>']#从字符串中分离出标签对第七章网络爬虫of31237.4.2正则表达式元字符介第七章网络爬虫of31247.4.2正则表达式元字符介绍7.4正则表达式3.分组元字符字符作用(正则表达式)将括号之间的正则表达式称为一个子组(group),一个子组对应一个匹配字符串,子组的匹配内容会返回(?P=<name>…)也用来定义一个组。这种方式定义的组可以被组名索引进行访问,访问方式为“(?P=name)”。|用来将两个匹配条件进行逻辑“或”运算
第七章网络爬虫of31247.4.2正则表达式元字符介第七章网络爬虫of31257.4.2正则表达式元字符介绍7.4正则表达式【简单案例】>>>importre>>>str="SatMay2822:18:591994::gsbxh@::770134739-5-5FriDec119:33:071995::odzfm@::817817587-5-11"则:>>>regex='::([a-z]{2,13})@([a-z]{2,13})\.(com|edu|net|org|gov)'>>>re.findall(regex,str)#只输出分组内的匹配字符串[('gsbxh','wtkxw','gov'),('odzfm','sqkqgefpjbd','gov')]第七章网络爬虫of31257.4.2正则表达式元字符介第七章网络爬虫of31267.4.2正则表达式元字符介绍7.4正则表达式4、字符定位元字符字符作用^用来匹配输入字符串是否以。。。。开始。$用来匹配输入字符串是否以。。。。结束。\b用来匹配一个单词边界(即单词和空格之间的位置)。事实上,所谓单词边界不是一个字符,而只是一个位置。\B用来匹配一个非单词边界。第七章网络爬虫of31267.4.2正则表达式元字符介第七章网络爬虫of31277.4.2正则表达式元字符介绍7.4正则表达式【简单案例】>>>importre>>>str='''<spanclass="tdtd-2nd"><ahref="/air/nanchang.html"target="_blank">南昌市</a></span><spanclass="tdtd-4rd">17</span><spanclass="tdtd-4rd"><emclass="f1"style="color:#79b800">优</em></span>'''则:>>>re.findall(r"td",str)['td','td','td','td','td','td']>>>re.findall(r"^td",str)#判断str是以td开头,进行匹配[]第七章网络爬虫of31277.4.2正则表达式元字符介第七章网络爬虫of31287.4.2正则表达式元字符介绍7.4正则表达式5.转义元字符字符作用\元字符在符号在正则表达式中与特殊的含义,如果想要匹配元字符,可以采用转义的方式。如:\\,\*,\.等第七章网络爬虫of31287.4.2正则表达式元字符介第七章网络爬虫of31297.4.2正则表达式元字符介绍7.4正则表达式【简单案例】>>>importre>>>str='''<spanclass="tdtd-2nd"><ahref="/air/nanchang.html"target="_blank">南昌市</a></span><spanclass="tdtd-4rd">17</span><spanclass="tdtd-4rd"><emclass="f1"style="color:#79b800">优</em></span>'''则:>>>re.findall(r"\".*?\"",str)#匹配出str中所有""之间的字符串['"tdtd-2nd"','"/air/nanchang.html"','"_blank"','"tdtd-4rd"','"tdtd-4rd"','"f1"','"color:#79b800"']>>>re.findall(r'["].*?["]',str)['"tdtd-2nd"','"/air/nanchang.html"','"_blank"','"tdtd-4rd"','"tdtd-4rd"','"f1"','"color:#79b800"']#通过结果可以看出,如果把元字符放在[]中,就不需要采用转义方式。第七章网络爬虫of31297.4.2正则表达式元字符介第七章网络爬虫of31307.4.3正则表达式的常用函数介绍7.4正则表达式pile(pattern,flags=0)匹配任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象re.search(pattern,string,flags=0)使用可选标记搜索字符串中第一次匹配正则表达式的对象。如果匹配成功,则返回匹配对象,否则返回Nonere.match(pattern,string,flags=0)
使用带有可选标记的正则表达式的模式来匹配字符串,匹配是从字符串的第一个字符开始进行。如果匹配成功,返回匹配对象,否则返回Nonere.findall(pattern,string,flags=0)
查找字符串中所有匹配的子字符串,并返回一个字符串匹配列表匹配对象.group(num=0)返回整个匹配对象,或者编号为num的特定子组第七章网络爬虫of31307.4.3正则表达式的常用函第七章网络爬虫of31317.4.3正则表达式的常用函数介绍7.4正则表达式例如:下面的正则表达式定义从s中匹配出ip地址的内容。>>>importre>>>s="ipddresselse">>>m1=re.search(r"(([01]{0,1}\d{0,1}\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])",s)>>>print(m1.group())#输出>>>str='''<spanclass="tdtd-2nd"><ahref="/air/nanchang.html"target="_blank">南昌市</a></span><spanclass="tdtd-4rd">17</span><spanclass="tdtd-4rd"><emclass="f1"style="color:#79b800">优</em></span><spanclass="tdtd-2nd"><ahref="/air/nanchang.html"target="_blank">武汉市</a></span><spanclass="tdtd-4rd">17</span><spanclass="tdtd-4rd"><emclass="f1"style="color:#79b800">优</em></span>'''>>>re.findall(r"\"_blank\">(.{1,}?)</a>",str)#匹配出所有的城市名['南昌市','武汉市']第七章网络爬虫of31317.4.3正则表达式的常用函第七章网络爬虫of31327.4.3正则表达式的常用函数介绍7.4正则表达式【案例】爬取解析并保存天堂图片网的小黄人图片importrequestsimportre#爬取天堂图片网小黄人图片网页源码url='/tupian/xiaohuangren_t21343/'data=requests.get(url).text#小黄人图片的超链接格式#<imgsrc="/img/tupian/t/201411/01/xiaohuangren-009.jpg"width="135"height="135"alt="卑鄙的我小黄人图片">regex=r'<imgsrc=\"(.*?.jpg)\"'#取出小黄人图片网址pa=pile(regex)#转为pattern对象ma=re.findall(pa,data)print('本次爬取共获取图片'+str(len(ma))+'张')#列表长度,即找到图片个数i=0forimgurlinma:i+=1print('正在爬取'+imgurl)imgdata=requests.get(imgurl).contentwithopen(str(i)+'.jpg','wb')asf:f.write(imgdata)print('爬取完毕!')第七章网络爬虫of31327.4.3正则表达式的常用函第七章网络爬虫of31337.4.3正则表达式的常用函数介绍7.4正则表达式输出结果:第七章网络爬虫of31337.4.3正则表达式的常用函7.1
网络爬虫工作的基本原理7.2
网页内容获取-requests库概述7.3网页内容解析-BeautifulSoup库7.6实战:大数据论文文章标题采集习题7.5实战:热门电影搜索of56347.7实战:全国空气质量第七章网络爬虫7.4
正则表达式7.1网络爬虫工作的基本原理7.2网页内容获取-requ第七章网络爬虫of31357.5实战:热门电影搜索【案例】搜索2345电影网站上,排名前50的电影排行榜,列出电影名称、上映时间、演员、简介,并保存电影海报图片到文件中importrequestsfrombs4importBeautifulSoupdefgetHtml(url):try:r=requests.get(url,timeout=30)r.raise_for_status()r.encoding='gbk'returnr.textexcept:return''第七章网络爬虫of31357.5实战:热门电影搜索【案例第七章网络爬虫of31367.5实战:热门电影搜索defsaveInfo(html):soup=BeautifulSoup(html,'html.parser')move_ls=soup.find('ul',class_='picListclearfix')movies=move_ls.find_all('li')fortopinmovies:img_url=top.find('img')['src']#查找所有的图片链接name=top.find('span',class_='sTit').get_text()#得到电影名称try:time=top.find('span',class_='sIntro').get_text()except:time='暂时无上映时间信息'try:actors=top.find('p',class_='pActor')actor=''foractinactors.contents:actor=actor+act.string+''except:actor='暂时无演员姓名'第七章网络爬虫of31367.5实战:热门电影搜索def第七章网络爬虫of31377.5实战:热门电影搜索iftop.find('p',class_='pTxtpIntroHide'):intro=top.find('p',class_='pTxtpIntroHide').get_text()else:intro=top.find('p',class_='pTxtpIntroShow').get_text()print('影片名:{}\t{}\n{}\n{}\n\n'.format(name,time,actor,intro))#下载图片withopen('D:/movie/'+name+'.jpg','wb+')asf:img_url="http:"+img_urlimgdata=requests.get(img_url).contentf.write(imgdata)defmain():url='/top/'html=getHtml(url)saveInfo(html)
main()第七章网络爬虫of31377.5实战:热门电影搜索if第七章网络爬虫of31387.5实战:热门电影搜索运行结果:第七章网络爬虫of31387.5实战:热门电影搜索运行结7.1
网络爬虫工作的基本原理7.2
网页内容获取-requests库概述7.3网页内容解析-BeautifulSoup库7.6实战:大数据论文文章标题采集习题7.5实战:热门电影搜索of56397.7实战:全国空气质量第七章网络爬虫7.4
正则表达式7.1网络爬虫工作的基本原理7.2网页内容获取-requ第七章网络爬虫of31407.6实战:大数据论文文章标题采集【案例】采用正则表达式的方法,解析出大论文的文章标题importrequestsfrombs4importBeautifulSoupimportredefgethtmltext(url):try:r=requests.get(url,timeout=30)r.raise_for_status()#r.encoding='utf-8'returnr.textexcept:print('error')return""defpaper_title(page):myItems=re.findall(r'target=\"_blank\">(.*?)</a>',page)foriteminmyItems:print(item)第七章网络爬虫of31407.6实战:大数据论文文章标题第七章网络爬虫of31417.6实战:大数据论文文章标题采集url='/6674.html'html=gethtmltext(url)#得到大论文的总篇数list1=re.findall(r'<atitle="总数"> <b>(.*?)</b>',html)count=int(list1[0])print('大数据论文共'+str(count)+'篇')j=0#一页显示20篇论文,构造出每页论文的域名foriinrange(1,count+1,20):print('第'+str(j+1)+'页')ifj==0:url='/6674.html'else:url='/6674_'+str(j)+'.html'j=j+1#print(url)#读取网页并解析html=gethtmltext(url)paper_title(html)第七章网络爬虫of31417.6实战:大数据论文文章标题第七章网络爬虫of31427.6实战:大数据论文文章标题采集运行结果:第七章网络爬虫of31427.6实战:大数据论文文章标题7.1
网络爬虫工作的基本原理7.2
网页内容获取-requests库概述7.3网页内容解析-BeautifulSoup库7.6实战:大数据论文文章标题采集习题7.5实战:热门电影搜索of56437.7实战:全国空气质量第七章网络爬虫7.4
正则表达式7.1网络爬虫工作的基本原理7.2网页内容获取-requ第七章网络爬虫of31447.7实战:全国空气质量【案例】用beautifulsoup4爬取全国空气质量数据importrequestsfrombs4importBeautifulSoup#一共有318座重点城市a=[[0forcolinrange(3)]forrowinrange(318)]defgethtmltext(url):try:r=requests.get(url,timeout=30)r.raise_for_status()#r.encoding='utf-8'returnr.textexcept:print('error')return""第七章网络爬虫of31447.7实战:全国空气质量【案例第七章网络爬虫of31457.7实战:全国空气质量deffillweather(soup):j=i=0city_name_list=soup.find_all(class_='tdtd-2nd')city_num_list=soup.find_all(class_='tdtd-4rd')#print(len(city_name_list))#print('ghghggh')whilei<len(city_name_list):city_name=city_name_list[i].get_text()city_num=city_num_list[j].get_text()#city_num=city_num_list[j].text#两种方法都可以city_info=city_num_list[j+1].get_text()a[i][0]=city_namea[i][1]=city_numa[i][2]=city_infoi=i+1j=j+2defprintweather():print('排名','城市','空气质量指数','质量状况')foriinrange(317):print(i+1,a[i])第七章网络爬虫of31457.7实战:全国空气质量def第七章网络爬虫of31467.7实战:全国空气质量defmain():#全国重点城市空气质量指数排行榜url='/air'html=gethtmltext(url)#print(html)if(html!=''):soup=BeautifulSoup(html,'html.parser')fillweather(soup)printweather()main()第七章网络爬虫of31467.7实战:全国空气质量def第七章网络爬虫of31477.7实战:全国空气质量运行结果:第七章网络爬虫of31477.7实战:全国空气质量运行结7.1
网络爬虫工作的基本原理7.2
网页内容获取-requests库概述7.3网页内容解析-BeautifulSoup库7.6实战:大数据论文文章标题采集习题7.5实战:热门电影搜索of56487.7实战:全国空气质量第七章网络爬虫7.4
正则表达式7.1网络爬虫工作的基本原理7.2网页内容获取-requ习题:1.用Python爬取今日头条动态页面数据。2.用Python爬取电影票房数据网http://58921.com/alltime,并按年份进行票房统计。3.用Python爬取你感兴趣的电影的影评。4.用正则表达式的分组元字符求解案例7-6的城市列表。5.用Python爬取天堂图片网/tupian中的节日图片,并保存到文件中。6.用Python的itcha库,爬取好友的个性签名数据并进行词频分析和聚类。7.用Python爬取饿了么网站数据。8.使用python模拟登录网站。9.从美国驻北京大使馆提供的PM2.5历史数据网站上(/web/historical/1/1.html),爬取北京pm25数据的相关csv文件并作处理。习题:1.用Python爬取今日头条动态页面数据。感谢聆听感谢聆听7.1
网络爬虫工作的基本原理7.2
网页内容获取-requests库概述7.3网页内容解析-BeautifulSoup库7.6实战:大数据论文文章标题采集习题7.5实战:热门电影搜索of56517.7实战:全国空气质量第七章网络爬虫7.4
正则表达式7.1网络爬虫工作的基本原理7.2网页内容获取-requ第七章网络爬虫of31527.1.1网页的概念7.1类的方法1、URL的含义URL(UniformResourceLocator,URL)称为统一资源定位符,也称为网址。互联网上的每个页面,都对应一个URL。如:浏览上海市空气质量和pm2.5指标的网址为/air/shanghai.html。URL主要包含四个部分:协议部分,如上海市空气质量网址的协议为“http:”,表示超文本传输协议;网站名部分,如上海市空气质量网址的网站名部分为,表示该网页所在的主机位置;端口部分,跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符,端口不是一个URL必须的部分,如果采用默认端口80,则可以省略端口部分;虚拟目录和文件名部分,如上海市空气质量网址的虚拟目录和文件名部分内容为/air/shanghai.html,表示该网页在这个主机上的具体路径。第七章网络爬虫of3127.1.1网页的概念7.1类第七章网络爬虫of31537.1.1网页的概念7.1类的方法2、页面的渲染用户若想要浏览城市空气质量排名情况,必须输入网址:/air。得到如图7.1的结果,网页的样式,实际上是html源代码经过渲染后形成的。这个页面实际上是用户通过浏览器向DNS服务器提交/air后,找到web主机服务器,主机服务器经过解析,将包含图片、HTML、JS、CSS等文件返回到用户浏览器,用户浏览器将这些文件的代码解析渲染,最终就是用户看到的结果。整个这个过程称为用户的请求和响应,响应给客户的是html代码。第七章网络爬虫of3137.1.1网页的概念7.1类第七章网络爬虫of31547.1.1网页的概念7.1类的方法3、网页文件的格式网页文件主要是由各种标签对构成的一个纯文本文件,如:<head>与</head>标签对,<li>与</li>标签对等,不同的标签有不同的作用。如:li标签定义列表项目,span标签被用来组合文档中的行内元素。标签可以有属性,可以有显示的文本。下面以表格第一行乐山市对应的第二列的html代码(<spanclass="tdtd-2nd"><ahref="/air/leshan.html"target="_blank">乐山市</a></span>)为例进行说明:<spanclass="tdtd-2nd">与</span>:是一对标签,class="tdtd-2nd",说明,span标签有一个class属性,值为"tdtd-2nd",用于设置列的外观。<ahref="/air/leshan.html"target="_blank">乐山市</a>,是span标签的内嵌<a>标签,用于设置超链接的,超链接文本是“乐山市”,超链接网址是/air/leshan.html,是个相对路径,绝对路径是/air/leshan.html。第七章网络爬虫of3147.1.1网页的概念7.1类第七章网络爬虫of31557.1.2网络爬虫的工作流程7.1类的方法网络爬虫实质上是一个能自动下载网页的程序,它是搜索引擎中最核心的部分。通用网络爬虫是从一个或若干个初始网页上的URL开始,读取网页的代码并对页面结构进行分析、过滤,并对感兴趣的内容建立索引,同时提取网页上的其他感兴趣的超链接地址,放入到待爬行队列中,如此循环,直到满足系统的停止条件为止。在爬取网页过程中,如何根据当前网页的超链接页面,形成待爬行队列呢?目前有基于IP地址搜索策略、广度优先策略、深度优先策略和最佳优先等,具体请看相关文档。第七章网络爬虫of3157.1.2网络爬虫的工作流程7第七章网络爬虫of31567.1.3Python与网页爬虫7.1类的方法使用Python语言实现网络爬虫和信息提交是非常简单的事情,代码行数很少,也无须知道网络通信等方面知识,非常适合非专业读者使用。然而,肆意的爬取网络数据并不是文明现象,通过程序自动提交内容争取竞争性资源也不公平。就像那些肆意的推销电话一样,他们无视接听者意愿,不仅令人讨厌也有可能引发法律纠纷。在互联网上爬取数据,要遵从Robots排除协议(RobotsExclusionProtocol),它也被称为爬虫协议,是网站管理者表达是否希望爬虫自动获取网络信息意愿的方法。管理者可以在网站根目录放置一个robots.txt文件,并在文件中列出哪些链接不允许爬虫爬取。一般搜索引擎的爬虫会首先捕获这个文件,并根据文件要求爬取网站内容。Robots排除协议重点约定不希望爬虫获取的内容,如果没有该文件则表示网站内容可以被爬虫获得,然而,Robots协议不是命令和强制手段,只是国际互联网的一种通用道德规范。绝大部分成熟的搜索引擎爬虫都会遵循这个协议,建议个人也能按照互联网规范要求合理使用爬虫技术。第七章网络爬虫of3167.1.3Python与网页爬7.1
网络爬虫工作的基本原理7.2
网页内容获取-requests库概述7.3网页内容解析-BeautifulSoup库7.6实战:大数据论文文章标题采集习题7.5实战:热门电影搜索of56577.7实战:全国空气质量第七章网络爬虫7.4
正则表达式7.1网络爬虫工作的基本原理7.2网页内容获取-requ第七章网络爬虫of31587.2.1requests对象7.2网页内容获取-requests库概述http工作原理:HTTP是基于请求-响应模式的,客户端发出请求叫Request,服务器端的响应叫Response。HTTP请求服务器端,常用的方式是GET和POST。通常,GET表示向指定的服务器请求数据,POST表示向指定的服务器提交要被处理的数据。Requests请求的相关函数:Get(url,timeout=n):对应HTTP的get方法,获取网页内容,timeout设定每次请求的超时时间,单位秒。该函数将网页的内容封装成一个Response对象并返回。Post(url,data={‘key’:’value’}):对应HTTP的post方式,其中字典用于传递客户端数据。第七章网络爬虫of3187.2.1requests对象第七章网络爬虫of31597.2.2response对象7.2网页内容获取-requests库概述通过Response对象的属性可以获取网页内容。属性:Status_code:http请求返回的状态,整数,200表示连接成功,404表示失败。在处理网页数据前,要先判断该状态值。Text:页面内容,以字符串形式存储在text中。Encoding:HTTP响应内容的编码格式,通过此属性可以更改返回页面的编码格式,便于处理中文。方法:Json():如果HTTP响应页面包含JSON格式数据,该方法能够在HTTP响应内容中解析存在的JSON数据,这将带来解析HTTP的便利。raise_for_status():方法能在非成功响应后产生异常,即只要返。回的请求状态status_code不是200,这个方法会产生一个异常,用于try…except语句。使用异常处理语句可以避免设置一堆复杂的if语句,只需要在收到响应调用这个方法。第七章网络爬虫of3197.2.2response对象第七章网络爬虫of31607.2.2response对象7.2网页内容获取-requests库概述当遇到网络问题时阿,requests会产生几种常用异常。例如:DNS查询失败、拒绝连接等,requests会抛出ConnectionError异常。遇到无效HTTP响应时,requests则会抛出HTTPError异常。若请求url超时,则抛出Timeout异常。请求超过了设定的最大重定向次数,则会抛出一个TooManyRedirects异常。所以在使用requests时,通常需要将此语句放在try快中进行处理。第七章网络爬虫of31107.2.2response对第七章网络爬虫of31617.2.2response对象7.2网页内容获取-requests库概述【案例7-1】爬取天堂图片网中小黄人图片网页的内容importrequestsdefgethtmltext(url):try:r=requests.get(url,timeout=30)r.raise_for_status()returnr.textexcept:return"“url="/tupian/xiaohuangren_t21343/"print(gethtmltext(url))第七章网络爬虫of31117.2.2response对7.1
网络爬虫工作的基本原理7.2
网页内容获取-requests库概述7.3网页内容解析-BeautifulSoup库7.6实战:大数据论文文章标题采集习题7.5实战:热门电影搜索of56627.7实战:全国空气质量第七章网络爬虫7.4
正则表达式7.1网络爬虫工作的基本原理7.2网页内容获取-requ第七章网络爬虫of31637.3.1BeautifulSoup库概述7.3网页内容解析-BeautifulSoup库beautifulsoup4库,也称为BeautifulSoup库或bs4库,用于解析和处理HTML和XML。它的最大优点是能根据HTML和XML语法建立解析树,进而高效解析其中的内容。类似于c#中的或HTTP中的文档类HTML建立的Web页面一般非常复杂,除了有用的内容信息外,还包括大量用于页面格式的元素,直接解析一个Web网页需要深入了解HTML语法,而且比较复杂。beautifulsoup4库将专业的Web页面格式解析部分封装成函数,提供了若干有用且便捷的处理函数。有关beautifulsoup4库的更多介绍请参考这个第三方库主页:/software/BeautifulSoup/bs4/第七章网络爬虫of31137.3.1Beautiful第七章网络爬虫of31647.3.1BeautifulSoup库概述7.3网页内容解析-BeautifulSoup库例如:有一个描述学生选课的XML代码,表示20004146学生选修了2门课,20004176选修了1门课。<scs> <sc> <sno>20004146</sno> <courses> <course> <cno>1111</cno> <grade>67</grade> </course> <course> <cno>2222</cno> <grade>78</grade> </course> </courses> </sc> <sc> <sno>20004176</sno> <courses> <course> <cno>2222</cno> <grade>70</grade> </course> </courses></sc></scs>第七章网络爬虫of31147.3.1Beautiful第七章网络爬虫of31657.3.1BeautifulSoup库概述7.3网页内容解析-BeautifulSoup库它对应的BeautifulSoup对象的逻辑结构可以理解成这样一棵树。树中一般有4类节点:Tag,NavigableString,BeautifulSoup,Comment,但很多时候,可以把节点当作Tag对象。第七章网络爬虫of31157.3.1Beautiful第七章网络爬虫of31667.3.2beautifulsoup4库常用方法和tag节点7.3网页内容解析-BeautifulSoup库beautifulsoup4提供Xpath操作方式解析数据:1.即按照解析树的逻辑结构,解析数据。2.解析树上的常用节点是tag节点。3.常用方法:BeautifulSoup(html,”html.parser”):该方法需要两个参数,第一参数是需要提取数据的html文档内容或XML,第二个参数是指定解析器。该方法的目的是生成一颗解析树。find_all(name,attrs,recursive,string,limit):方法可以根据标签名字、标签属性和内容检索并返回标签列表。name为标签名;attrs为标签的属性名和值,采用JSON表示;recursive,设置查找层次;string标签的字符串内容;limit返回匹配结果的个数。利用string参数可以实现模糊查找。find(name,attrs,recursive,string):返回找到的第一个结果,find_all()函数由于可能返回更多结果,所以采用列表形式存储返回结果;find()函数返回字符串形式,找不到,返回None。第七章网络爬虫of31167.3.2beautiful第七章网络爬虫of31677.3.2beautifulsoup4库常用方法和tag节点7.3网页内容解析-BeautifulSoup库例如:根据选课学号和门数标签字符串,输出选课的学号。>>>soup=BeautifulSoup('<scs><sc><sno>20004146</sno><number>2</number></sc><sc><sno>20181012</sno><number>5</number></sc></scs>')>>>tag=soup.scs>>>print(tag.string)
>>>print(tag.contents[0].name)
>>>print(tag.contents[0].sno.string)
>>>soup.find_all('sno')第七章网络爬虫of31177.3.2beautiful7.1
网络爬虫工作的基本原理7.2
网页内容获取-requests库概述7.3网页内容解析-BeautifulSoup库7.6实战:大数据论文文章标题采集习题7.5实战:热门电影搜索of56687.7实战:全国空气质量第七章网络爬虫7.4
正则表达式7.1网络爬虫工作的基本原理7.2网页内容获取-requ第七章网络爬虫of31697.4.1正则表达式概念7.4正则表达式从网页中解析需要的数据,除了采用beautifulsoup4库的方法,也可以根据被查找字符串的特征,采用正则表达式的方法,得到符合条件的子字符串。正则表达式库是python的标准库,使用时:importre,即可。正则表达式(RegularExpression):称为规则表达式,又称为规则字符串,它通过一个字符序列来表示满足某种逻辑条件的字符串,主要用于字符串模式匹配或字符串匹配。一个正则表达式由字母、数字和一些特殊符号组成,特殊符号也称为元字符,在正则表达式中具有特殊的含义,可以用来匹配一个或若干个满足某种条件的字符,这些元字符才是构成正则表达式的关键要素。正则表达式通过元字符的各种运用,可以表示丰富的匹配字符串。对程序员来说,如果需要从源字符串中得到需要的子字符串(也称结果字符串),首先要分析子字符串在源字符串中的规律,根据规律去描述正则表达式。第七章网络爬虫of31197.4.1正则表达式概念7.第七章网络爬虫of31707.4.2正则表达式元字符介绍7.4正则表达式1、字符限定元字符字符作用[m1m2……mn]表示一个字符集合(m1、m2……mn等均为单个字符),表示可以与集合中的任意一个字符匹配[^m1m2……mn]表示可以与集合之外的任意一个字符匹配[m-n]表示一个字符范围集合,表示可以与字符m到n之间的所有字符匹配[^m-n]表示可以与集合范围之外的任意一个字符匹配\d用来匹配一个数字字符,相当于“[0-9]”\D用来匹配一个非数字字符,相当于“[^0-9]”\w用来匹配一个单词字符(包括数字、大小写字母和下画线),相当于“[A-Za-z0-9_]”\W用来匹配任意一个非单词字符,相当于“[^A-Za-z0-9_]”\s用来匹配一个不可见字符(包括空格、制表符、换行符等)\S用来匹配一个可见字符.用来匹配除了换行符外的任意一个字符第七章网络爬虫of31207.4.2正则表达式元字符介第七章网络爬虫of31717.4.2正则表达式元字符介绍7.4正则表达式【简单案例】>>>importre>>>str='''<spanclass="tdtd-2nd"><ahref="/air/nanchang.html"target="_blank">南昌市</a></span><spanclass="tdtd-4rd">17</span><spanclass="tdtd-4rd"><emclass="f1"style="color:#79b800">优</em></span>'''则:>>>re.findall(r"\d\d",str)['17','79','80']#匹配出str中只含2个数字的字符串>>>re.findall(r"[6789]\d",str)#匹配出str中只含2个数字的字符串,且第一个数字符号可以是6或7或8或9['79','80']>>>re.findall(r"td.",str)#匹配出str中以td开头,第三个字符不是换行符的连续三个字符['td','td-','td','td-','td','td-']>>>s='aaa,bbbccchigh'#定义字符串>>>re.findall(r'[a-zA-Z]+',s)['aaa','bbb','ccc','high']#实现了分词效果第七章网络爬虫of31217.4.2正则表达式元字符介第七章网络爬虫of31727.4.2正则表达式元字符介绍7.4正则表达式2、数量限定元字符字符作用*用来匹配前面的字符任意多次(0到多次)+用来匹配前面的字符一次或多次?用来匹配前面的字符零次或一次{n}用来匹配前面的字符n次,n是一个非负整数{n,}用来匹配前面的字符至少n次,n是一个非负整数{n,m}用来匹配前面的字符串至少n次,至多m次,m和n为非负整数且n≤m*?,+?,??,{}??跟在前面所述的任何一个数量限定符后面时,表示匹配模式是非贪婪的,即尽可能少地匹配字符串。而默认情况下,匹配是贪婪的,即尽可能多地匹配所搜索的字符串。请将案例7-2中注释掉的正则表达式改为list1=re.findall(r"\"_blank\">.{1,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 60071:2025 SER EN-FR Insulation co-ordination - ALL PARTS
- 湖南省永州市道县2024-2025学年八年级上学期期末考试道德与法治试卷(含答案)
- 广东省揭阳市榕城区2024-2025年第一学期期终质量检测小学二年级数学科试卷(含答案)
- 2024甲乙双方关于合作开发移动支付技术的合同
- 2024水利部门与水库运营管理公司合同
- 福建省南平市岚下中学高二数学理月考试卷含解析
- 雨雪冰冻灾害处置应急预案
- 2024版经济与法律顾问聘用协议书
- 2024版商用车辆运输业务协议模板集版B版
- 2024规范借款简单合同范本
- 销售业绩下滑分析报告
- 财务对标分析报告
- 《病历书写基本规范》课件
- 经理年终工作总结述职报告ppt模板
- 新概念张云生讲解的笔记
- 浅谈初中历史单元作业的设计策略
- 修订完整-(儿研所)婴幼儿发育诊断量表幼儿教育
- 教代会会场背景(红旗)图片课件
- 工学第八章-固相反应课件
- 临时用电拆除方案
- 垂体瘤诊疗规范内科学诊疗规范诊疗指南2023版
评论
0/150
提交评论