美文网首页
2020-04-18 python学习--交往爬虫

2020-04-18 python学习--交往爬虫

作者: javen_spring | 来源:发表于2020-04-22 21:45 被阅读0次

今天接触的是BeautifulSoup模块。听说很厉害,今天倒要见识一下啦。

认识BeautifulSoup模块

  • BeautifulSoup模块是起到网页解析库的功能,帮助爬虫解析数据集提取数据。
  • BeautifulSoup库目前更新到Beautiful Soup 4,由于它不是Python标准库,而是第三方库,需要单独安装它。在终端输入一下代码:
pip install BeautifulSoup4

解析数据

  • 建立实例对象:bs(对象)=BeautifulSoup(要解释的文本,‘解释器’)
  • 第0个参数是要被解析的文本,注意了,它必须是字符串
  • 第1个参数用来标识解析器,我们要用的是一个Python内置库:html.parser。(它不是唯一的解析器,却是简单的那个)
import requests
# 引入BS库,下面的bs4就是beautifulsoup4
from bs4 import BeautifulSoup
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html')
# 把网页解析为BeautifulSoup对象
soup = BeautifulSoup(res.text,'html.parser') 

提取数据

知识点:find()与find_all(),以及Tag对象(标签对象)

  • find()与find_all()是BeautifulSoup对象的两个方法,它们可以匹配html的标签和属性,把BeautifulSoup对象里符合要求的数据都提取出来。还有select()方法达到此目的,此处略过。
  • 官方文档中,find()方法不止标签和属性两种:
find()及find_all()方法.png

知识点:两函数用法是一样的,区别在于它们工作量

  • find()只提取首个满足要求的数据。find()方法将代码从上往下找,找到符合条件的第一个数据,不管后面还有没有满足条件的其他数据,停止寻找,立即返回
  • find_all()顾名思义(find all:查找全部),提取出的是所有满足要求的数据。代码从上往下找,一直到代码的最后,把所有符合条件的数据一起打包返回。
find()&find_all().png

Tag对象:与find()和find_all()提取的数据类型一致。

Tag对象.png
  • 在find_all()及find()提取出内容(Tag对象)后,需要对内容中的文本进一步提取。

find提取后进一步提取文本用到Tag对象的另外两种属性——Tag.text(获得标签中的值),和Tag['属性名'](获得属性值)。
重点:Tag.text提出Tag对象中的文字,用Tag['href']提取出URL。

提取数据过程中属性的变化及相应步骤

属性变化及相应步骤.png

代码示例

# 调用requests库
import requests 
# 调用BeautifulSoup库
from bs4 import BeautifulSoup 
# 返回一个response对象,赋值给res
res =requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html')
# 把res解析为字符串
html=res.text
# 把网页解析为BeautifulSoup对象
soup = BeautifulSoup( html,'html.parser')
# 通过匹配属性class='books'提取出我们想要的元素
items = soup.find_all(class_='books')  
# 遍历列表items
for item in items:       
    # 在列表中的每个元素里,匹配标签<h2>提取出数据               
    kind = item.find('h2')     
    #  在列表中的每个元素里,匹配属性class_='title'提取出数据          
    title = item.find(class_='title')  
    # 在列表中的每个元素里,匹配属性class_='info'提取出数据   
    brief = item.find(class_='info')      
    # 打印书籍的类型、名字、链接和简介的文字
    print(kind.text,'\n',title.text,'\n',title['href'],'\n',brief.text) 

获取、提取数据过程中用到的Response对象、bs对象及Tag对象的其他属性及方法:

  • Response对象的方法:response.raise_for_status() ##检查是否响应成功。如果文件下载出错,将抛出异常。
    利用try...except...语句来确保下载失败时停止:
try:
  res.raise_for_status()
except Exception as exc:
  print('There was a problem:%s'%(exc))
  • 用select()函数在bs对象中查找元素。
select()函数在bs对象中查找元素.png
  • Tag对象调用getText()方法获取对象的文本或内部的HTML。类似于find_all()函数。
content = kind.getText(class_='books')  
  • str()函数接受元素的传递,返回字符串,包括开始标签及结束标签及该元素的文本。
  • .attrs 返回一个字典,包括元素的属性(键)及属性值(值)。
Tag.attrs
#返回{‘class’:'books'}
  • 通过元素的属性获取数据:
items = soup.find_all(class_='books')  [0]
items.get('id')
##返回id的属性值author

服务器响应状态码

服务器响应状态码参考:
慕容小凡博客

相关文章

  • 2020-04-18 python学习--交往爬虫

    今天接触的是BeautifulSoup模块。听说很厉害,今天倒要见识一下啦。 认识BeautifulSoup模块 ...

  • Python爬虫学习(十六)初窥Scrapy

    Python爬虫学习(一)概述Python爬虫学习(二)urllib基础使用Python爬虫学习(三)urllib...

  • 资料

    Python爬虫系列(一)初期学习爬虫的拾遗与总结(11.4更) Python爬虫学习系列教程 Python爬虫学习手册

  • Python爬虫学习系列教程

    转自: 静觅»Python爬虫学习系列教程 Python爬虫学习系列教程 Python版本:2.7 一、爬虫入门 ...

  • 爬虫入门

    为什么要学习爬虫? Python做爬虫优势 关于Python网络爬虫,我们需要学习的有: 什么是爬虫? 网络爬虫(...

  • Python爬虫学习之小结(一)

    到目前为止,Python爬虫学习已经写了八篇文章,分别是: Python爬虫学习(一)概述Python爬虫学习(二...

  • python爬虫学习-day7-实战

    目录 python爬虫学习-day1 python爬虫学习-day2正则表达式 python爬虫学习-day3-B...

  • Python 基础爬虫目录

    目录 python爬虫学习-day1 python爬虫学习-day2正则表达式 python爬虫学习-day3-B...

  • python爬虫学习-day5-selenium

    目录 python爬虫学习-day1 python爬虫学习-day2正则表达式 python爬虫学习-day3-B...

  • python爬虫学习-day6-ip池

    目录 python爬虫学习-day1 python爬虫学习-day2正则表达式 python爬虫学习-day3-B...

网友评论

      本文标题:2020-04-18 python学习--交往爬虫

      本文链接:https://www.haomeiwen.com/subject/yrwzvhtx.html