您当前的位置:首页 > 计算机 > 编程开发 > Python

python爬虫第三章:(二)bs4进行数据解析

时间:11-05来源:作者:点击数:

2、bs4进行数据解析

2.1 数据解析的原理
  • 1.标签定位
  • 2.提取标签、标签属性中存储的数据值
2.2、bs4数据解析的原理:
  • 1、实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中

  • 2、通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取

2.3、环境安装
pip install bs4

pip install lxml
2.4、如何实例化BeautifulSoup对象:
from bs4 import BeautifulSoup
  • 对象的实例化:

    • 1.将本地的html文档中的数据加载到该对象中

      from bs4 import BeautifulSoup
      
      if __name__=="__main__":
          #将本地的html文档中的数据加载到该对象呢中
          fp=open('./01.html','r',encoding='utf-8')
          soup=BeautifulSoup(fp,'lxml')
          print(soup)
      
    • 2.将互联网上获取的页面源码加载到该对象中

      page_text =response.text
      soup=BeatifulSoup( page_text, 'lxml ')
      
  • 提供的用于数据解析的方法和属性:

    • 1、 soup.tagName:返回的是文档中第一次出现的tagName对应的标签

      soup.a  #suop.tagName :suop.后面跟随的是一个标签名
          print(soup.a)   #suop.tagName返回的是html中第一次出现tagName标签
          
      '''
      输出:
      <a href="/article/124910652" target="_blank">
      <img alt="糗事#124910652" class="illustration" height="auto" src="//pic.qiushibaike.com/system/pictures/12491/124910652/medium/JH2JHAXTS44IPI2Q.jpg" width="100%"/>
      </a>
      
      '''
      
    • 2、soup.find():
      (1)find( ‘tagName’):等同于soup.div

      soup.find('div')  #等同于soup.div
      

      (2)属性定位:
      soup- find (‘div’ ,classr-‘song’)

       soup.find('div',class_='song')      #class_加下划线表示一个参数,定位
      
    • 3、soup.find_all(‘tagName’):返回符合要求的所有标签(列表)

      soup.find_all('a')
      
    • 4、select:

      (1)、select(‘某种选择器(id,class,标签…选择器)’),返回的是一个列表。

      suop.select('.tang')		#html中的class=tang的
      

      (2)层级选择器

      #1、> 表示的是一个层级
      soup.select('.tang > ul > li > a') #返回的是列表
      soup.select('.tang > ul > li > a')[0]#返回的是列表
      
      #2、空格表示的是多个层级
      soup.select('.tang > ul a')[0]#返回的是列表
      
    • 5、获取标签之间的文本数据:

      • soup.a.text / string / get_text()

      • text/get_text():可以获取某一个标签中所有的文本内容

      • string:只可以获取该标签下面直系的文本内容

      soup.select('.tang > ul a')[0].text
      soup.select('.tang > ul a')[0].string
      soup.select('.tang > ul a')[0].get_text()
      
    • 6、获取标签中属性值:

      soup.a[ 'href' ]
      
      2.5、实战 (笔趣阁爬取小说)
import requests
from bs4 import BeautifulSoup

#爬取三国演义的所有章节

if __name__=="__main__":
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
    }

    #对首页数据进行爬虫
    url='https://www.xbiquge.la/75/75639/'

    page=requests.get(url=url,headers=headers).content


    #在首页中解析出张杰的标题和详情页的url
    #1.实例化BeautifulSoup对象,需要将页面源码数据加载到该对象中
    soup=BeautifulSoup(page,'lxml')

    #解析章节标题和详情页的url
    li_list=soup.select('.box_con>div > dl > dd')

    print(li_list)
    fp=open('xiaoshuo.txt','w',encoding='utf-8')
    for li in li_list:
        title=li.a.string
        print(title)
        detail_url='https://www.xbiquge.la'+li.a['href']

        #对详情页发起请求,解析出章节的内容
        detail_page_text=requests.get(url=detail_url,headers=headers).content
        #print(detail_page_text)
        #解析出详情页中的相关章节
        detail_suop=BeautifulSoup(detail_page_text,'lxml')
        div_tag=detail_suop.find('div',class_="content_read")
        #解析到章节的内容
        content=div_tag.text  #div下面的所有内容
        fp.write(title+':'+content+'\n')
        print(title+'爬去成功!!!')
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门