我正在尝试使用 Mechanize 抓取网页,其结构如下:
<div id="searchResultsBox">
<div class="listings-wrap">
<div class="listings-header">
<div class="listing-cat">Category</div>
<div class="listing-name">Name</div>
</div>
<ul class="listings">
<li class="listing">
<a href="/ShowRatings.jsp?tid=1143052">
<span class="listing-cat">
<span class="icon"></span>
TEXT
</span>
<span class="listing-name">
<span class="main">TEXT</span>
<span class="sub">TEXT</span>
</span>
</a>
</li>
...
我想导航到
<a>
后面的页面HTML 元素。现在,我有:agent = Mechanize.new
page = agent.get("URL")
page = page.at('#searchResultsBox > div.listings-wrap > ul > li:nth-child(1) > a')
但它一直返回 NIL(由
puts page.class
验证)。我也尝试使用
sleep
尝试确保页面在继续之前有时间加载。有什么我做错了吗?我认为使用 CSS 选择器可以解决问题。
最佳答案
也许网站内容是通过 JavaScript 动态加载的。
检查您的 page
的内容变量并查看那里的内容是否完整。
如果内容不完整,则意味着必须有一些其他请求,返回该数据的服务器。您可以打开 Chrome DevTools(或其他工具)搜索它们。在“网络”选项卡中,您将看到网站发出的所有请求。搜索包含您需要的数据的那个,然后通过 Mechanize 抓取它。
关于ruby - 在 Mechanize 中使用带有 CSS 选择器的 page.at,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39735948/