私はBS3での抗議のリストをウェブサイト上のいくつかの情報を引き出そうとしていますが、すべてを正しく取得する方法を覚えておくのに苦労しています。最終的には、各イベントを以下の情報を含むCSVに入れたい:PythonとBeautifulSoup 3のイベントページから基本的な抗議情報を取得する
datetimeとして '2011-01-10'、抗議のリンク ''、抗議の名前 'Cattle Rancher's Demo'、位置ID '1728 '、ロケーション名' City Hall '、そして最も重要なのは、国名「マダガスカル」です。次のように
ページのコードは次のとおりです。
<li><article class="protest"><div class="rdf5"><div itemscope itemtype="Protest"><span style="display:none;"><time itemprop="startDate" datetime="2011-01-10T00:00">2011-01-10T00:00</time></span><p class="flag"><img src=/images/flags/flagger.gif></p> <span> 2011 /</span><br /><a href="/protests/" itemprop="url summary">Cattle Rancher's Demo</a> at <span itemprop="location" itemscope itemtype="organization"><span itemprop="name"><a href=/location.aspx?id=1728>City Hall</a></span>/<span itemprop="address" itemscope itemtype="address"><a href=/protests.aspx?ai=10><span itemprop="country-name">Madagscar</span></a></span></div></article></li>
私は正常例えば、個々の要素を引き出すことができます。
for event in soup.findAll("span", itemprop="country-name"):
print event.contents[0]
しかし、私が本当にしたいことは、クラスでそれぞれ全体の記事ブロックを呼び出すことです私は一緒にcsvの行として書き留めておきたいと思います。だから私はこれをやろうとしました...
for article in soup.findAll('article', class_="protest"):
country = soup.find("span", itemprop="country-name")
print country
datetime =
etc
...しかしそれは失敗します。私はそれがちょうど最初の1を取得と思うので、次に、それは時代の同じ国の数百を返し そして私は単に「記事」上のfindAllを使用する場合、私はそれを得ることができたが...
for article in soup.findAll('article'):
...国x回を引く(ここで、xはページにある記事要素の数です)。
もし誰かが、例えば各国の記事ブロックの国と日時のようになったら、残りの部分を把握できると思います。
'soup.find(" span "、itemprop =" country-name ")' to 'article.find ( "span"、itemprop = "country-name") ' –
BS3を本当に使用しているのであれば、BS4へのアップグレードを検討するべきです... –
ありがとう@akashkarothiya私はその方法を試してみますが、答え?また感謝ジョン、以前私は他のすべてにBS4を使っていましたが、長いマシンではなぜ私はそれをBS3にする必要がありますか - 私は機械をシフトするときにコードを更新しますが、 –