暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

BeautifulSoup中的select筛选器

染卷 2020-04-16
430

以下代码python3.7版本测试通过。beautifulsoup使用select、find_all等方法可以十分简便地获取到想要的结果。多层div查找,指定class或id查找。

  1. from bs4 import BeautifulSoup

  2. html="""

  3. <head>

  4.    <title>瑞典取经中国“火眼”实验室:目前可日测万例_网易科技</title>

  5.    <meta name="keywords" content="火眼,瑞典,病毒,高通量,通量">

  6.  <link rel="stylesheet" href="https://static.ws.126.net/163/f2e/post_nodejs/css/index.css?v=8">

  7.  <style>

  8.      #endText p img {max-width: 550px;}

  9.  </style>

  10. </head>

  11. <body>

  12. <div class="post_content_main" id="epContentLeft">

  13.            <h1>瑞典取经中国“火眼”实验室:目前可日测万例</h1>

  14.            <!-- 来源 -->

  15.            <!-- 来源 -->

  16.            <div class="post_time_source">

  17.                2020-03-28 08:57:16 来源: <a id="ne_article_source" href="http://www.thepaper.cn/?" target="_blank">澎湃新闻</a>

  18.                <a href="http://jubao.aq.163.com/" target="_blank" class="post_jubao" title="举报">举报</a>

  19.            </div>

  20.            <div class="post_body">

  21.              <div class="post_text" id="endText" style="border-top:1px solid #ddd;">

  22.           <p>近日,华大集团旗披露将在瑞典首都斯德哥尔摩共建万人级别新冠检测多组学检测实验室。</p>

  23.           <p>该实验室集荧光定量核酸检测、高通量测序、抗体三种方法于一体。</p>

  24.           <p>除武汉之外,华大基因在深圳、天津、长沙、石家庄、北京、无锡(技术支持)等地布局。</p>

  25.           <p>他认为,快速给出临床诊断需要及时精准的检测。</p>

  26.                    <p></p>

  27.                    <div class="ep-source cDGray">

  28.                        <span class="left"><a href="http://tech.163.com/"><img src="https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211214_69c95d2a-5ccd-11ec-acf8-fa163eb4f6be.png" alt=" 丁广胜" width="13" height="12" class="icon"></a> 本文来源:澎湃新闻  </span>

  29.                        <span class="ep-editor">责任编辑:丁广胜_NT1941</span>

  30.                    </div>


  31.                </div>

  32.            </div>

  33. </body>


  34. """


  35. #print(html)

  36. soup = BeautifulSoup(html, "lxml")


  37. # 通过标签名查找

  38. #list = soup.select('div')

  39. # 查找所有p标签。

  40. list = soup.select('p')

  41. #print(len(list)) # list的个数===5

  42. #print(list)

  43. #[<p>近日,华大集团旗披露将在瑞典首都斯德哥尔摩共建万人级别新冠检测多组学检测实验室。</p>, <p>该实验室集荧光定量核酸检测 、高通量测序、抗体三种方法于一体。</p>, <p>除武汉之外,华大基因在深圳、天津、长沙、石家庄、北京、无锡(技术支持)等地布 局。</p>, <p>他认为,快速给出临床诊断需要及时精准的检测。</p>, <p></p>]


  44. #获取list串第一个字符串 中的文本内容(自动清除标签)

  45. list0_str=list[0].get_text()

  46. #print(list0_str)

  47. #近日,华大集团旗披露将在瑞典首都斯德哥尔摩共建万人级别新冠检测多组学检测实验室。


  48. #查找位于head 标签下的title标签

  49. list = soup.select('head>title') #等同于 list = soup.select('head title')

  50. #print(list)

  51. #[<title>瑞典取经中国“火眼”实验室:目前可日测万例_网易科技</title>]

  52. #基本选择器输出title内容

  53. list = soup.title.string

  54. #print(soup.title.name)#获取标签的名称

  55. #print(list)

  56. #瑞典取经中国“火眼”实验室:目前可日测万例_网易科技


  57. #通过标类名查找 class="ep-editor"

  58. list = soup.select('.ep-editor')

  59. #print(list)

  60. #[<span class="ep-editor">责任编辑:丁广胜_NT1941</span>]

  61. #

  62. #获取list串第一个字符串 中属性class的值, get('属性') 一般也用来获取href标签地址、图片alt描述等

  63. list0_class =list[0].get("class")

  64. #print(list0_class)

  65. #['ep-editor']



  66. #通过id查找,id="epContentLeft"的标签及内容list

  67. list = soup.select('#epContentLeft')

  68. #print(list)

  69. # <div class="post_time_source">……………………</div>


  70. #组合查找

  71. list = soup.select('head style')

  72. #print(list)

  73. #[<style>#endText p img {max-width: 550px;}</style>]


  74. #获取第4层div内容

  75. list = soup.select('div div div div')

  76. #print(list)

  77. #[<div class="ep-source cDGray">…………</div>]


  78. #h获取第4成div标签下的img 标签列表----第一个字符串------src属性的值

  79. list = soup.select('div div div div img')

  80. #print(list[0].get('src'))

  81. #https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211214_69c95d2a-5ccd-11ec-acf8-fa163eb4f6be.png


  82. #查找第二层div标签中div class属性=post_time_source的list

  83. list = soup.select('div div[class="post_time_source"]')

  84. #print(list)

  85. #[<div class="post_time_source"> ……………………</div>]

  86. #

  87. #查找定制class的div标签中再往子节点进行查找a标签

  88. list = soup.select('div div[class="post_time_source"] a')

  89. #print(list[0].get('href'))

  90. #http://www.thepaper.cn/?



  91. ###list = soup.select('span[class="ep-editor"]').parent

  92. ##print(list)

  93. #

  94. #



  95. #查找id

  96. #print(soup.find_all(attrs={'id': 'epContentLeft'}))

  97. #print(soup.find_all(id='epContentLeft'))


  98. #查找属性及值

  99. #print(soup.find_all(attrs={'class': 'post_text'}))

  100. #print(soup.find_all(class_ ='post_text'))

  101. #print(soup.find_all('title'))

  102. #

  103. #div 多个class属性

  104. #print(soup.find_all("div", {"class":{"post_time_source", "class2"}}))

  105. #


  106. #注意,这里text后面的是标签文本完全匹配,它不是模糊搜索。

  107. #<span class="ep-editor">责任编辑:丁广胜_NT1941</span> 下面是<span>标签内容为'责任编辑:丁广胜_NT1941'的完全匹配个数

  108. #print(soup.find_all(text='责任编辑')) 这种查找方式是没有结果的!!

  109. print(soup.find_all(text='责任编辑:丁广胜_NT1941'))

  110. #['责任编辑:丁广胜_NT1941']


python+BeautifulSoup爬取网易新闻到txt文件

基于互联网精神,在注明出处的前提下本站文章可自由转载!

本文链接:https://ranjuan.cn/beautifulsoup-select-findall/


文章转载自染卷,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论