




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python爬虫大数据采集与挖掘(2)
--Web页面及相关技术《Python爬虫大数据采集与挖掘》第二版.微课视频版(清华大学出版社,2025)
教材《Python爬虫大数据采集与挖掘》及配套公众号
(当当、京东可购书)提纲HTML语言规范编码体系与规范在Web页面处理中使用正则表达式爬虫与大数据分析中相关Python基础HTML标签html标签很多,从闭合的角度可以分为闭合标签与空标签。<body>和</body>空标签是没有内容的标签,通常用来占位Html标签还可以按照在文档中的位置特性进行分类,主要分为块级标签、行内(内嵌)标签和行内-块级(内嵌-块级)标签块级标签是独占一行的标签,并且标签间元素能随时设置宽度、高度、顶部和底部边距等。行内标签的元素和其他元素在同一行上,而元素的宽度、高度、顶部和底部边距不可设置。多个行内-块级标签的元素可以显示在同一行,并且可以设置元素的宽度、高度、顶部和底部边距可以随时设置。除了标签名本身外,标签还可以带有一些属性。<ahref='/'target='_blank'>跳转到baidu</a><img
src="/images/pic.gif"width="28"height="30"><divclass="containerlogo-search">HTML整体结构HTML文档都具有一个基本的整体结构,包括头部(Head)和主体(Body)两大部分,其中头部描述浏览器所需的信息,主体包含网页所要展示的具体内容。
头部头部描述浏览器所需要的信息,比如页面标题、关键词、说明等内容;头部包含的信息不作为网页的内容来显示,但是会影响到网页的显示效果。头部信息的开始和结尾是由<head>和</head>两个标签标记的,<title>、<base>、<link>、<meta>、<script>以及<style>标签可以添加到头部信息中。标签描述<head>定义关于文档的信息<title>定义文档的标题<base>定义页面上所有链接的默认地址或默认目标<link>定义文档与外部资源之间的关系<meta>定义关于HTML文档的元数据<script>定义客户端脚本文件<style>定义文档的样式文件主体
网页需要显示的实际内容都包含在主体之中,由<body>、</body>表示主体信息的开始和结尾。对于网络爬虫抓取Web页面而言,所关注的信息内容也都是大部分封装在<body>和</body>之间。CSS层叠样式表单,CascadingStyleSheet定义如何显示html元素。即使是相同的html文档,应用的CSS不同,从浏览器看到的页面外观也会不同。内联样式<pstyle="color:blue">Thisisaparagraph.</p>内部样式表在头部通过
标签定义内部样式表外部引用当样式需要被很多页面引用时,可以使用独立的外部CSS文件,这样可以简单页面模式的设计。<head><linkrel="stylesheet"type="text/css"href="mystyle.css"></head>HTML编码在页面上的空白处按鼠标右键,查看源代码与爬虫程序设计相关常用标签(1)<meta>最重要的是字符编码,它使用<meta>的charset属性声明Web文档的字符编码。(2)<p><p>标签定义段落。可以将要显示的文章内容放在<p>与</p>标签之间。该标签会自动在段落前后添加一些空白,可以使用CSS来进行调整。通常在Web页面中正文部分的各个段落都是通过该标签来表示。(3)<div><div>用来定义文档中的分区或节,把文档分割成为独立的部分,经常用于网页布局。该标签通常会使用id或class属性设计额外的样式,其中,class用于元素组,而id用于标识单独的唯一的元素。(4)<table><table>定义页面的表格,在很多页面中数据以表格形式展现,因此也是爬虫程序需要处理的重要标签之一。html页面中的简单表格由table元素以及一个或多个tr、th、td元素组成。其中,tr元素定义表格行,td元素定义表格单元,th元素定义表格标题列;同时,th默认加粗并居中显示。<table>的常用属性为表格边框属性border,当使用border="1"设置边框时,会在所有表格单元以及表格上嵌套边框。(5)<a><a>标签定义超链接,用于从一张页面链接到另一张页面,其最重要的属性是href,它指示链接的目标。爬虫在采集到一个Web页面之后,就需要在页面中寻找该标签,并提取出超链接作为新的爬行任务。(6)<form><form>可以把用户输入的数据传送到服务器端,这样服务器端程序就可以处理表单传过来的数据。(7)<base>为了简化包含相对路径的超链接的转换过程,HTML语言提供了<base>标签,用来指定页面中所有超链接的基准路径。例如,如果在p.html中有如下的<base>标签,<basehref="http://www.a.b.c/aaa/"/>那么,<img
src="images/p2.gif">表示从http://www.a.b.c/aaa/images/p2.gif获得图片文件。(7)<script><script>用于在html页面内插入脚本。其type属性为必选的属性,用来指示脚本的MIME类型。下面的代码在html页面内插入javascript脚本,在网页中输出“HelloWorld!”。<scripttype="text/javascript">document.write("HelloWorld!")</script>HTML语言版本进化1999年html42017年12月万维网联盟(W3C)发布的html5.2(1)语义化标签(2)网页多媒体(3)html5添加canvas元素,canvas使用JavaScript用在网页上绘制图形、动画。(4)html5添加了地理位置API,可以定位当前使用者的经纬度等。(5)HTML5引入了应用程序缓存,缓存之后,可在没有网络连接连接时访问网页,同时还可以提高页面加载速度,减少服务器负载。提纲HTML语言规范编码体系与规范在Web页面处理中使用正则表达式爬虫与大数据分析中相关Python基础网页编码网页编码是指网页中字符的编码方式。目前国内常见的网页字符编码主要有utf-8、gbk、gb2312,其中utf-8为国际化编码,在各国各地区的网站中都很常见,可以说是最通用的字符编码。此外,有些日本网页会使用EUC-JP、SHIFT-JIS以及韩国网页会使用EUC-KR等字符编码。网页文本编码互联网上各种不同语言(中文、英文、日文…)文字,在不同的用户端怎么正常显示?网页编码是指网页中字符的编码方式。中文常见的网页字符编码主要有utf-8、gbk、gb2312等日本文字:Shift_JIS等utf-8为国际化编码,在各国各地区的网站中都很常见,可以说是最通用的字符编码。不同的网站的编码并不完全相同,使用爬虫解析文本信息的时候需要考虑网页的编码方式,否则获得的结果可能是乱码。可以从网页的charset属性中看到其编码自动检测一个页面编码方式,可以通过chardet包来进行,需要事先安装。http://www.stat.go.jp/ASCII标准ASCII码使用七位二进制编码表示美式英语中会使用到的控制字符(例如退格、空格)以及可打印字符(例如数字0-9、大小写英文字母、标点符号、运算符号、美元符号),编码范围为0~127gb2312/gbk中文字符编码。主要有gb2312、gbk以及gb18030。gb2312使用两个字节连在一起表示一个汉字,两个字节中前一个称为高字节(范围0xA1-0xF7),后一个为低字节(范围0xA1-0xFE)。gb2312共收录6763个汉字,每个汉字占两个字节。gbk编码是gb2312的扩展,gbk兼容gb2312的所有内容同时又增加了近20000个新的汉字(包括繁体字)和符号。unicodeUniversalMultiple-OctetCodedCharacterSetunicode通常使用两个字节来编码,称为UCS-2(UniversalCharacterSetcodedin2octets)。为了使unicode能表示更多的文字,人们提出了UCS-4使用四个字节编码。unicode编码范围为0-0x10FFFF,最大的字符需要至少三个字节来表示。为了解决编码字符集unicode在网页中使用的效率问题,utf-8、utf-16等编码方式被提出。utf-8utf-8(8-bitunicodeTransformationFormat)是一种针对unicode字符集的可变长度字符编码方式。utf-8对不同范围的字符使用不同长度的编码,规则如下:(1)unicode码点在0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。(2)unicode码点大于0x7F的字符,设需要使用n个字节来表示(n>1),第一个字节的前n位都设为1,第n+1位设为0,剩余的n-1个字节的前两位都设为10,剩下的二进制位使用这个字符的unicode码点来填充。Python3中的字符串默认的编码为unicode,因此,gbk、gb2312等字符编码与utf-8编码之间都必须通过unicode编码才能互相转换。即在python中,使用encode()将unicode编码为utf-8、gbk等,而使用decode()将utf-8、gbk等字符编码解码为unicode>>>n='大数据'#unicode>>>g=n.encode('gbk')#gbk>>>u=n.encode('utf-8')#utf-8>>>g2=n.encode('gb2312')#gb2312>>>g2u=g.decode("gbk").encode("utf-8")#gbk转成utf-8Python对编码转换的支持网页中的编码和Python处理不同的网站的编码并不完全相同,使用爬虫解析文本信息的时候需要考虑网页的编码方式,否则获得的结果可能是乱码。可以从网页的charset属性中看到其编码,例如查看网页源代码,检查网页编码如<metacharset="utf-8">指定了网页的编码为utf-8。用于解析文本的Python库主要有BeautifulSoup。BeautifulSoup使用编码自动检测字库(unicodeDammit、chardet等)来识别输入文档的编码,并将其转换成unicode编码;同时,BeautifulSoup将输出文档自动转换成utf-8编码。自动检测一个页面编码方式,可以通过chardet包来进行,需要事先安装。具体方法如下。
importchardetimportrequestsres=requests.get("")cs=chardet.detect(res.content)#通过响应信息的content属性来判断页面的编码方式chardet.detect的检测结果是一个字典,如下所示,字典的关键字包含'encoding'和'confidence'等,其中前者的值就是页面编码,后者表示自动检测时对结果的确信度[0,1]。{'encoding':'UTF-8-SIG','confidence':1.0,'language':''}因此,可以通过cs['encoding']来得到页面编码。URL中的汉字编码/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E5%A4%A7%E6%95%B0%E6%8D%AE&fenlei=256&rsv_pq=d8be0b36000042a3&rsv_t=b509eYYh8nGUeDFm46I8gUisdHT1AVO2rSeArcfJvACEO64YYJLpzyb%2FhEI&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=11&rsv_sug1=14&rsv_sug7=101&rsv_sug2=0&rsv_btype=i&inputT=4506&rsv_sug4=4506提纲HTML语言规范编码体系与规范在Web页面处理中使用正则表达式爬虫与大数据分析中相关Python基础网络爬虫的一个基本功能是根据URL进行页面采集,因此,从页面中提取URL是爬虫的共性技术问题。由于超链接的表示通常具有固定的模式,因此在具体实现页面链接提取时,采用正则表达式匹配方法是比较简易的方法。Python中,re模块提供了正则表达式匹配所需要的功能。匹配和搜索分割字符串匹配和替换最常用的函数是findall,其函数原型为:findall(pattern,string[,flags])其中,string为输入的字符串,pattern是指定的匹配模式,flags是一个可选参数,用于表示匹配过程中的一些选项。函数返回结果一个列表。'.'通配符:代表任意字符,除\n以外,一个点一个字符ret=re.findall('m...e',"catandmouse")#[‘mouse’]'*'重复匹配允许*之前的一个字符重复多次ret=re.findall('ca*t',"caaaaatandmouse")#[‘caaaaat’]‘?'也是重复匹配,但是?之前的字符只能重复0次或者1次ret=re.findall('ca?t',"catandmouse")#['cat']ret=re.findall('ca?t',"caaaaatandmouse")#[],无匹配'+'也是重复匹配但是至少重复1次,不能是0次ret=re.findall('ca+t',"caaaaatandmouse")#[‘caaaaat’]'{}'也是重复匹配,但是匹配次数可以自行设置,次数可以是一个数,或者范围ret=re.findall('ca{5}t',"caaaaatandmouse")#5次,[‘caaaaat’]ret=re.findall('ca{1,5}t',"caaaatcatdmouse")#1到5次,['caaaat','cat']‘[]’定义匹配的字符范围。比如[a-zA-Z0-9]表示相应位置的字符要匹配英文字符和数字,‘-‘表示范围。ret=re.findall('[0-9]{1,5}',"12catsand6mice")#['12','6']'\'转义字符,如果字符串中有特殊字符需要匹配,就需要进行转义。这些特殊字符包括.*?+$^[]{}|\-。ret=re.findall('\^c.t',"^catmouse")#['^cat']ret=re.findall('\[...\]',"cat[and]mouse")#['[and]']从HTML文档中提取超链接,例如:
s='''<li><ahref="/o/2018-11-06/a75.shtml"target="_blank">进博会</a></li><li><ahref="/o/2018-11-06/a76.shtml"target="_blank">大数据</a></li><li><ahref="/o/2018-11-06/a75.shtml"target="_blank">进博会</a></li>'''re.findall("http://[a-zA-Z0-9/\.\-]*",s)该正则表达式的含义是以http://开始,后续是“大小字母数字或.-”中的任意多个字符。对于前述字符串s,可以得到结果:['/o/2018-11-06/a75.shtml','/o/2018-11-06/a76.shtml','/o/2018-11-06/a75.shtml‘]提纲HTML语言规范编码体系与规范在Web页面处理中使用正则表达式爬虫与大数据分析中相关Py
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 开学典礼新生入学教师发言稿(11篇)
- 2025年小学教师年终述职报告范文(15篇)
- 个人土地承包合同(16篇)
- 10月教师辞职报告范文(3篇)
- 工程部经理年终总结(19篇)
- 房产抵押借款新合同(15篇)
- 消防119宣传月总结范文(30篇)
- 以竞赛为抓手实现“赛教融合”教学
- 临床护理实践指南试题库
- 加减混合运算(教学设计)-2024-2025学年一年级上册数学人教版
- CPK基本知识及实例
- 人字梯验收记录表
- FITS加氢说明书
- 半导体物理与器件物理
- 新员工培训考试【图书专员】
- 防伪包装技术
- X互联网公司WLAN无线网络优化方案全解
- 圆柱钢模计算书
- 合成宝石特征x
- 年度研发费用专项审计报告模板(共22页)
- 中央民族大学人类学博士考试人类学理论与方法真题
评论
0/150
提交评论