python css选择器_Python爬虫学习笔记_BeautifulSoup-CSS选择器


Python爬虫学习笔记_目录

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

CSS类的特点

<!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方法了

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值