beautifulsoup解析
beautifulsoup解析
python独有
优势:简单、便捷、高效
- 环境安装 需要将pip源设置为国内源
-需要安装:pip install bs4
bs4在使用时需要一个第三方库
pip install lxml流程:
核心思想:可以将html文档转换成Beautiful对象,然后调用对象属性和方法进行html指定内容的定位和查找
- 1.导包
- 2.创建Beautiful对象:
- 如果html文档来源于本地:Beautiful('open('本地html文件)',lxml)
- 如果html文档来源于网络:Beautiful('网络请求到的页面数据','lxml')
- 3.使用方法和属性:
- 根据标签名查找
- soup.a 只能找到第一个符合要求的标签
- 获取属性
- soup.a.attrs 获取a所有的属性和属性值,返回一个字典
- soup.a.attrs['href'] 获取href属性 也可以简写为 soup.a['href']
- 获取内容
- soup.a.string
- soup.a.text
- soup.a.get_text() 注意:如果标签还有标签,那么string获取的结果为None,而其他两个,可以获取文本内容 -find:找到第一个符合要求的标签
- soup.find('a')
- soup.find('a',title='xxx') 类似的
- soup.find('a',id='xxx') -finAll 获取所有符合条件的标签
- soup.findAll('a')
- soup.findAll(['a','b']) 找到所有的a标签和b标签
- soup.findAll('a',limit=2) 限制取前两个
- 根据选择器选择指定的内容 soup.select() -常见的选择器:标签选择器、类选择器(.)、id选择器(#)、层级选择器
- 层级选择器:
div .dudu #lala 空格表示下面好多级
div > p > a > .lala > 只能是下面一级注意:select返回的永远是列表,可以通过下标提取指定的对象
- 根据标签名查找
练习
- 需求:爬取古诗文网中三国小说里的标题和内容
import requests
from bs4 import BeautifulSoup
url = 'http://www.shicimingju.com/book/sanguoyanyi.html'
# 自定义请求头信息
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' }
page_text = requests.get(url=url,headers=headers).text
# 数据解析
soup = BeautifulSoup(page_text,'lxml')
li_list=soup.select('.book-mulu > ul > li > a')
# type(li_list[0]) bs4.element.Tag Tag类型的数据可以继续调用属性方法进行解析
f = open('./三国演义.txt','w',encoding='utf-8')
for li in li_list:
title = li.text
# print(type(title))
conten_url ='http://www.shicimingju.com' + li.attrs['href']
content_page = requests.get(url=conten_url,headers=headers).text
content_soup = BeautifulSoup(content_page,'lxml')
content = content_soup.select('.chapter_content')[0]
# print(content.text)
f.write(title+content.text+'\n\n\n')
print(title+' 已写入')
beautifulsoup解析的更多相关文章
- BeautifulSoup解析器的选择
BeautifulSoup解析器 在我们使用BeautifulSoup的时候,选择怎样的解析器是至关重要的.使用不同的解析器有可能会出现不同的结果! 今天遇到一个坑,在解析某html的时候.使用htm ...
- Python3.x的BeautifulSoup解析html常用函数
Python3.x的BeautifulSoup解析html常用函数 1,初始化: soup = BeautifulSoup(html) # html为html源代码字符串,type(html) == ...
- Python3.x:BeautifulSoup()解析网页内容出现乱码
Python3.x:BeautifulSoup()解析网页内容出现乱码 问题: start_html = requests.get(all_url, headers=Hostreferer) Beau ...
- python3+beautifulSoup4.6抓取某网站小说(三)网页分析,BeautifulSoup解析
本章学习内容:将网站上的小说都爬下来,存储到本地. 目标网站:www.cuiweijuxs.com 分析页面,发现一共4步:从主页进入分版打开分页列表.打开分页下所有链接.打开作品页面.打开单章内容. ...
- Python爬虫 | Beautifulsoup解析html页面
引入 大多数情况下的需求,我们都会指定去使用聚焦爬虫,也就是爬取页面中指定部分的数据值,而不是整个页面的数据.因此,在聚焦爬虫中使用数据解析.所以,我们的数据爬取的流程为: 指定url 基于reque ...
- 第14.12节 Python中使用BeautifulSoup解析http报文:使用select方法快速定位内容
一. 引言 在<第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问>和<第14.11节 Python中使用BeautifulSo ...
- 第14.11节 Python中使用BeautifulSoup解析http报文:使用查找方法快速定位内容
一. 引言 在<第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问>介绍了BeautifulSoup对象的主要属性,通过这些属性可以访 ...
- BeautifulSoup解析库的介绍和使用
### BeautifulSoup解析库的介绍和使用 ### 三大选择器:节点选择器,方法选择器,CSS选择器 ### 使用建议:方法选择器 > CSS选择器 > 节点选择器 ## 测试文 ...
- BeautifulSoup解析非标准HTML的问题
发现问题: BeautifulSoup版本:4.3.2 在用BeautifulSoup.find_all()搜索HTML时,遇到下面的代码: <a href="/shipin/dong ...
随机推荐
- Docker最全教程之使用PHP搭建个人博客站点(二十二)
目录 官方镜像 编写简单的Hello world! 1. 编写Hello world! 2. 编写Dockerfile 3. 构建并运行 4. 直接使用PHP Docker镜像运行PHP脚本 构建自 ...
- Solr7.x介绍安装和配置(单机版)
之前学的是4.x,然后一看官网,奶奶的都7.x了.于是查了一番资料..... 1)下载和安装 wget http://mirror.bit.edu.cn/apache/lucene/solr/7.3. ...
- Oracle快速插入数据append
1:用merge into 进行匹配更新和插入,2: 开启并行,提高速度3: 如果可以的话加NOLOGING 不写入日志4:如果数据有规律的话,分批次执行 1.使用marge快速插入; MERGE / ...
- java 核心技术 读后总结
总结 1.少用八进制,以及二进制. 那么就是直接用16进制或10进制吗?额,想当年有这样搞过,后面就uuid了. 2.>>>用0填充高位>>用符号位填充高位<< ...
- JavaFX上手--第1天
1.第一个JavaFX Application JavaFX 使用Java来制作可视化图形,可以做动画和3D效果,JavaFX从JDK中直接使用. package application; impor ...
- devExpress GridControl gridView笔记
gridView1.Appearance.EvenRow.BackColor = Color.FromArgb(, , , ); gridView1.Appearance.OddRow.BackCol ...
- git&github学习【尚硅谷】
2019/01/17 18:22 集中式版本工具会有单点故障的问题 分布式版本工具能够避免单点故障 git在本地的结构: 团队内部协作: pull push add commit 等等 关于g ...
- 使用css写三角箭头
.right-arrow{ width:6px; height:6px; align-self: center; border-right:1px solid #2ac795; border-left ...
- n宫格的实现方法
方法一.table 1.看成多列 <style> .line{ display: table; width: 1024px; clear:both; overflow:auto; /*-- ...
- Azure School,让系统化学习回归一站式的简单体验
承认吧,「终身制学习」已经成为一个不可抵挡的趋势.不管你从事什么行业,几乎已经没有什么可以一直吃老本就能搞定的事情,总有各种新的技术和概念等着你去学.至于发展速度飞快的IT 技术,不断的学习更是贯彻始 ...