美文网首页爬虫
【Python实战】通过“酸酸”的骚操作,让Scrapy爬虫变得

【Python实战】通过“酸酸”的骚操作,让Scrapy爬虫变得

作者: c2aa1d94244a | 来源:发表于2018-08-16 10:30 被阅读4次

    这么多文章下来,我思考了一下,为什么要写爬虫?答案就是:

    image

    不是我铲屎官吹,今天这篇文章里面所要讲的东西,在网上资源非常少,包括谷歌,但是对于那些想要突破的同学来说,资源的稀少促使很多人都产生了放弃的念头。但是!铲屎官没有!!铲屎官先为大家趟坑了。

    先给你们大概简述一下这篇文章里面到底讲了什么:

    • 配置酸酸(SS)服务器
    • 配置酸酸(SS)本地客户端
    • 配置本地的IP代理
    • 为Scrapy添加IP代理
    • 让爬虫爬取那些一般爬不到的网站资源

    通俗的将,就是给你的爬虫添加你自己建立的代理,然后去爬取那些指定区域才能访问的网站的内容(指定区域有多重理解)。

    本篇文章里面有些涉及到的知识点和操作步骤比较多,有些地方在之前的文章里面铲屎官很详细的写过怎么做,这里我就把文章链接贴出来,同时简单的说一下步骤就过去了。需要复习的同学,可以点进去看文章里面的详细教学就好。

    先说一下本文的代码运行环境:
    阿里云服务器,
    腾讯云服务器,
    CentOs 7.4操作系统,
    Python 3.x,
    以及一些python库。

    那么好,接下来我们就要找NPC接任务了。

    image

    为了突出文章功能的强大,我们挑选一个条件苛刻的网站来实验。这里有一个非常著名的网站:

    http://www.dmm.co.jp/

    此网站只能通过日本的IP访问,其他区域访问网站,会自动跳转到error/area页面,骚年,如果你不信,可以试试,看看会不会变成下面这个画面:

    那么接下来,骚年,你索要做的就是:将

    http://www.dmm.co.jp/digital/videoa/-/ranking/=/type=actress/

    image

    页面里面的“月排名前20位女老师”信息爬取出来。

    【接受】 or 【放弃】

    当然点击接受啊。

    接下来就是研究怎样做才能完成这个任务。这里,我们来简单分析一下:

    • 要成功爬取女老师们的信息,我们需要成功登录网站,拿到正确的数据,而不是area error页面。
    • 这个网站必须是日本IP才能访问,所以,我们得搞到日本的IP。
    • 一旦有了日本IP的服务器之后,我们可以选择把爬虫部署到日本的服务器来干活。
    • 但是如果把爬虫部署到境外服务器,那哪一天比如我改变了,我不要日本的东西,我要美国的,那我还得部署到美国,这样很麻烦。
    • 所以我们还是选择在境内部署爬虫,尝试通过日本的服务器来访问网站,让日本服务器做IP代理即可。
    • 最后就是写简单的Scrapy爬虫了。

    大致步骤就是这样。捋一捋,只要捋出详细步骤,分析每一步的可行性,将所有小的可行性,组合起来,就成了一个大的可行的项目。接下来就是一步一步的去实现代码了。

    先来打打小怪升升级

    打怪前先说一下专有名词:
    酸酸,就是SS,我之前说的暗影袜子,很有名的socks5软件,如果没记错,15年的时候,作者被请去喝茶了,所以,全文用酸酸来代替SS。你可以猜一下酸酸乳是啥意思?就到这里,走,打怪去。

    我们首先要干掉第一项:拥有日本IP的服务器,搭建酸酸代理。

    这个不难,铲屎官在这里推荐使用阿里云服务器就可以。相比于腾讯云,阿里云在日本东京的节点算下来要比腾讯云的便宜好多。铲屎官在这里给大家争取到一些价值千元的新人福利优惠券,算下来,一年300元的服务器,大约不到200就能拿下,优惠力度很大了已经,点击下面的链接就可以领取:

    阿里云(总价值千元代金券):
    https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=nrkmbo9q
    腾讯云(总价值高达2775元代金券):
    https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=b351b2fc50b15866ff9d19b58a5df0f5

    接下来,就是具体的怎样买服务器的过程了。在这篇文章

    『手把手用阿里云服务器搭建袜子工具,从此不再求人』

    铲屎官详细的,把每一步都截了图,大家可以在这个文章里面看。

    简单总结一下

    • 领劵,然后购买服务器
    • 服务器节点选择日本东京
    • 选择性能最低的服务器即可,1cpu就行
    • 带宽选择按流量收费,速度快而且不贵,带宽按流量选择100Mb速度。
    • 付款,完成就可以登录了
    • 之后只要挨个输入以下命令就可以
      $ pip install --upgrade pip
      $ pip install shadowsocks
      $ mkdir /etc/shadowsocks
      $ vim /etc/shadowsocks/config.json
    • 然后修改并黏贴下面的文字到config.json文件中。
    • 这里要说一下端口号的问题,需要在控制台的安全组里,自己手动打开
      {
      "server":"", ##填写服务内网地址,地址值在控制台里面公有IP下面一行。这里我是举个例子,
      "server_port":8388, ##这里关联的就是之前在阿里云安全组里面填写配置的那个接口,你也可以自己定接口,然后两边填写相同就好。
      "password":"pwd", ##自己定义
      "timeout":500, ##默认的就好
      "method":"aes-256-cfb" ##默认的就好
      }
    • 最后,在日本服务器这里,输入一下命令开启酸酸代理
      $ ssserver -c /etc/shadowsocks/config.json -d start 后台启动
      成功之后长这个样子:
    image

    这样,我们就有了日本代理,欧耶。接下里的任务,我们需要在国内的服务器上面,搭建酸酸客户端,让大陆的酸酸客户端能够连接到日本的酸酸服务器。

    来啊,抽小BOSS啊

    小BOSS - P1阶段

    国内的服务器就随意了,阿里云的和腾讯云的都OK,甚至也可以用自己的电脑来做一下实验,也是完全没有问题的。关于国内服务器,优惠券在上一个部分里面提到了。购买流程铲屎官这里就不重复了,请诸位自行脑补。这里先暂停一下,当你成功购买了服务器,并且登陆之后,咱们接着搞起。

    成功登录了你的国内服务器之后,我们第一件要做的就是安装编译环境,这个很简单,一条一条输入以下命令就好:

      // 安装依赖包
    $ yum -y groupinstall "Development tools"
    $ yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
    
      // 下载 Python 3.6.2
    $ wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
    
      // 创建安装目录
    $ mkdir /usr/local/python3
    
      // 安装 gcc
    $ yum -y install gcc
    
      // 安装 Python 3.6.2
    $ tar -xvJf  Python-3.6.2.tar.xz
    $ cd Python-3.6.2
    $ ./configure --prefix=/usr/local/python3
    $ make && make install
    
     // 安装酸酸
     $ pip install --upgrade pip
     $ pip install shadowsocks
     $ mkdir /etc/shadowsocks
     $ vim /etc/shadowsocks/config.json
    

    接着我们配置酸酸客户端的config.json文件,只需要将以下内容黏贴进去就好:

    {
        "server":"日本IP ",  # 日本酸酸服务器的公网IP地址
        "server_port":8388,  # 日本酸酸服务器的端口号
        "local_address": "127.0.0.1", 
        "local_port":1080,  # 本地代理端口号,填写默认的就好
        "password":"pwd",  # 日本酸酸服务器的酸酸密码
        "timeout":500,
        "method":"aes-256-cfb", 
        "fast_open": false, 
        "workers": 1  
    }
    

    然后,本地只需要通过以下命令启动就好:

    $ sslocal -c /etc/shadowsocks/config.json -d start
    

    这里需要特别注意一下,ssserver是启动酸酸服务器的,sslocal是启动酸酸客户端的

    如果在输入ssserver或者sslocal命令的时候,报错,提示:command not found,这时候的解决办法是,找到ssserversslocal所在的位置,一般都在/usr/local/python3/bin/里面,只需要将上面的命令对应的改为:

    $ /usr/local/python3/bin/sslocal -c /etc/shadowsocks/config.json -d start
    

    或者,你也可以通过ln命令创建软连接,这个我就不在这里说了。

    OK,操作到这一步,如果出现以下画面:

    image

    说明你的酸酸客户端已经成功了。但是此时,你的国内服务器是没有办法通过普通http来访问境外网站的。验证方法就是,你在终端后输入命令:

    $ curl www.google.com
    

    来看结果。

    我们用Scrapy来写爬虫,主要是通过Http来访问网站服务器,获取请求结果,我们再从请求结果里面扣出来我们想要的数据。而酸酸目前只是一个socks5代理,并不是http代理,所以,在这里,我们需要在我们的境内服务器上面,搭建一下ip代理,让我们境内服务器能够通过ip代理,转换成socks5数据,再从日本的酸酸服务器发出请求。

    小BOSS P2阶段

    我们这里用privoxy来将socks5转换成http。只需要在境内的服务器按照一下命令挨个输入就好:

    $ yum install privoxy
    $ vim /etc/privoxy/config
    

    在这里,我们只需要关注最后两行22732274两行:

    listen-address 127.0.0.1:8118 # 8118 是默认端口,不用改
    forward-socks5t / 127.0.0.1:1080 . #转发到本地端口,注意最后有个点
    

    这两行的数据对应的是这个文件中的7831336行。只要保证最后两行是有上面两行配置数据的,这就可以。

    然后,我们需要配置 /etc/profile 里面添加参数。

    $ vim /etc/profile  
    

    在最后,把下面的几行参数填写进去:

    export https_proxy=http://127.0.0.1:8118
    export http_proxy=http://127.0.0.1:8118
    export ftp_proxy=http://127.0.0.1:8118
    

    然后,很关键,别忘了,必须要执行:

    $ source /etc/profile
    

    让全局参数生效!

    然后,我们需要开启privoxy。输入下面命令:

    $ service privoxy start
    

    成功启动,没有报错,这个时候,你再试试curl www.google.com看看效果,会不会是下面这一串乱码:

    image

    如果是,就说明你的配置成功了!这表明,现在你境内的这台服务器是可以访问那些网站的!这个时候,你也可以测试一下之前任务领取的网站,看看返回结果是什么:

    $ curl http://www.dmm.co.jp/digital/videoa/-/ranking/=/type=actress/
    

    看到没?是不是把html的东西都出来了。而且!最重要的是而且!不是area error 页面的内容!

    image

    看到这些html,是不是很亲切?这不接下来就是用Scrapy就可以搞定的事儿吗?可以说,到此,我们最难的一步已经搞定了,就是配置境内服务器的IP代理。如果你一步一步按照我的步骤操作的话,是完全没有问题的。如果有什么问题,想得到解决办法,请关注公众号『皮克啪的铲屎官』,然后点击最下方的『进群交流』或者回复『进群』,按照指示加入到皮克啪的技术交流群里,里面有诸多大佬,都可以为你一一解答疑难问题。

    那么接下来,我们就要写Scrapy爬虫,并且要为爬虫添加IP代理的骚操作了。

    BOSS前刷刷等级

    关于爬虫的写法,市面上有很多文章可以看,但是最具有参考价值的,还是铲屎官写的那几篇文章,真正的手把手,细节到位,代码风骚。主要参考文章有以下几篇:

    『【Python实战】用Scrapy编写“1024网站种子吞噬爬虫”』----此文主要让你粗略的了解一下scrapy的常规操作。

    『【Python实战】手把手超详细教程教你Scrapy爬达盖尔社区,50张配图,史诗般的详细』----这篇文章厉害了,50张配图,超级详细的把每一个步骤都写了出来,真正的手把手,让你全方位的编程体验Scrapy带来的爽快感觉。

    『【Python实战】带你玩转Scrapy的高阶骚操作,带邮件功能的“1024种子吞噬器2.0”,更高更快更强!』----进阶骚操作,如果用于下载功能,请重点学习这篇文章中的内容,更高更快更强!没有之一!

    这里,由于之前铲屎官给大家带来过很详细很详细的Scrapy文章,所以,我这里就简单的把我的spider部分的代码给大家贴一下,这个spider的功能就是把女老师都爬出来:

    '''
    JavSpider.py
    '''
    class JavspiderSpider(scrapy.Spider):
        name = 'JavSpider'
        allowed_domains = ['javpop.com']
        start_url = "http://www.dmm.co.jp/digital/videoa/-/ranking/=/type=actress/"
    
        def start_requests(self):
            yield Request(url=self.start_url, callback=self.parse_page)
    
        def parse_page(self, response):
            content = response.body
            soup = BeautifulSoup(content, "html.parser")
            tb_list = soup.find_all('td', attrs={"class": "bd-b"})
            if len(tb_list) > 0:
                for item in tb_list:
                    javItem = JavbaseItem()
                    javItem['rank'] = item.find('span').text
                    javItem['image'] = item.find('img')['src']
                    javItem['name'] = item.find('p').find('a').text
                    javItem['latest_art'] = item.find('div').find_all('a')[1].text
                    yield javItem
    
    '''
    items.py
    '''
    class JavbaseItem(scrapy.Item):
        # define the fields for your item here like:
        name = scrapy.Field()
        image = scrapy.Field()
        rank = scrapy.Field()
        latest_art = scrapy.Field()
        
    '''
    middlewares.py
    '''
    class JavbaseDownloaderMiddleware(object):
        def process_request(self, request, spider):
            proxy = "http://127.0.0.1:8118"
            request.meta['proxy'] = proxy
            return None
            
    '''
    settings.py [ 部分 ]
    '''
    DOWNLOADER_MIDDLEWARES = {
       'JavBase.middlewares.JavbaseDownloaderMiddleware': 543,
    }
    
    

    骚年,别忘了,咱们这里的主角应该是给spider添加IP代理。怎么添加呢?炒鸡简单,关注一下上面代码里面后两个文件middleware.pysettings.py

    Scray的IP代理,需要在DownloadMiddleware里面的process_request()方法里面添加。这里,由于我们之前已经配置好境内服务器的本地IP代理,所以,proxy直接就是"http://127.0.0.1:8118"这里的8118就是之前我们配置privoxy里面监听本地端口号。注意不要填错哦~然后,想要middleware生效,需要在settings.py文件里面,把DOWNLOADER_MIDDLEWARES打开就好。

    OK,接下来,我们需要,把爬虫部署到我们的境内云服务器喽,也就是最后一步啦。

    直面大BOSS

    部署Scrapy爬虫到云服务器上,我们需要使用Scrapyd和Scrapyd-client这两个东西。铲屎官很牛逼,这个文章我也写过。

    『【Python实战】用Scrapyd把Scrapy爬虫一步一步部署到腾讯云上』

    超级详细的步骤已经在文章里面写了,我们这里就简单的总结一下需要用到的命令:
    // 安装scrapyd
    $ pip3 install scrapyd
    // 安装scrapy
    $ pip3 install scrapy
    // 安装scrapyd-client
    $ pip3 install scrapyd-client
    // 安装BeautifulSoup4,因为爬虫中用到了,所以这里得安装一下
    $ pip3 install bs4
    接下来需要配置/usr/local/python3/lib/python3.6/site-packages/scrapyd/default_scrapyd.conf文件,将里面的bind_address改为0.0.0.0,记住http_port,一会儿要用。
    再从控制台的安全组里面,把scrayd的对应端口号打开全新啊。
    接着回去输入
    '/usr/local/python3/bin/scrapyd'
    启动Scrapyd。
    如果要检查是否启动,需要在浏览器里面输入:服务器IP地址:scrapy端口号来看是否启动成功。
    接着是部署步骤。
    $ scrapyd-deploy -l
    修改 Scrapy 目录下 scrapy.cfg 文件里的配置。
    scrapyd-deploy <host> -p <project>

    启动爬虫工作,需要直接本地机器输入:

     $ curl http://119.75.216.20:6800/schedule.json -d project=<project name> -d spider=<spider name>
    

    就可以了,想检查爬虫是否工作,就在浏览器里面输入服务器IP地址:scrapy端口号查看JOB里面就可以。

    如果运行成功,此时你应该会在LOG里面看到Scrapy生成的item打印信息。

    MISSION COMPLETE

    至此,我们的怪就打完了,任务就完成了。你可以看到,从这篇文章里面:

    • 你学会了怎样部署酸酸,
    • 怎样使用酸酸客户端,
    • 怎样使用Privoxy来做本地代理,
    • 怎样使用Scrapy来写爬虫,
    • 怎样给爬虫加IP代理,
    • 怎样将爬虫部署到服务器上

    就连条件那么苛刻的网站(只能日本IP访问)你都能爬取出数据,面对那些404的网站,岂不是更轻松?这么一套军体拳打下来,你的小虫子已经变成了一只超级无敌大虫子了,它可以无国界无限制的爬取几乎任何网站了。这样的爬虫写起来,总比那些天天爬国模写真要强。

    ATTENTION

    注意,文中讲述的本地搭桥的方法,实际是本地的IP代理,这里可以骚操作的玩法有很多,比如,你在这个服务器上面搭了一个程序,他可以从404网站抓东西,或者可以去404的网站上面请求数据。这样子,贼骚。可以玩出很多花样,下一个准备写个App。

    好了,看到这里,铲屎官也知道你很辛苦。废话不多说,关注公众号『皮克啪的铲屎官』,回复『Daily』,就可以查看铲屎官的「1024Daily」项目哦~

    最后,没有领劵的童鞋,抓紧了哦,点击链接就可以领取:

    阿里云(总价值千元代金券):
    https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=nrkmbo9q
    腾讯云(总价值高达2775元代金券):
    https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=b351b2fc50b15866ff9d19b58a5df0f5

    方便快捷,铲屎官目前已经研究透了一些Kindle公众号推书的逻辑,并且自己已经实现了其中关键几步的代码,看着那些公众号都可恶的每天只能推送5本书,或者收费办卡才能推送,铲屎官觉得,这绝对就是坐地起价。既然手里有技术,为何不自己弄一个方便大家,对不对?但是铲屎官一般不出手,出手就要出的骚气逼人,这个东西,我再研究研究,其实作用还挺算比较大,不过市场很小,毕竟,有Kindle的人不多,常用Kindle的人更少。现在都有手机了,谁还用kindle。那么接下来,铲屎官既然已经打通了IP代理这条脉络,接着就能干出一番骚操作了。哈哈哈哈哈,骚气的App指日可待。敬请期待。。。。

    这么硬核的公众号,还不关注一波啊?

    image

    相关文章

      网友评论

        本文标题:【Python实战】通过“酸酸”的骚操作,让Scrapy爬虫变得

        本文链接:https://www.haomeiwen.com/subject/fvsnbftx.html