<jupyter_start><jupyter_text>BeautifulSoup 解析网页: CSS而 CSS 的代码, 可能就会放在这个网页的  中. 我们先使用 Python 读取这个页面.<jupyter_code>from bs4 import BeautifulSoup
from urllib.request import urlopen

# if has Chinese, apply decode()
html = urlopen("https://mofanpy.com/static/scraping/list.html").read().decode('utf-8')
print(html)<jupyter_output><!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="/" >莫烦 Python</a> 的 <a href="/tutorials/data-manipulation/scraping/" >爬虫教程</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><jupyter_text>在  中, 你会发现有这样一些东西被放在  里面, 这些东西都是某些 class 的 CSS 代码. 比如 jan 就是一个 class. jan 这个类掌控了这个类型的背景颜色. 所以在  这里, 这个 ul 的背景颜色就是黄色的. 而如果是 month 这个类, 它们的字体颜色就是红色.这样, 我们就知道, 有时候, 网页中, 这种 class 归类一些组件还是很有用的. 比如我就想找 jan 下面的这些 . 我就能通过寻找 class="jan" 找到它们. BeautifulSoup 就能这么干.<jupyter_code>## 按Class 匹配
按 Class 匹配很简单. 比如我要找所有 class=month 的信息. 并打印出它们的 tag 内文字.<jupyter_output><empty_output><jupyter_text>soup = BeautifulSoup(html, features='html.parser') use class to narrow searchmonth = soup.find_all('li', {"class": "month"})for m in month:    print(m.get_text())<jupyter_code>或者找到 class=jan 的信息. 然后在 <ul> 下面继续找 <ul> 内部的 <li> 信息.
这样一层层嵌套的信息, 非常容易找到.<jupyter_output><empty_output><jupyter_text>jan = soup.find('ul', {"class": 'jan'})d_jan = jan.find_all('li')               use jan as a parentfor d in d_jan:    print(d.get_text())<jupyter_code>如果想要找到一些有着一定格式的信息, 比如使用正则表达来寻找相类似的信息,
 我们在 BeautifulSoup 中也能嵌入正则表达式, 让 BeautifulSoup 更为强大.
  怎么用, 我们就接着往下看啦.<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1654601861427094, 'fraction_numerical': 0.0036194415718717684, 'mean_word_length': 4.935582822085889, 'pattern_counts': {'":': 2, '<': 59, '<?xml version=': 0, '>': 59, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '116850', 'license': 'MIT', 'n_tokens_mistral': 1096, 'n_tokens_neox': 1134, 'n_words': 181, 'path': 'easy-scraping-tutorial/notebook/2-2-beautifulsoup-css.ipynb', 'repo_name': 'ilray88/tutorials', 'size': '1934'}