认识网页结构
- 形象介绍网页内容:
- html相当于规划房子里每个屋子的功能。
- css相当于给每个屋子里进行装修
- JavaScript则是给每个屋子里配置电器
在网页中的一段代码
<div class='a'>
<p>hello!</p>
</div>
<div> xxx </div>
标签,代表网页中一个区域框架,表示在区域中可装什么东西;<p> </p>
标签之间增加文字;class='a'
为css修饰;<li></li>
标签为列表,在列表题目前加个 点;<img>
标签可以插入一张图;<h1></h1>
h1-h6标签代表不同字号的标题;<a href=" ">
标签可加载链接。<ul></ul>
功能类似于缩进,在<li>
之前用。
网页常见文件类型
- .js 用以控制html页面代码,实现复杂的页面效果或功能
- .css 控制html如何展示,让页面展示的美观漂亮
- .html 用于描述网页的结构,网页的核心
网页分析
一. 使用BeautifulSoup解析网页
#将html文件用lxml引擎解析,放入soup中
Soup = BeautifulSoup(html文件,'lxml')
#在解析出的文件内容中挑选某个因素,select获得的内容是列表
结果列表 = Soup.select("css selector")
运行代码时出现错误:UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 57: illegal multibyte sequence
问题为读取文件时的字符编码问题,在with open(path,’r’,encoding=’UTF8’)可解决。with open("path",'r') as wb_data:
其中‘r’为读取,‘w’代表写入。
二. 描述要爬取得东西在哪
变量 = Soup.select(‘元素路径’)
如何找到路径: 在网页选定的对象处,右击选检查,在对应的html语句处,右击选择copy selector,将复制的内容粘贴在元素路径中即可。select()
产生的是一个列表,从标签中获得需要的数据时需要用到for循环。
CSS Selector: body > div.attribute > ul...
路径表示 谁,在哪,第几个,长什么样
Xpath: /html/body/div[2]/ul/...
路径表示 谁,在哪,第几个
三. 从标签中获得需要的数据
#zip函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
#titles = [1, 2, 3]
#images = [3, 4, 5]
#stars = [5, 6, 7]
#zip(titles, images, stars) = [(1,3,5),(2,4,6),(3,5,7)]
#大多数情况下,要提取的内容放在标签中间 例`<p>hello world</p>`,因此需要去除标签,则使用get_text()函数得到标签中间的内容
#图片链接放在<img>标签的src属性里,可利用get()得到属性文本内容
for title, image, star in zip(titles, images, stars):
title_content = title.get_text()
image_content = image.get("src")