Beautiful Soup是一个可以从HTML或XML文件中提取数据的python库。它能够通过你换的转换器实现惯用的文档导航、查找、修改文档的方式。在Python爬虫开发中,我们主要用到的是Beautiful Soup的查找提取功能,修改文档的方式很少用到。@H_419_8@BeautifulSoup(label, ‘HTML.parser’)传入两个参数,第一个参数表示要提取的对象,第2个参数是HTML的标志。
常见函数:
prettify函数的作用是将传入的HTML字符串按照HTML的格式打印出来
Title函数可以查看HTML页面的标题。
find_all方法可以根据标签名、属性、内容查找文档,定制化查找想要查找的内容。一、HTML网页内容@H_419_8@HTML: 主体框架,负责文档结构和内容。
CSS: 添加样式(文字大小、颜色、字体加粗等),负责文档样式和布局。
Js: 添加效果,可以让HTML更加生动好看,负责描述网页的行为。
HTML标记语言的层次非常清晰:
第二层包括头部分head和主体部分body,引入外部文件的标签都可以放在头部,body提供网页的具体内容。@H_419_8@HTML标签作用(标签往往是成对出现的): 之间是表示文本、描述网页; 之间的文本是可见的网页内容; 之间的文本被显示为标题; @H_419_8@之间的文本被显示为段落。 二、BeautifulSoup库爬取天气1.常见函数@H_419_8@prettify函数的作用是将传入的HTML字符串按照HTML的格式打印出来
Title函数可以查看HTML页面的标题。
find_all方法可以根据标签名、属性、内容查找文档,定制化查找想要查找的内容。
import requestsfrom bs4 import BeautifulSoupurl = "http://www.baIDu.com"response = requests.get(url)soup = BeautifulSoup(response.content,"HTML.parser")print(soup.prettify())
@H_419_8@打印出来的内容如下:<!DOCTYPE HTML><!--STATUS OK--><HTML> <head> <Meta content="text/HTML;charset=utf-8" http-equiv="content-type"/> <Meta content="IE=Edge" http-equiv="X-UA-Compatible"/> <Meta content="always" name="referrer"/> <link href="http://s1.bdstatic.com/r/www/cache/bdorz/baIDu.min.CSS" rel="stylesheet" type="text/CSS"/> <Title> 百度一下,你就知道 </Title> </head> <body link="#0000cc"> <div ID="wrapper"> <div ID="head"> <div > <div > <div > <div ID="lg"> <img height="129" hIDefocus="true" src="//www.baIDu.com/img/bd_logo1.png" wIDth="270"/> </div> <form action="//www.baIDu.com/s" ID="form" name="f"> <input name="bdorz_come" type="hIDden" value="1"/> <input name="IE" type="hIDden" value="utf-8"/> <input name="f" type="hIDden" value="8"/> <input name="rsv_bp" type="hIDden" value="1"/> <input name="rsv_IDx" type="hIDden" value="1"/> <input name="tn" type="hIDden" value="baIDu"/> <span > <input autocomplete="off" autofocus="" ID="kw" maxlength="255" name="wd" value=""/> </span> <span > <input ID="su" type="submit" value="百度一下"/> </span> </form> </div> </div> <div ID="u1"> <a href="http://news.baIDu.com" name="tj_trnews"> 新闻 </a> <a href="http://www.hao123.com" name="tj_trhao123"> hao123 </a> <a href="http://map.baIDu.com" name="tj_trmap"> 地图 </a> <a href="http://v.baIDu.com" name="tj_trvIDeo"> 视频 </a> <a href="http://tIEba.baIDu.com" name="tj_trtIEba"> 贴吧 </a> <noscript> <a href="http://www.baIDu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baIDu.com%2f%3fbdorz_come%3d1" name="tj_login"> 登录 </a> </noscript> <script> document.write('<a href="http://www.baIDu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" >登录</a>'); </script> <a href="//www.baIDu.com/more/" name="tj_briicon" > 更多产品 </a> </div> </div> </div> <div ID="ftCon"> <div ID="ftConw"> <p ID="lh"> <a href="http://home.baIDu.com"> 关于百度 </a> <a href="http://ir.baIDu.com"> About BaIDu </a> </p> <p ID="cp"> ©2017 BaIDu <a href="http://www.baIDu.com/duty/"> 使用百度前必读 </a> <a href="http://jianyi.baIDu.com/"> 意见反馈 </a> 京ICP证030173号 <img src="//www.baIDu.com/img/gs.gif"/> </p> </div> </div> </div> </body></HTML>
@H_419_8@接下来我们写代码,找到相应的图片链接
for link in soup.find_all("img"): print(link.get("src"))
@H_419_8@2.爬取天气import requestsfrom bs4 import BeautifulSoupurl = "http://www.weather.com.cn/weather1d/101110101.sHTML"response = requests.get(url)response.enCoding = "utf-8"text = response.textprint(text)
@H_419_8@3.完整代码@H_419_8@在Web前端的CSS语法中,通过CSS也可以定位元素的位置。在写CSS时,标记名不加任何修饰,类名前加点”.“,ID名前加#,在这里可以同类似的方法来筛选元素,用到的方法就是soup.select( ),返回类型是List。粘贴下来如下:
#today > div.t > ul > li:nth-child(1) > p.tem > span
import requestsfrom bs4 import BeautifulSoupurl = "http://www.weather.com.cn/weather1d/101190101.sHTML"response = requests.get(url)response.enCoding = "utf-8"text = response.text# print(text)soup = BeautifulSoup(text,"lxml")weather_info = {"tem":None}weather = {"daytime":weather_info,"night":weather_info.copy()}# (数据在HTML标签中的层级关系)#today > div.t > ui > li:nth-child(1) > p.tem > spantemp = soup.select("#today > div.t > ul > li:nth-child(1) > p.tem > span")# print(temp)# 取出数字# print(temp[0].string)weather["daytime"]["tem"] = temp[0].string#print(weather)#today > div.t > ul > li:nth-child(2) > p.tem > spantemp = soup.select("#today > div.t > ul > li:nth-child(2) > p.tem > span")weather["night"]["tem"] = temp[0].stringprint(weather)
@H_419_8@总结@H_419_8@本节主要讲解了Beautiful Soup解析HTML解析的各种方式,这也是提取网页数据非常关键的环节。也可以实现简单的爬虫,这些内容配合后面的正则表达式,可以达到事半功倍的效果。 总结 以上是内存溢出为你收集整理的python爬虫基础(二)---0基础也能看得懂全部内容,希望文章能够帮你解决python爬虫基础(二)---0基础也能看得懂所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)