私はPython3.6でBeautifulSoup4を使用して、生成されたページをウェブで擦っています。情報は常に同じように配置されていますが、情報自体は変わります。これは私が掻き集めているものです。BS4とPython 3.6 Web Scrapingを使用して、特定の<font>文字列の正確に4番目のインスタンスの後ろにあるテキストを見つける方法は?
輸入:BeautifulSoup4、LXML、Tkinterのは、SYS、OS、時間
私はそれは常に非常に最初のタグなので簡単です情報の最初のビットを取得するための基本的なsoup.findを使用してきました。であることを削れ
<font face="Arial" size="-1">
:
information = soup.find('font', {'face': 'Arial', 'size': '-1'}).b.div.previousSibling
はいつも、私は[重要な情報]である、探しているものを引っ張ります。これはすべて<body>
にあり、最初のビットは首尾よく削り取られます。
<td align="right"><font face="Arial" size="-1" color="BLACK">INFORMATION I NEED</font></td>
しかし、いくつかのインスタンスとして同じラインの内側にあるタグ
<font face="Arial" size="-1" color="BLACK">informationIneed</font>
の第四インスタンスの後だ情報を必要とされる
情報が変更されます。
私は情報の最初のビットを引っ張るsoup.findを交換し、
information = soup.find('font', {'face': 'Arial', 'size': '-1', 'color': 'BLACK'}).b.div.previousSibling
にそれを回すとき、私は「はAttributeErrorを得る: 『NoneType』オブジェクトが属性 『previousSiblingは』を持っていない私はこれを前提としているので、私が参照している情報には<div>
または<b>
というタグはありませんが、私が使用しているコードは自分で生成されていません。正しく調整する方法はまだわかりません。を.td.previousSibling
に置き換えても機能しません。私は何を試してみるべきか分からない。
TL; DR、do誰でも<font face="Arial" size="-1" color="BLACK">
の4番目のインスタンスの後、または<td align="right"><font face="Arial" size="-1" color="BLACK">
の2番目のインスタンスの直後に直接情報を取得する方法を知っていますか?
編集1:より簡単な方法は、次の整数を見つけることです。これは3桁まで増やすことができます。
<td align="right"><font face="Arial" size="-1" color="BLACK"> 1</font>
のように見えます。ここでは、</font>
の直前の1を削りたいと思っています。 <td align="right"><font face="Arial" size="-1" color="BLACK">
は一意ではなく、2つあります。私が探しているのは、この文字列の2番目の出現です。
編集2:解決策!
with open("output.html") as url:
soup = BeautifulSoup(url, 'lxml')
tags = soup.findAll('font', {'face': 'Arial', 'size': '-1', 'color': 'BLACK'})
print('There are {} matching tags'.format(len(tags)))
print('Second: {}'.format(tags[3]))
私はこれをインターネット上に残して、同様の問題を抱えている人はドキュメントを理解できません。タグが0の場合は1ではなく0から数えられることに注意してください。tags [0]が最初のインスタンスです。より多くの数字を印刷し続けるだけです。
解決策は独立して見つかりましたが、これは既に持っているものと非常によく似ています。とにかくありがとうございました! – infered5