2023学年完整公开课版beautifulsoup_第1页
2023学年完整公开课版beautifulsoup_第2页
2023学年完整公开课版beautifulsoup_第3页
2023学年完整公开课版beautifulsoup_第4页
2023学年完整公开课版beautifulsoup_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

Beautifulsoup网页下载利器南师附中

包凌琰百度的疫情实时数据报告页面,其代码行数超过600行,仅当前页面的总字符数已超35万!1、BS的简介与安装01学习目标2、BS的常见格式的使用023、用BS提出关键数据034、用实现爬网功能04Part01初识BSBeautifulSoup简介beautifulsoup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。简单地说:beautfulSoup擅长用来提取xml和HTML中的数据。BeautifulSoup安装BeautifulSoup3目前已经停止开发,推荐在现在的项目中使用BeautifulSoup4,不过它已经被移植到BS4了,也就是说导入时我们需要importbs4。下面列出pip进行安装方式,当然也可以用easy_install等方法,大家可以自行研究。我们的版本是4.9.3。BeautifulSoup支持的解析器解析器是什么呢?BeautifulSoup做的工作就是对html标签进行解释和分类,不同的解析器对相同html标签会做出不同解释。BeautifulSoup使用的准备工作我们接下来将通过分析和获取HTML的内容来熟悉beautifulsoup的各项功能。首先,我们准备一个html文档,源代码如下图所示。添加标题导入BS库添加标题生成BS对象添加标题调用方法添加标题获得数据BeautifulSoup使用的一般流程BeautifulSoup的运用一:格式化文档BeautifulSoup使用前导入,格式:frombs4importBeautifulSoup使用格式为:bs对象=BeautifulSoup(要解析的文本,‘解析器’),第一个参数为字符串,第二个参数为解析器,我们这里要解析html文档,所以用内置的“html.parser“,当然其实还有“xml“、“lxml”等

。bs对象的prettify()方法能标准化格式。在文档中添加代码:

soup=BeautifulSoup(html,"html.parser")#格式化html

print(soup.prettify())#按照标准的缩进格式的结构输出BS选择器1、基本选择器2、css选择器3、标准选择器选择器是为了查找、定位元素,从而获取数据的。小结BeautifulSoup功能强大,使用却十分简单,只要导入库后,通过传递html源码和解析器,就可以生成BS对象,通过操作对象就可以获得我们需要的数据。Part02基本选择器基本选择器的几种操作1234使用方法:

soup.tag#获取第一个tag对象获取元素获取信息嵌套选择关联选择使用方法:

#获取tag名称soup.tag.attrs#获取tag属性soup.tag.string#获取tag内容使用方法:

soup.tag1.tag2#获取tag1对象中的tag2对象使用方法:

soup.tag.parent#获取父结点soup.tag.contents#获取子结点soup.tag.next_sibling#获取下个兄弟结点

......小结基本选择器原理和语法比较简单,当页面中标签不多时,只需使用基本选择器就能够很快从中获取相应信息,但如果页面标签较多,比较复杂时,一般会结合其它选择器共同协作完成。Part03CSS选择器CSS选择器简述CSS指层叠样式表(CascadingStyleSheets),它定义如何显示HTML元素。使用css选择器可以通过对css的指定进行快速定位、选择。使用格式为:soup.select()Css选择器的常用方法ID选择器根据元素的ID号选择相应元素标签选择器根据元素的标签名称来选择相应元素类选择器根据class样式名来选择元素混合使用用多种方式混合来选择相应的元素小结CSS选择器使用灵活,能够快速搜索出相应的元素集,然后通过遍历获取相应的信息。Part04标准选择器标准选择器标准选择器有些文章中也称之为方法选择器。我们主要通过find_all()方法来学习如何搜索文档树基本格式:find_all(name,attrs,recursive,text,**kwargs)find_all()常见使用方法参数为字符串该参数当作指定名字tag的属性来搜索。字符串,正则表达式,列表,True.参数为属性CSS类名搜索tag的功能非常实用参数为text通过参数可以搜文档中的字符串内容.与name参数的可选值一样,接受字符串,正则表达式,列表,True.参数为recursive调用tag的find_all()方法时,BeautifulSoup会检索当前tag的所有子孙节点,如果只想搜索tag的直接子节点,可以使用参数recursive=False.04010302小结除了find_all()以外,还有find()、find_parent()等等其它方法,使用方法大同小异。总结不管黑猫白猫,能抓老鼠就是好猫!Part05在复杂页面中获取数据准备工作01首先,我们取网页的源码,该内容在前面讲中已经学习,大致代码如下:importurllibfromurllib.requestimporturlopenheaders={'User-Agent':'Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/79.0.3945.88Safari/537.36'}url="/"#豆瓣电影网request=urllib.request.Request(url=url,headers=headers)response=urllib.request.urlopen(request)html=response.read()print(html)页面初步分析02点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。不难发现,一般网页的首页动辄上千行代码,关键数据隐藏其中,查找十分不便。借助工具页面分析03点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。以Chrome浏览器为例,打开网页后,按F12快捷键,可以看到页面的格式化源码。大部分标记代码处于折叠状态,点击三角可以打开。同时在鼠标在右侧代码上滑动,左侧相应部分会颜色加深,便于查找。寻找数据04点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。以一周口碑榜为例,最简便操作步骤如下:1、用Chrome打开页面后按F12在右侧查看。2、点击任意右侧代码后,按ctrl+F打开查询窗口,输入“一周口碑”后回车。3、查看右侧上下标记,查询跟口碑有关的标记标记分析数据05点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。代码分析:1、一周口碑榜的标题文字和内容处于不同的div层中2、排行榜共有10条数据,放在了table中。3、table共有2列10行。也就是说有10对tr标记。每个标记里有都有两对td提取数据05点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。根据前面学习的find_all函数,我们可以轻易遍历所有td标记,从而将td中的内容全部打印出来。代码如下:importurllibfromurllib.requestimporturlopenfrombs4importBeautifulSoupheaders={'User-Agent':'Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/79.0.3945.88Safari/537.36'}url="file:///F:/work/beautifulsoup/test2.htm"request=urllib.request.Request(url=url,headers=headers)response=urllib.request.urlopen(request)html=response.read()soup=BeautifulSoup(html,"html.parser")foriteminsoup.find_all('td'):print(item.string)提取数据06点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。上述方法可能存在的问题:本例中td标记恰好都是有用的,但如果网页有有第二个table,那么程序可能出错,因此应该更精确地指定table。解决方案:find_all()可以指定查找标记的属性值。本例中排名的td有属性class=”order”,而标题有属性class=”title”修改代码如下:....soup=BeautifulSoup(html,"html.parser")orders=soup.find_all('td',class_='order')

#class是保留字,因而加了下划线titles=soup.find_all('td',class_='title')n=len(orders)foriinrange(n):print(orders[i].string,titles[i].string)提取数据06点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。任务:提取正在热映的电影列表操作流程:1、观察代码发现数据均在li标记中。但网页的li标记非常多。2、通过指定属性来

class='ui-slide-item'

减少

温馨提示

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

评论

0/150

提交评论