javascript - 为什么我的 scrapy 下载器中间件无法正确渲染 javascript?

标签 javascript webkit web-scraping web-crawler scrapy

我正在使用this scrapy code snippet呈现我想要从中抓取数据的网站的 javascript 代码。该网站是一个视频搜索引擎,搜索结果由 javascript 呈现。我想点击下一页链接并废弃整个搜索到的项目。以下是我的蜘蛛代码:

class VideoSpider(BaseSpider):
    name = "VideoSpider"
    allowed_domains = ["domain.com"]
    start_urls = ['video search results link']

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        video_items = hxs.select("//ul[@id='results-list']/li[@class='result']")
        #items = []
        for vi in video_items:
            item = VideoItem()
            link = vi.select("a[@class='result-link']/@href").extract()[0]
            title = vi.select("a[@class='result-link']/@title").extract()[0]
            #print title,link
            item['title'] = title
            item['url'] = link
            yield item

        next_page = hxs.select("//div[@id='page']/a")
        for np in next_page:
            next_url = np.select("@href").extract()
            if next_url:
                url = urlparse.urljoin(response.url, next_url[0])
                #url = response.url, str(next_page)
                self.log("find next page url: %s"%url, log.INFO)
                yield Request(url, callback=self.parse)

我发现 start_urls 中的链接已正确下载并正确呈现,如下所示:

<ul id="results-list" class="clearfix" static="bl=normal">
    <li class="result" href="" </li>
     <li class="result" href="" </li>
     <li class="result" href="" </li>
    ....

因此,在第一页上提取成功,而当获取下一页链接时,JavaScript 不会像这样呈现:

<ul id="results-list" class="clearfix" static="bl=normal"></ul>
    <div id="loading">trying to load page for you, please be patient</div>

因此,抓取停止了,因为由于 results-list 未呈现,因此无法提取链接。为什么第一个页面可以正确呈现,但第二个页面却不能?我应该使用 selenium 而不是 webkit 和 jswebkit 吗?

最佳答案

我不是专家,但我最近爱上了 Scrapy 和 Selenium。我曾经主要使用 urllib2/beautifulsoup/regex/mechanize 使用 perl 和 python 来抓取硬核内容,但遇到了一些我觉得不可能处理的网站,这些网站广泛使用 ajax,没有从源中提取数据。甚至无法通过屏蔽帖子请求参数来破坏网站,因此有一段时间我放弃了抓取希望和梦想。

这花了我一点时间,但现在我将 Selenium 与 Webkit 一起使用,这真是太棒了。我感觉自己像个职业黑客。

事实上,我非常有信心大多数网站都无法阻止我。它完美地模拟用户使用浏览器,我只是使用 sleep 来确保允许页面 ajax 正确加载。对于像亚马逊这样困难的网站,不要贪婪,让你的点击随机分布。我已经运行了好几天的 Selenium ,没有任何问题。

我绝对会建议您研究一下 Selenium 。现在一切都使用 Ajax。

关于javascript - 为什么我的 scrapy 下载器中间件无法正确渲染 javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14096768/

相关文章:

javascript - 选项卡 "shown"事件未触发 - Twitter Bootstrap

javascript - 无法启动本地主机。 npm Err Darwin 16.7.0

python - 增加QtWebKit每台主机的最大连接数

webkit - Javascript + CSS : Converting from absolute positioned elements to CSS Transforms (left, 顶部、宽度、高度(translateX、translateY、缩放)

python - 如何在 ATOM XML 文档中搜索大小写混合的标记名称?

node.js - NodeJS 抓取 .ashx 页面

javascript - 为什么我的球(物体)没有缩小/消失?

javascript - 选择带有空格的选项时出现 JQuery 异常

javascript - Restangular 请求未显示在(Chrome)网络选项卡中

Facebook Graph 2.2 - 忽略批量请求中的错误