Python爬虫学习笔记_目录Berkeley Zhou:Python爬虫学习笔记_目录zhuanlan.zhihu.com

CSS类的特点

爬虫练习 列表 class | 莫烦 Python


.jan {
background-color: yellow;
}
.feb {
font-size: 25px;
}
.month {
color: red;
}

列表 爬虫练习

这是一个在 莫烦 Python一月

  • 一月一号
  • 一月二号
  • 一月三号

二月三月四月五月


在这个网页中,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

康康返回值

一月一月一号一月二号一月三号二月三月四月五月


很不错,但是存在一些问题

它既得到了我们想要的月份标签,也返回了我们不太需要的日期标签

再进行仔细观察我们发现网站作者的本性

所有的月份都会放在一个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

一切进展良好

一月二月三月四月五月


值得注意的是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方法了

当然,返回值依然是一个列表

最后,我们呢遍历所有的列表就可以得到所有的日期了。