4

(これがエチケット違反でないことを願っています。これを RailsForum に投稿しましたが、最近そこからあまり反応がありません。)

Mechanize が CSS セレクターを介してアンカー タグを認識しないという問題が発生した人はいますか?

HTML は次のようになります (わかりやすくするために空白を削除したスニペット)。

<td class='calendarCell' align='left'>
<a href="http://www.mysite.org/index.php/site/ActivitiesCalendar/2010/02/10/">10</a>
<p style="margin-bottom:15px; line-height:14px; text-align:left;">
<span class="sidenavHeadType">
 Current Events</span><br />
<b><a href="http://www.mysite.org/index.php/site/
Clubs/banks_and_the_fed" class="a2">Banks and the Fed</a></b>
<br />
10:30am- 11:45am
</p>

これらのイベントからデータを収集しようとしています。内でアンカーを取得することを除いて、すべてが機能してい<p>ます。内に明らかに<a>タグがあり<b>ます。このイベントの詳細を取得するには、そのリンクをたどる必要があります。

私のレーキタスクには、次のものがあります。

agent.page.search(".calendarCell,.calendarToday").each do |item|
  day = item.at("a").text

  item.search("p").each do |e|
    anchor   = e.at("a")
    puts anchor
    puts e.inner_html

  end
end

興味深いのは、item.at("a") が常にアンカーを返すことです。しかし、e.at("a") は nil を返します。そして、p 要素で inner_html を実行すると、アンカーが完全に無視されます。出力例:

nil

<span class="sidenavHeadType">
 Photo Club</span><br><b>Indexing Slide Collections</b>
<br>
2:00pm- 3:00pm

ただし、同じスクレイプを Nokogiri で直接実行すると、次のようになります。

doc.css(".calendarCell,.calendarToday").each do |item|
  day = item.at_css("a").text
  item.css("p").each do |e|
    link     = e.at_css("a")[:href]
    puts e.inner_html
  end
end

内部を認識する

、そしてhrefなどを返します。

<span class="sidenavHeadType">
 Bridge Party</span><br><b><a href="http://www.mysite.org/index.php/site/Clubs/party_bridge_51209" class="a2">Party Bridge</a></b>
<br>
7:00pm- 9:00pm

Mechanize は Nokogiri を使用することになっているので、自分のバージョンが悪いのか、それとも他のバージョンにも影響があるのでしょうか。

リードをありがとう。

4

1 に答える 1

1

どうでも。誤警報。Nokogiri タスクでは、アンカーを含むページのローカル コピーを指していました。ライブ ページにはログインが必要だったので、ブラウジングすると a タグが表示されました。rake タスクにログインを追加することで解決しました。

于 2010-02-10T02:04:31.167 に答える