安装
- 本地html Beautiful(“open(‘路径’)”,‘lxml’)
- 网络html Beautiful(‘网络数据’, ‘lxml’)
常用属性和方法
class_='class避免系统冲突加 _'
!!!
from bs4 import BeautifulSoup
fp = open('本地.html')
soup = BeautifulSoup(fp, 'lxml')
# 标签名查找
print(soup.div) # 只能找到第一个
# 获取标签的属性
print(soup.a.atters) # 取a标签的所有属性
print(soup.a.atters['href']) # 取a标签的href属性值
# 取内容
print(soup.p.string) # 取当前标签的文本内容
print(soup.p.text) # 标签下所有子文本内容
print(soup.p.get_text)
# find查找符合要求的第一个标签!
print(soup.find('a', class_='class避免系统冲突加 _'))
print(soup.find('a', id='XX'))
# find_all 同find 返回列表
print(soup.find_All('a'))
print(soup.find_All('a', limit=2)) # 只取前两个
# 选择器 >表示下面一级
print(soup.select('div > img')[0]) # div下直系img标签
print(soup.select('div img')[0]) # 空格可以表示多个层级
bs4爬小说网指定小说标题及内容
from bs4 import BeautifulSoup
import requests
url = 'http://www.shicimingju.com/book/sanguoyanyi.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
}
def get_content(get_url):
"""获取章节内容"""
content_data = requests.get(url=get_url, headers=headers).text
soup_content = BeautifulSoup(content_data, 'lxml')
div = soup_content.find('div', class_='chapter_content')
con = div.text
return con
data = requests.get(url=url, headers=headers).text
soup = BeautifulSoup(data, 'lxml')
# 取到 a标签对象()对象还可以继续调用 包含章节名和链接
a_list = soup.select('.book-mulu > ul > li > a')
with open('./三国演义.txt', 'w', encoding='utf-8') as f:
for a in a_list:
title = a.string
content_url = a.attrs['href'] # 取a中的href属性
content_url = 'http://www.shicimingju.com' + content_url
content = get_content(content_url)
f.write(title+':'+content+'\n\n\n\n')