Python网络爬虫——bs4基本用法

系统 2111 0

使用流程:

  -导包:from bs4 import BeautifulSoup

  - 使用方式:可以将一个html文档,转化为BeautifulSoup对象,然后通过对象的方法或属性去查找指定的节点内容。

    (1)转化本地文件:

      - soup = BeautifulSoup(open(‘本地文件’),‘lxml’)

    (2)转化网络文件(与requests配合):

      - page_text = requests.get(url=url,headers=headers).text

      - soup = BeautifulSoup(page_text,'lxml')

    (3)打印soup对象显示内容为html文件中的内容

基础语法:

   (1)根据标签名查找

    - soup.a  只能找到第一个符合要求的标签

  (2)获取属性

    - soup.a.atters  获取a所有的属性和属性值,返回一个字典

    - soup.a.atters['href']  获取href属性

    - soup.a['href']  上面的简写

  (3)***获取内容

    - soup.a.string  获取 之间的文本内容(a不含子标签)

      - soup.a['href'].string  获取a标签中href的内容

    - soup.a.text   获取 之间包括子标签的所有文本内容

    - soup.a.get_text()  同上面用法

    【注意】如果标签里还有标签,那么string获取到的结果为None,其他两个可以获取文本内容

  (4)***find:找到第一个符合要求的标签

    - soup.find('a')  找到第一个符合要求的标签(a标签)

    - soup.find('a',title='xxx')   找到第一个title=‘xxx’的a标签

    - soup.find('a',alt='xxx')  同上

    - soup.find('a',class_='xxx')  同上,【注意】class后的_

    - soup.find('a',id='xxx')  同上

  (5)***find_all:找到所有符合要求的标签

    - soup.find_all('a')  找到所有a标签

    - soup.find(['a','b'])  找到所有a和b标签

    - soup.find_all('a',limit=2)  限制前两个

  (6)***根据选择器选择指定的内容

      select:soup.select('.feng')  选择class属性值为feng的所有标签

    - 常见的选择器:标签选择器(a)、类型选择器(.)、id选择器(#)、层级选择器

      - 层级选择器:

        div > p > a > .lala  只能选择最下面一级 class=lala的子标签

        div .dudu  div下面clas=dudu的所有字标签

    【注意】 select选择器返回永远是列表,需要通过下表提取指定的对象

实例:使用bs4实现将诗词名句网站中三国演义小说的每一章的内同爬取到本地磁盘进行存储

            
              import
            
            
               requests

            
            
              from
            
             bs4 
            
              import
            
            
               BeautifulSoup

              
#获得url url
= ' http://www.shicimingju.com/book/sanguoyanyi.html ' headers = { ' User-Agent ' : '' }

#获取网页并转换成BeautifulSoup对象 page_text
= requests.get(url=url,headers= headers).text soup = BeautifulSoup(page_text, ' lxml ' )

#选取class=book-mulu的div标签 >下的ul标签 >下的li标签 >下的所有a标签 a_list
= soup.select( ' .book-mulu>ul>li>a ' )

#创建sanguo.txt文件 fp
= open( ' sanguo.txt ' , ' w ' ,encoding= ' utf-8 ' )

#遍历所有a标签
for a in a_list:
  #获取a标签文本 title
= a.string
  #获取a标签中href属性的文本信息,并组成url detail_url
= ' http://www.shicimingju.com ' + a[ ' href ' ]
  #获取新url内的页面信息 detail_page_text
= requests.get(url=detail_url,headers= headers).text #将新url网页创建为BeautifulSoup对象 title_soup = BeautifulSoup(detail_page_text, ' lxml ' )
  #获取新url内class='chapter_content'的div标签的文本信息 content
= title_soup.find( ' div ' ,class_= ' chapter_content ' ).text
  #将标题与正文间加入\n并写入sanguo.txt文件 fp.write(title
+ ' \n ' + content)
  #每一章节下载完毕都打印成功
print (title, ' 下载完毕 ' ) print ( ' over ' ) fp.close()

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论