一.使用流程

    解析流程:
1.pip install bs4
2.导包:from bs4 import BeautifulSoup
3.实例化一个BeautifulSoup对象(将页面源码数据加载到该对象中)
      (1)转化本地文件: - soup = BeautifulSoup(open('本地文件'), 'lxml')
      (2)转化网络文件: - soup = BeautifulSoup('字符串类型或者字节类型', 'lxml') 4.调用BeautifulSoup对象中的相关属性和方法进行标签的定位

二.基本语法

基础巩固:
(1)根据标签名查找
- soup.a 只能找到第一个符合要求的标签
(2)获取属性
- soup.a.attrs 获取a所有的属性和属性值,返回一个字典
- soup.a.attrs['href'] 获取href属性
- soup.a['href'] 也可简写为这种形式
(3)获取内容
- soup.a.string 获取a标签的直系文本
- soup.a.text     这是属性,获取a子类的所有文本
- soup.a.get_text() 这是方法,获取a标签子类的所有文本
【注意】如果标签还有标签,那么string获取到的结果为None,而其它两个,可以获取文本内容
(4)find:找到第一个符合要求的标签
- soup.find('a') 找到第一个符合要求的
- soup.find('a', title="xxx") 具有title=a属性的
- soup.find('a', alt="xxx")
- soup.find('a', class_="xxx")
- soup.find('a', id="xxx")
(5)find_all:找到所有符合要求的标签
- soup.find_all('a')
- soup.find_all(['a','b']) 找到所有的a和b标签
- soup.find_all('a', limit=2) 限制前两个
(6)根据选择器选择指定的内容
select:soup.select('#feng')
- 常见的选择器:标签选择器(a)、类选择器(.)、id选择器(#)、层级选择器
- 层级选择器:
div .dudu #lala .meme .xixi 下面好多级
div > p > a > .lala 只能是下面一级
        select就是css选择器
【注意】select选择器返回永远是列表,需要通过下标提取指定的对象

三.重点语法find和find_all

  1. name参数的四种过滤器
   soup=Beautifulsoup('page','lxml')
    •  不带过滤器: print(soup.find_all())  #没有过滤,查找所有标签
    • 字符串过滤器: print (soup.find_all())  #字符串过滤器,即标签名
    • 列表: print(soup.find_(['a','b'])) #找到所有的a标签和b标签,任一即可
    • 正则:   print(soup.find_all(re.complie('^b'))) #找到所有b开头的标签
    • 方法: def has_class_but_no_id(tag):
        •       return tag.has_attr('class') and not tag.has_attr('id')
        • print(soup.find_all(has_class_but_no_id))
  2、按照类名查找,注意关键字是class_,class_=value,value可以是五种选择器之一
       print(soup.find_all('a',class_='sister')) #查找类为sister的a标签
       print(soup.find_all('a',class_='sister ssss')) #查找类为sister和sss的a标签,顺序错误也匹配不成功
       print(soup.find_all(class_=re.compile('^sis'))) #查找类为sister的所有标签   3、attrs
    print(soup.find_all('p',attrs={'class':'story'}))   4、text: 值可以是:字符,列表,True,正则
    print(soup.find_all(text='Elsie'))
    print(soup.find_all('a',text='Elsie'))  
`
  5、limit参数:如果文档树很大那么搜索会很慢.如果我们不需要全部结果,可以使用 limit 参数限制返回结果的数量.效果与SQL中的limit关键字类似,
  当搜索到的结果数量达到 limit 的限制时,就停止搜索返回结果
    print(soup.find_all('a',limit=2))   6、recursive:调用tag的 find_all() 方法时,Beautiful Soup会检索当前tag的所有子孙节点,如果只想搜索tag的直接子节点,可以使用参数 recursive=False .
    print(soup.html.find_all('a'))
    print(soup.html.find_all('a',recursive=False))   7.find和find_all一样

四.爬取小说

import requests
from bs4 import BeautifulSoup '''
解析流程:
1.pip install bs4
2.导包:from bs4 import BeautifulSoup
3.实例化一个BeautifulSoup对象(将页面源码数据加载到该对象中)
4.调用BeautifulSoup对象中的相关属性和方法进行标签的定位
''' headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'
}
url='http://www.shicimingju.com/book/sanguoyanyi.html'
page_text=requests.get(url=url,headers=headers).text bs4=BeautifulSoup(page_text,'lxml')
#返回一个li列表
li_list=bs4.select('.book-mulu>ul>li')
f=open('./bs-三国','w',encoding='utf-8')
for li in li_list:
detail_url='http://www.shicimingju.com'+li.a['href']
detail_page_text=requests.get(detail_url).text
bs=BeautifulSoup(detail_page_text)
title=bs.select('.www-main-container>h1')[0].text #select返回的是列表
content=bs.find('div',class_='chapter_content').text f.write(title+'\n'+content)
print(title+':下载成功')

bs4的简单使用的更多相关文章

  1. 爬虫,基于request,bs4 的简单实例整合

    简单爬虫示例 爬取抽屉,以及自动登陆抽屉点赞 先查看首页拿到cookie,然后登陆要携带首页拿到的 cookie 才可以通过验证 """""" ...

  2. python bs4 + requests4 简单爬虫

    参考链接: bs4和requests的使用:https://www.cnblogs.com/baojinjin/p/6819389.html 安装pip:https://blog.csdn.net/z ...

  3. bs4的简单应用之防止xss攻击和文本截断

    BeautifulSoup可以过滤html标签,根据这个功能我们可以防止xss攻击和进行文本过滤 1. 安装 pip install beautifulsoup4 2.导入.使用 from bs4 i ...

  4. python爬虫起步...开发环境搭建,最简单的方式

    研究一门编程语言,一般第一步就是配置安装部署相关的编程环境.我认为啊,在学习的初期,大家不是十分了解相关的环境,或者是jar包,python模块等的相关内容,就不需要花费大量的时间去研究如何去安装它. ...

  5. 《爬虫学习》(四)(使用lxml,bs4库以及正则表达式解析数据)

    1.XPath: XPath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. 工具:扩展商店里搜索:XPath ...

  6. Python 目录指引

    1.0 Python 基础整合 1.1 变量 1.2 数据类型 1.3 基础语法 1.4 文件操作 1.5 函数 1.6 生成器 1.7 迭代器 1.8 装饰器 1.9 字符集 2.0 Python ...

  7. Python BeautifulSoup 使用

    BS4库简单使用: 1.最好配合LXML库,下载:pip install lxml 2.最好配合Requests库,下载:pip install requests 3.下载bs4:pip instal ...

  8. 项目实战:BBS+Blog项目开发

    01-博客系统之功能需求 02-博客系统之表结构设计1 03-博客系统之表结构设计2 04-博客系统之表结构设计3 05-博客系统之表结构设计4 06-博客系统之表机构设计5 07-博客系统之创建系统 ...

  9. 练习: bs4 简单爬取 + matplotlib 折线图显示 (关键词,职位数量、起薪)

    要看一种技术在本地的流行程度,最简单的就是找招聘网站按关键词搜索. 比如今天查到的职位数量是vue 1296个,react 1204个,angular 721个.国际上比较流行的是react,本地市场 ...

随机推荐

  1. python爬虫框架(2)--PySpider框架安装配置

    1.安装 1.phantomjs PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速.原生支持各种Web标准:DOM 处理 ...

  2. vue 生命周期小结

    生命周期小结生命周期钩子的一些使用方法: beforecreate : 可以在这加个loading事件,在加载实例时触发 created : 初始化完成时的事件写在这里,如在这结束loading事件, ...

  3. C++对ASCII文件的操作例子

    从键盘读入一行字符,把其中的字母字符依次放在磁盘文件f2.dat中,再把它从磁盘文件读入程序,将其中的小写字母改写成大写字母,再存入磁盘文件f3.dat. code: #include<iost ...

  4. GCD 学习(八)dispatch_semaphore

    dispatch_semaphore 信号量基于计数器的一种多线程同步机制.在多个线程访问共有资源时候,会因为多线程的特性而引发数据出错的问题.     dispatch_queue_t queue ...

  5. Entity Framework Tutorial Basics(14):Choose development approach

    Choose development approach with Entity Framework: We have seen Code-first, Model-first and Database ...

  6. Entity Framework Code-First(20):Migration

    Migration in Code-First: Entity framework Code-First had different database initialization strategie ...

  7. 简单VBS教程.RP

    Mimick同菜鸟==.文转豆瓣~:https://www.douban.com/note/88562379/ 讲一下VBScript.主要面向菜鸟,懂得编程的朋友就不要浪费时间了,如果你想接触以下V ...

  8. java代理模式实例讲解

    下面这个是设计模式课上的例子: import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import ...

  9. c#操作json 使用JavaScriptSerializer

    需要引用:System.Web.Extensions /// <summary> /// json的信息.保证定义的变量和json的字段一样(也可以使用struct) /// </s ...

  10. C#:最简洁强大的代码生成器

    这是我们项目中最常用,也是最强大的代码生成器,可以自动生成 存储过程,Model,DAL,BLL 多层的脚本. 第一步:配置config,设置连接的数据库 <?xml version=" ...