提问人:Vitalii 提问时间:1/19/2020 更新时间:1/20/2020 访问量:277
我无法解析页面并获取链接 Nokogiri
I can't parse the page and get links Nokogiri
问:
我无法通过 Nokogiri 解析获取链接列表,https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/
我做错了什么?
links = Nokoiri::HTML('https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/')
或
links = Nokoiri::XML('https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/')
--->
#(Document:0x3fcdda1b988c {
name = "document",
children = [
#(DTD:0x3fcdda1b5b24 { name = "html" }),
#(Element:0x3fcdda1b46fc {
name = "html",
children = [
#(Element:0x3fcdda1b0804 {
name = "body",
children = [
#(Element:0x3fcdda1ac920 {
name = "p",
children = [ #(Text "https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/")]
})]
})]
})]
})
puts links.to_html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/</p></body></html>
=> nil
答:
这是行不通的,因为整个页面都是用 JavaScript 创建的。文档的正文仅包含一个脚本标记。打开页面源代码或查看原始响应,而不仅仅是在 Web 检查器/开发人员工具中查看呈现的 DOM。
view-source:https://chromedriver.storage.googleapis.com/index.html?path=79.0.3945.36/
Nokogiri 只是一个 HTML 解析器,而不是浏览器,因此不运行 JavaScript。虽然您可以使用像 phantom.js 这样的无头浏览器,但您可能只想寻找一个提供所需数据的 API。网络爬虫通常是任何问题的错误答案。
评论
我找到了一个更有趣的解决方案))例如:link_driver = Nokogiri::HTML(page.source).at('a:contains("mac")').values.join('')
chromedriver_storage_page = 'https://chromedriver.storage.googleapis.com/'
File.new('filename.zip', 'w') << URI.parse(chromedriver_storage+link).read
contains(“mac”) 可以更改 contains(“linux”) 或 contains(“win”),没关系,选择任何版本的操作系统
和 2 解决方案 - 解析页面 chromedriver.chromium.org 并获取有关所有版本的信息。如果网站上的版本比我的版本新,那么我会在新行中替换版本号以供下载
- 使用 Capybara 并仅剪切版本chromedriver_storage = 'https://chromedriver.storage.googleapis.com/'
chromedriver = '79.0.3945.36/'
zip = 'chromedriver_mac64.zip'
link = chromedriver_storage+chromedriver+zip File.new('filename.zip', 'w') << URI.parse(link).read
事实证明,在无头模式下,解析器可以插入到 crontab 任务中以更新当前浏览器的版本
评论
nokogiri
wget
curl