【问题标题】:Mechanize not recognizing anchor tags via CSS selector methods机械化无法通过 CSS 选择器方法识别锚标签
【发布时间】:2011-01-15 01:30:54
【问题描述】:

(希望这不是违反礼节:我在 RailsForum 上发布了此内容,但最近没有得到太多回复。)

有没有其他人遇到过 Mechanize 无法通过 CSS 选择器识别锚标签的问题?

HTML 看起来像这样(为了清楚起见,删除了空格的 sn-p):

<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>

我正在尝试从这些事件中收集数据。除了在&lt;p&gt; 中获得锚点外,一切正常。 &lt;b&gt; 内显然有一个 &lt;a&gt; 标签,我需要点击该链接以获取有关此事件的更多详细信息。

在我的 rake 任务中,我有:

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,所以我想知道我的版本是否不好,或者这是否也会影响其他人。

感谢任何线索。

【问题讨论】:

    标签: ruby-on-rails css nokogiri mechanize screen-scraping


    【解决方案1】:

    没关系。虚惊。在我的 Nokogiri 任务中,我指向包含锚点的页面的本地副本。实时页面需要登录,所以当我浏览它时,我可以看到 a 标签。将登录添加到 rake 任务解决了它。

    【讨论】:

    • 很高兴您找到了解决方案 :) 请单击答案旁边的勾号将问题标记为已解决。
    猜你喜欢
    • 1970-01-01
    • 2016-04-01
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 2018-01-22
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多