爬虫

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

2018-08-16  本文已影响4人  c2aa1d94244a

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

image

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

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

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

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

先说一下本文的代码运行环境:
阿里云服务器,
腾讯云服务器,
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 【放弃】

当然点击接受啊。

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

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

先来打打小怪升升级

打怪前先说一下专有名词:
酸酸,就是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

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

就连条件那么苛刻的网站(只能日本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
上一篇下一篇

猜你喜欢

热点阅读