bs4解析
-
数据解析的通用原理是什么?(解析的数据只会存在于标签之间或者属性中)
- html是用来展示数据。
- 原理流程:
- 标签定位
- 数据的提取
-
bs4数据解析的解析原理/流程
- 实例化一个BeautifulSoup的对象,且将等待被解析的数据加载到该对象中
- 方式1:
- BeautifulSoup(fp,‘lxml’):解析本地存储的html文件
- 方式2:
- BeautifulSoup(page_text,‘lxml’):解析互联网上请求到的页面数据)
- 方式1:
- 调用BeautifulSoup对象中的相关方法和属性进行标签定位和数据的提取
- 实例化一个BeautifulSoup的对象,且将等待被解析的数据加载到该对象中
-
标签定位
- soup.tagName:返回第一次出现的tagName标签
- 属性定位:soup.find(‘tagName’,attrName=‘value’)
- findAll和find的用法一样,但是返回值不一样
- 选择器定位:
- select(‘selector’)
-
数据的提取
- 提取标签中存在的数据
- .string:取出标签直系的文本内容
- .text:取出标签中所有的文本内容
- 提取标签属性中存储的数据
- tagName[‘attrName’]
- 提取标签中存在的数据
import requests
from bs4 import BeautifulSoup
headers = {
"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36'
}
url = 'https://www.shicimingju.com/book/sanguoyanyi.html'
page_text = requests.get(url=url, headers=headers).text
fp = open('./sanguo.txt', 'a+', encoding='utf-8')
soup = BeautifulSoup(page_text, 'lxml')
a_list = soup.select('.book-mulu > ul > li > a')
for a in a_list:
title = a.string
detail_url = 'http://www.shicimingju.com' + a['href']
page_detail_text = requests.get(url=detail_url, headers=headers).text
soup = BeautifulSoup(page_detail_text, 'lxml')
content = soup.find('div', class_='chapter_content').text
fp.write(title+':'+content+'\n')
print(title, '下载成功')