1

Webページを解析するためのコードがあります。div、ahref、h1 の間のすべてのコンテンツを削除したい。

opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
url = "http://en.wikipedia.org/wiki/Viscosity"
try:
  ourUrl = opener.open(url).read()
except Exception,err:
  pass
soup = BeautifulSoup(ourUrl)                
dem = soup.findAll('p')     

for i in dem:
  print i.text

上記のように、h1、ahref の間にコンテンツのないテキストを印刷したい。

4

1 に答える 1

1

編集:<div>コメントから「タグとタグの間にないテキストを返したい</div>」. これにより、親に div タグがあるブロックが取り除かれます。

raw = '''
<html>
Text <div> Avoid this </div>
<p> Nested <div> Don't get me either </div> </p>
</html>
'''

def check_for_div_parent(mark):
    mark = mark.parent
    if 'div' == mark.name:
        return True
    if 'html' == mark.name:
        return False
    return check_for_div_parent(mark)

soup = bs4.BeautifulSoup(raw)

for text in soup.findAll(text=True):
    if not check_for_div_parent(text):
        print text.strip()

これにより、2 つのタグのみが生成されます。div のタグは無視してください。

Text
Nested

元の応答

あなたが正確に何をしようとしているのかは不明です。まず、ヘッダーが欠落しているように見えるため、完全に機能する例を投稿してみてください。第二に、ウィキペディアは「ボット」または自動ダウンローダーに対してスタンスを持っているようです

Python の「urllib2」: ウィキペディアのページを「urlopen」するとエラー 403 が発生するのはなぜですか?

これは、次のコード行で回避できます

import urllib2, bs4

url = r"http://en.wikipedia.org/wiki/Viscosity"

req = urllib2.Request(url, headers={'User-Agent' : "Magic Browser"}) 
con = urllib2.urlopen( req )

ページができたので、を使用して本文を抽出したいだけだと思いbs4ます。私はこのようなことをします

soup = bs4.BeautifulSoup(con.read())
start_pos = soup.find('h1').parent

for p in start_pos.findAll('p'):
    para = ''.join([text for text in p.findAll(text=True)])
    print para

これにより、次のようなテキストが得られます。

流体の粘度は、せん断応力または引張応力による段階的な変形に対する抵抗力の尺度です。液体の場合、「厚さ」の非公式な概念に対応します。たとえば、ハチミツは水よりも粘性が高い[1]。粘度は、異なる速度で移動する隣接する流体の区画間の摩擦によるものです。流体がチューブを強制的に通過する場合、流体は一般に軸の近くでは速く動き、壁の近くでは非常にゆっくりと動きます。したがって、層の間の摩擦を克服して維持するには、ある程度の応力 (チューブの両端間の圧力差など) が必要です。流体が移動します。同じ速度パターンの場合、必要な応力は流体の粘度に比例します。液体の粘度は、粒子のサイズと形状、および粒子間の引力に依存します。

于 2013-08-26T14:06:44.243 に答える