Python爬虫学习笔记
  • Introduction
  • 爬虫简介
    • 1.1 了解网页结构
  • BeautifulSoup 解析网页
    • 2.1 BeautifulSoup 解析网页: 基础
    • 2.2 BeautifulSoup 解析网页: CSS
    • 2.3 BeautifulSoup 解析网页: 正则表达
    • 2.4 小练习: 爬百度百科
  • 更多请求/下载方式
    • 3.1 多功能的 Requests
    • 3.2 下载文件
    • 3.3 小练习: 下载美图
  • 加速你的爬虫
    • 4.1 加速爬虫: 多进程分布式
    • 4.2 加速爬虫: 异步加载 Asyncio
  • 高级爬虫
    • 5.1 高级爬虫: 让 Selenium 控制你的浏览器帮你爬
    • 5.2 高级爬虫: 高效无忧的 Scrapy 爬虫库
Powered by GitBook
On this page
  • CSS 的 Class
  • 按 Class 匹配

Was this helpful?

  1. BeautifulSoup 解析网页

2.2 BeautifulSoup 解析网页: CSS

Previous2.1 BeautifulSoup 解析网页: 基础Next2.3 BeautifulSoup 解析网页: 正则表达

Last updated 6 years ago

Was this helpful?

CSS 的 Class

CSS 在装饰每一个网页部件的时候, 都会给它一个名字. 而且一个类型的部件, 名字都可以一样

里面的字体/背景颜色, 字体大小, 都是由 CSS 来掌控的, CSS 的代码, 可能就会放在这个网页的 < head> 中

from bs4 import BeautifulSoup
from urllib.request import urlopen

# if has Chinese, apply decode()
html = urlopen("https://morvanzhou.github.io/static/scraping/list.html").read().decode('utf-8')
print(html)
<head>
    ...
    <style>
    .jan {
        background-color: yellow;
    }
    ...
    .month {
        color: red;
    }
    </style>
</head>

<body>
...
<ul>
    <li class="month">一月</li>
    <ul class="jan">
        <li>一月一号</li>
        <li>一月二号</li>
        <li>一月三号</li>
    </ul>
    ...
</ul>
</body>

在 < head> 中,被放在 < style> 里面的都是某些 class 的 CSS 代码.,比如 jan 就是一个 class,jan 这个类掌控了这个类型的背景颜色,所以在 < ul class="jan"> 这里, 这个 ul 的背景颜色就是黄色的,而如果是 month 这个类, 它们的字体颜色就是红色

按 Class 匹配

找所有 class=month 的信息. 并打印出它们的 tag 内文字.

soup = BeautifulSoup(html, features='lxml')

# use class to narrow search
month = soup.find_all('li', {"class": "month"})
for m in month:
    print(m.get_text())

"""
一月
二月
三月
四月
五月
"""

找到 class=jan 的信息. 然后在 < ul> 下面继续找 < ul> 内部的< li> 信息

jan = soup.find('ul', {"class": 'jan'})
d_jan = jan.find_all('li')              # use jan as a parent
for d in d_jan:
    print(d.get_text())

"""
一月一号
一月二号
一月三号
"""