一、回顾div+css
①div:区域
p:文字内容
li:列表
ul:无序列表
img:图h1-h6 :不同字号标题
a herf= “”:链接
hr: !–使用hr标签实现水平分割线,需要注意的是这个标签比较特殊,在html中只有开始标签hr,没有结束标签/hr
border-radius 属性允许您向元素添加圆角。
border 设置边框属性
padding 设置内边距属性
②header 信息传递给浏览器,对我们不可见content 主题内容
footer 页脚 ©
③一层层嵌套的方式
二、解析网页中的元素
☆解析本地网页
第一步:用beautifulsoup 解析网页
soup = BeautifulSoup(html,‘lxml’)
用于解析的有五种:html.parser; lxml HTML; lxml XML; html5lib; lxml(解析速度快)
找到要查找的元素位置,右键 copy selector 谁 在哪 第几个 长什么样
copy xpath 谁 在哪 第几个
第二步:描述要爬取的元素位置
titles=Soup.select('selctor 里 的东西')
第三步:筛选所需信息
放在一个字典里,并且输出
第四步:选取高分评价信息
info = []
info.append(data)
for i in info:
if float(i['rate'])>3:
print(i['title'],i['cate'])
所有代码:
from bs4 import BeautifulSoup info = [] with open('new_index.html','r') as wb_data: Soup = BeautifulSoup(wb_data,'lxml') images = Soup.select('body > div.main-content > ul > li > img') titles = Soup.select('body > div.main-content > ul > li > div.article-info > h3 > a') descs = Soup.select('body > div.main-content > ul > li > div.article-info > p.description') rates = Soup.select('body > div.main-content > ul > li > div.rate > span') cates = Soup.select('body > div.main-content > ul > li > div.article-info > p.meta-info') #print(images,titles,descs,rates,cates,sep='\n--------------------\n') # for title in titles: # print(title.get_text()) #创建一个结构存储信息 for title,image,desc,rate,cate in zip(titles,images,descs,rates,cates): data = { 'title':title.get_text(), 'rate':rate.get_text(), 'desc':desc.get_text(), #'cate':cate.get_text(), 'cate':list(cate.stripped_strings), #处理多个文本的高级get_text() 'image':image.get('src') } info.append(data) #print(data) #找出所有分数大于3的文章 for i in info: if float(i['rate'])>3: print(i['title'],i['cate'])
扩展学习:
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment .
find_all()
find_all( name , attrs , recursive , text , **kwargs )
唯一的区别是 find_all() 方法的返回结果是值包含一个元素的列表,而 find() 方法直接返回结果.
find_all() 方法没有找到目标是返回空列表, find() 方法找不到目标时,返回 None .
☆解析外网网页
1.不同方式定位同样元素
2.反爬取js,用手机端数据
3.如何爬取多个页面 format
4.智能header