Scrapy爬虫(三)——简易动态网页爬虫

本文介绍了如何使用Scrapy配合Phantomjs处理动态网页,包括Phantomjs的安装和动态爬虫的构建过程。通过学习,读者可以掌握处理滚动加载网页的技巧,为Scrapy爬虫添加无头浏览器支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

Scrapy爬虫(一)——你的第一个Scrapy爬虫
Scrapy爬虫(二)——自定义Item和代理访问的爬虫
如果理解清楚以上这两篇博客,运用scrapy框架爬取一般的网页基本不是什么难题了。可是有些时候我们会遇到动态网页,向下滚动加载的网页便是一种很常见的动态网页,要解决这种网页,我们需要采用phantomjs+scrapy的方法。

Phantomjs的安装

简单地说Phantomjs就是一个没有GUI的浏览器,但通过javascript,它可以实现所有我们在网页上的操作。对比起selenium每次都需要调用浏览器,Phantomjs显然更适合嵌入到scrapy框架当中
在Ubuntu下安装phantomjs不能使用!!apt-get install phantomjs!!!
使用这个方法安装的phantomjs并不完整,在使用的时候会导致许多错误。正确的安装方式应该是

sudo npm install phantomjs -g

同时还需要安装selenium

sudo pip install selenium

准备工作完成

构建动态爬虫

spider函数很简单,这里主要只是为了打印出网页内容而已(破易躺枪)

class mySpider(scrapy.Spider):
    name = 'myspider'
    start_urls = ['http://blog.youkuaiyun.com/qq_30242609/article/details/70859891']

    def parse(self, response):
        print response.body

新建一个JSMiddware

#-*- coding: UTF-8 -*-
from selenium import webdriver
from scrapy.http import HtmlResponse
import time

js='''
    document.body.scrollTop +=1000;
    '''
    //让网页下滚的脚本

class PhantomJSMiddleware(object):
    @classmethod
    def process_request(cls, request, spider):
        driver = webdriver.PhantomJS()
        driver.get(request.url)
        while ((driver.find_element_by_xpath("//div[@class='post_addmore']").get_attribute(
                'style')) == "visibility: visible;"):
            driver.execute_script(js)//当网页未下滑到最底部的时候,继续执行代码
            time.sleep(1)
        data = driver.page_source.encode('utf-8')
        driver.quit()
        return HtmlResponse(request.url, encoding='utf-8', body=data, request=request)//返回Response给parse()方法

最后只需要修改settings.py就可以了

DOWNLOADER_MIDDLEWARES = {
    'Phantomjs.JSMiddleware.PhantomJSMiddleware': 100
}

总结

掌握了Phantomjs+scrapy,同时学好javascript,基本上就没有爬不了的网页了,在这里我也仅仅是做个入门的简介。Scrapy爬虫我不打算深究下去,目前看来没有什么网页是爬取不了的,故Scrapy爬虫这一系列就暂告一段落 了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值