Python爬虫学习笔记_目录
Berkeley Zhou:Python爬虫学习笔记_目录zhuanlan.zhihu.comCSS类的特点
<!DOCTYPE html>
<html lang="cn">
<head>
<meta charset="UTF-8">
<title>爬虫练习 列表 class | 莫烦 Python</title>
<style>
.jan {
background-color: yellow;
}
.feb {
font-size: 25px;
}
.month {
color: red;
}
</style>
</head>
<body>
<h1>列表 爬虫练习</h1>
<p>这是一个在 <a href="https://morvanzhou.github.io/" >莫烦 Python</a> 的 <a href="https://morvanzhou.github.io/tutorials/>>爬虫教程</a>
里无敌简单的网页, 所有的 code 让你一目了然, 清晰无比.</p>
<ul>
<li class="month">一月</li>
<ul class="jan">
<li>一月一号</li>
<li>一月二号</li>
<li>一月三号</li>
</ul>
<li class="feb month">二月</li>
<li class="month">三月</li>
<li class="month">四月</li>
<li class="month">五月</li>
</ul>
</body>
</html>
在这个网页中,li class="month"
中的class='month'
就是一个CSS类
通过这些类的查找,我们可以快速筛选出我们需要的元素
在Python中使用CSS选择器也很简单
我们回到上次的根据html.parser解析出来的BeautifulSoup类,可以进行BeautifulSoup解析
分析一下网页结构,我们会发现所有的列表都是放在li tag中
那么我们在soup对象使用find_all方法的时候就可以寻找li标签
html_soup = BeautifulSoup(html, 'html.parser')
li_all = html_soup.find_all('li')
for li_obj in li_all:
print li_obj
康康返回值
<li class="month">一月</li>
<li>一月一号</li>
<li>一月二号</li>
<li>一月三号</li>
<li class="feb month">二月</li>
<li class="month">三月</li>
<li class="month">四月</li>
<li class="month">五月</li>
很不错,但是存在一些问题
它既得到了我们想要的月份标签,也返回了我们不太需要的日期标签
再进行仔细观察我们发现网站作者的本性
所有的月份都会放在一个class="month"
的CSS类里面,这个时候我们就可以使用CSS选择器
使用方法是在find_all函数的第二个传入参数传入一个字典,选择需要的类名
html_soup = BeautifulSoup(html, 'html.parser')
li_all = html_soup.find_all('li', {'class': 'month'})
for li_obj in li_all:
print li_obj
一切进展良好
<li class="month">一月</li>
<li class="feb month">二月</li>
<li class="month">三月</li>
<li class="month">四月</li>
<li class="month">五月</li>
值得注意的是CSS选择器会选择一切包括传入参数类名的类
比如这里我们传入的只month,它依然选择出来了feb month类
另外我们需要注意的是BeautifulSoup.find_all方法不管是不是在调用CSS选择器的时候返回的对象都是一个BeautifulSoup列表
比如我们在进行一下操作的时候:
html_soup = BeautifulSoup(html, 'html.parser')
li_jan = html_soup.find_all('ul', {'class': 'jan'})
for jan in li_jan:
li_day = jan.find_all('li')
for day in li_day:
print day.get_text()
在代码中li_jan
就是整个网页CSS选择出来的一个BeautifulSoup列表,这里包括了所有类名为jan
的BeautifulSoup对象
接着,我们用for循环遍历了整个列表,这样每次循环jan就是一个BeautifulSoup对象
对于这个BeautifulSoup对象,我们又可以使用find_all方法了
当然,返回值依然是一个列表
最后,我们呢遍历所有的列表就可以得到所有的日期了。