爬取文章内容 bs4数据解析
数据解析的原理
- 解析的局部文本内容会在标签之间或者标签对应的属性中进行存储
- 进行指定标签的定位
- 标签或者标签对应的属性中存储的数值进行提取
爬取页面中指定的内容
- 指定url
- 发起请求
- 获取相应数据
- 数据解析(使用bs4)
- 持久化存储
bs4解析 基础语法
from bs4 import BeautifulSoup
import requests
if __name__ == '__main__':
# 将本地的html文档中的数据加载到该对象中
fp = open('./index.html' , 'r' , encoding='utf-8')
soup = BeautifulSoup(fp ,'lxml')
# 互联网上获取的页面源码加载到该对象中
# page_text = response.text
# soup = BeautifulSoup(page_text , 'lxml')
# print(soup)
# print(soup.a) # 返回html中第一次出现的a对应的标签
# print(soup.find('div')) #等同于 soup.div
# print(soup.find('div' , class_ = 'search-con fl-r')) # 属性定位class_
# print(soup.find_all('a')) # 返回符合要求的所有标签(返回列表)
# print(soup.select('.top'))
# print(soup.select('.top > a')[0]) # 空格表示多个层级,>表示一个层级
# 获取标签之间的文本数据: .text/.get_text 可以获取某个标签中所有的文本内容
# .string 只可以获取该标签下直系的文本内容
print(soup.select('.top')[0])
print(soup.select('.top ')[0].text)
print(soup.select('.top ')[0].string)
# 获取标签中的属性值
print(soup.select('.top>a'))
print(soup.select('.top > a')[0]['href'])
三国演义爬取实战
网页分析
from bs4 import BeautifulSoup
import requests
if __name__ == '__main__':
url = 'https://www.gushicimingju.com/novel/sanguoyanyi/' # url可能会发生变化,自己更改
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0'
}
page_text = requests.get(url=url , headers = headers).text
soup = BeautifulSoup(page_text , 'lxml')
# 持久化存储,打开文件
fp = open('./三国演义.txt' , 'w' , encoding='utf-8')
content = soup.select('.main-content > ul > li >a') # 定位到页面中,标题对应的部分
for index in range(len(content)):
# 标题页获取的url(不完整的url)
detail_url = content[index]['href']
# 获取章节标题
title = content[index].string
# 拼接成完整的url
url = 'https://www.gushicimingju.com/' + detail_url
page_text = requests.get(url=url, headers=headers).text
xiangxi_soup = BeautifulSoup(page_text,'lxml')
xiangxi_content = xiangxi_soup.find('div' , class_='shici-content check-more').text
# print(xiangxi_content)
fp.write(title + ':' +xiangxi_content + '\n')
print(title , 'success!!!')
# break #先循环一次看对不对
看了b站视频,总结的一篇文章,原视频如下
https://www.bilibili.com/video/BV1ha4y1H7sx?p=22&spm_id_from=pageDriver&vd_source=a087002bb5c8adf082a5e20b929d94d4