安装

  • 本地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')
12-09 13:53