2017-06-10 36 views
0

ウェブサイトには複数のPタグがありますが、タグの1つを削りたいだけです。下記のとおりウェブサイトの検査: BeautifulSoupの複数のpタグから1つのPタグを掻き取る方法

<div class="sidebar sbt"> 
<h4>history</h4> 
    <p class="top"> 
     <strong>First </strong><br> 
       Jun 2017 
    </p> 
    <p class="top"> 
     <strong>Page </strong><br> 
     Last 30 days: <strong>200</strong>   
    </p> 
    <p class="top"> 
     <strong>Last </strong><br> 
     2019 
    </p> 
     </div> 

私は彼ら例えばまず2017年6月のちょうど1をこすりしたい場合は、数多くのPタグがある上記1として

、どのように私はsoup.findAll(でいることだろう。.. ) 関数?

答えて

0

すべての<p>タグを取得した後、.getText()を使用して、必要なテキストと比較することができます。

0

soup.pと入力すると、指定したHTMLデータから最初の結果が得られます。

>>> from bs4 import BeautifulSoup 
>>> htmlData = ''' 
... <div class="sidebar sbt"> 
... <h4>history</h4> 
... <p class="top"> 
...   <strong>First </strong><br> 
...    Jun 2017 
... </p> 
... <p class="top"> 
...   <strong>Page </strong><br> 
...   Last 30 days: <strong>200</strong>   
... </p> 
... <p class="top"> 
...   <strong>Last </strong><br> 
...   2019 
...  </p> 
...   </div> 
... ''' 
>>> 
>>> soup = BeautifulSoup(htmlData, 'html.parser') 
>>> soup.p 
<p class="top"> 
<strong>First </strong><br> 
       Jun 2017 
    </br></p> 
>>> 

我々はn番目のデータをこすりしたい場合は、

soup.select("p:nth-of-type(n)") 

例:

>>> soup.select("p:nth-of-type(3)") 
[<p class="top"> 
<strong>Last </strong><br> 
     2019 
    </br></p>] 
>>> soup.select("p:nth-of-type(2)") 
[<p class="top"> 
<strong>Page </strong><br> 
     Last 30 days: <strong>200</strong> 
</br></p>] 
>>> soup.select("p:nth-of-type(1)") 
[<p class="top"> 
<strong>First </strong><br> 
       Jun 2017 
    </br></p>] 
>>> 

More about CSS selectors

別の代替的な方法は、すべてのpタグを見つけることを試みることそれを反復して欲望のものを探します。

0

pの要素をテキストに基づいてターゲティングすると思われるようです。これを行う1つの方法があります。

最も重要な行は、正規表現を使用して、[Last 30 days]を検索するものです。これは、p要素内の文字列の一部です。この文字列を見つけたら、その親を見つけて、その親または親の他のチャンクのtext全体を表示できます。

find_allを使用しているため、結果はリストであることに注意してください(複数の項目がある可能性があるため)。最初の要素ゼロを選択する必要がありました。

>>> import bs4 
>>> HTML = open('temp.htm').read() 
>>> for line in HTML.split('\n'): 
...  print (line) 
...  
<div class="sidebar sbt"> 
<h4>history</h4> 
    <p class="top"> 
     <strong>First </strong><br> 
       Jun 2017 
    </p> 
    <p class="top"> 
     <strong>Page </strong><br> 
     Last 30 days: <strong>200</strong>   
    </p> 
    <p class="top"> 
     <strong>Last </strong><br> 
     2019 
    </p> 
     </div> 
>>> soup = bs4.BeautifulSoup(HTML, 'lxml') 
>>> target = soup.find_all(string=re.compile('Last 30 days')) 
>>> target 
['\n  Last 30 days: '] 
>>> target[0].findParent() 
<p class="top"> 
<strong>Page </strong><br/> 
     Last 30 days: <strong>200</strong> 
</p> 
>>> target[0].findParent().text 
'\nPage \n  Last 30 days: 200\n' 
関連する問題