为什么我的scrapy下载器中间件不能正确呈现javascript?

时间:2012-12-31 02:23:28

标签: 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 and jswebkit吗?

2 个答案:

答案 0 :(得分:2)

我不是专家,但我最近爱上了Scrapy和Selenium。我曾经用perl和python主要用urllib2 / beautifulsoup / regex / mechanize来刮硬核,但遇到了我觉得不可能的网站要处理的地方,网站广泛使用ajax,没有数据从源头提取。那些甚至无法用屏蔽请求参数打破的网站,所以有一段时间我放弃了我的希望和梦想。

它花了我一点点,但现在我正在使用Selenium和Webkit,这太棒了。我觉得自己像个黑客。

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

我肯定会建议你研究一下硒。现在一切都使用Ajax。

答案 1 :(得分:0)

最后我弄清楚了问题。有些网址没有正确形成。