【问题标题】:How to scrape a web page with dynamic content added by JavaScript?如何使用 JavaScript 添加的动态内容抓取网页?
【发布时间】:2013-09-11 07:45:34
【问题描述】:

我正在尝试抓取this webpage,它在我们滚动加载时具有延迟加载。使用 Nokogiri 我可以抓取初始页面,但不能抓取滚动后加载的页面的其余部分。

【问题讨论】:

  • 你也可以借助 selenium-webdriver。您可以通过它向下滚动并使用 selenium-webdriver 获取信息。或使用 selenium 滚动,并使用 nokogiri 报废。

标签: ruby screen-scraping nokogiri


【解决方案1】:

要获得延迟加载页面,请废弃以下页面:

http://www.flipkart.com/mens-footwear/shoes/casual-shoes/pr?p%5B%5D=sort%3Dpopularity&sid=osp%2Ccil%2Cnit%2Ce1f&start=31&ajax=true
http://www.flipkart.com/mens-footwear/shoes/casual-shoes/pr?p%5B%5D=sort%3Dpopularity&sid=osp%2Ccil%2Cnit%2Ce1f&start=46&ajax=true
http://www.flipkart.com/mens-footwear/shoes/casual-shoes/pr?p%5B%5D=sort%3Dpopularity&sid=osp%2Ccil%2Cnit%2Ce1f&start=61&ajax=true
...

require 'rubygems'
require 'nokogiri'
require 'mechanize'
require 'open-uri'

number = 1
while true
  url = "http://www.flipkart.com/mens-footwear/shoes" +
        "/casual-shoes/pr?p%5B%5D=sort%3Dpopularity&" +
        "sid=osp%2Ccil%2Cnit%2Ce1f&start=#{number}&ajax=true"

  doc = Nokogiri::HTML(open(url))
  doc = Nokogiri::HTML(doc.at_css('#ajax').text)

  products = doc.css(".browse-product")
  break if products.size == 0

  products.each do |item|
    title = item.at_css(".fk-display-block,.title").text.strip
    price = (item.at_css(".pu-final").text || '').strip
    link = item.at_xpath(".//a[@class='fk-display-block']/@href")
    image = item.at_xpath(".//div/a/img/@src")

    puts number
    puts "#{title} - #{price}"
    puts "http://www.flipkart.com#{link}"
    puts image
    puts "========================"

    number += 1
  end
end

【讨论】:

  • 当我报废特定的 URL 时,它并没有报废任何人
  • @shamshul2007,我的答案中的网址可能与原始网址的格式不同。所以你应该调查那些页面。
  • ,能够获取 url flipkart.com/mens-footwear/shoes/casual-shoes/…,但不是其余部分,我尝试在 test.rb 文件中完成它而不是 ROR 应用程序,这是问题所在
  • @shamshul2007,正如我在之前的评论中所说,格式可能不同。您可以发布您尝试过的代码吗?请详细说明您希望从这些页面中获得什么。
  • 我正在尝试以下列格式废弃 [link]flipkart.com/mens-footwear/shoes/casual-shoes/… 产品名称: 产品价格: 产品 URL: 产品图片 URL: 在一个页面中有 15 个产品和产品的其余部分采用 ajax 格式,这意味着当我们向下滚动产品时,产品会被加载,因此我无法以所需格式废弃所有产品,代码位于 [link]pastebin.com/RTgFdyay
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-13
  • 2021-10-04
  • 2013-07-10
  • 2023-01-29
  • 2014-05-08
  • 2020-05-24
  • 1970-01-01
相关资源
最近更新 更多