葡京赌场网址Scrapy爬取美女图片第三集 代理ip(上)

第一说一样名誉,让大家久等了。本来打算520那天进行创新的,可是一密切思,也只有自身这么的单独狗还以举行科研,大家或许没念看更新的篇章,所以就是拖到了今。不过忙了521,522当即同样龙半,我管数据库也丰富进去了,修复了部分bug(兹得有人会说果然是单身狗)。(本人之新书《Python爬虫开发和种类实战》发布了,大家在此地可以望样章

 测试的当儿找个协调包装的法门要UI控件便足以了
这里用自我刚好封装的Redirect重定向的请求体为条例


1, 在github上缔造一个Redirect,重要:记得选择起来源协议
(MIT)(如果木有GitHub那先百度一下)

吓了,废话不多说,咱们上今天的主题。上简单首
Scrapy爬取美女图片和Scrapy爬取美女图片续集
的文章,咱们讲解了scrapy的用法。可是就以近日产生热心的冤家对自我说前的先后无法爬取到图片,我猜应该是煎蛋网加入了反倒爬虫机制。所以今天教授的饶是突破反爬虫机制的上篇
代理ip。

葡京赌场网址 1


2, 使用 Github Desktop Clone (克隆) Redirect 到电脑桌面 

现行众的网站针对反爬虫的一个做法(当然还产生其它检测)是:检测一个ip的重复性操作,从而判断是爬虫还是人工。所以采取代理ip哪怕得突破之封锁。作为一个学生党,没钱特意去置办vpn和ip池,所以我们用的代办ip来自于网络直达免费之,基本上够个人使用了。接下来我们讲的是爬取免费ip,并且征代理ip的可用性

横流: 修改Redirect文件里的物记当时更新,如何运用Github Desktop请百度


3, cd到当前目录

网上有广大摄ip的网站,这次自己选择的凡www.xicidaili.com,大家模仿了得试行其他的网站,咱们努力做个十分之代理ip池

$ cd Redirect

世家是不是注意到高匿些微只字,高匿的意思是:对方服务器无亮堂你下了代办,更非掌握乃的忠实IP,因此隐蔽性大高。

4, 创建一个podspec文件,命令:

当真

$ pod spec create Redirect

5, 编辑
podspec文件,这里是故vim打开的,命令:(当然使用文本编辑器打开也可)

以我们之前的读书爬虫的做法,用firebug审查元素,查看如何解析html

$ vim Redirect.podspec

实际就算是一个table,解析其中的各级一样推行,这个很简单,咱们使用BeautifulSoup杀爱就解析出了。

6,
创建之后会自动生成一个模板,里面会时有发生详尽的笺注,我们惟有待遵循需改是文件即可,


下面这个是测试的时候自己修的 (如果要再还多之部署
可以参照别的开源项目的podspec文件):

以大家还应注意到,它每一样页上之ip表的页数和url中之参数是相应之。例如第一页就是www.xicidaili.com/nn/1。这样虽省去了我们翻页的劳动。

(注: 以#初步的是足以删掉滴)

以下是先后的组织:

Pod::Spec.new do |s|



  s.name         = "Redirect"
  s.version      = "0.0.1"
  s.summary      = "Redirecting Requests."
  s.description  = <<-DESC 
                          This is a Redirecting Requests.
                   DESC
  s.homepage     = "http://www.cnblogs.com/ljcgood66/"
  s.license      = "MIT"
  s.author       = { "LiJunCheng" => "1139981137@qq.com" }
  s.platform     = :ios
  s.source       = { :git => "https://github.com/ganlinmeng/Redirect.git", :tag =>"0.0.1" }
  s.source_files  = "Redirect", "Redirect/**/*.{h,m}"
  s.exclude_files = "Classes/Exclude"
  s.framework  = "UIKit"
  # s.frameworks = "SomeFramework", "AnotherFramework"
  # s.library   = "iconv"
  # s.libraries = "iconv", "xml2"


  # ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  If your library depends on compiler flags you can set them in the xcconfig hash
  #  where they will only apply to your library. If you depend on other Podspecs
  #  you can include multiple dependencies to ensure it works.

  # s.requires_arc = true

  # s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
  # s.dependency "JSONKit", "~> 1.4"

end

db包中db_helper:实现之是mongodb的增删改查。
    detect包中 detect_proxy:验证代理ip的可用性
    entity包中 proxy_info:对代理信息进行了针对象化
    spider包:
    1.spiderman 实现爬虫的逻辑
    2.html_downloader 实现爬虫的html下载器
    3.html_parser 实现爬虫的html解析器

s.name:名称,pod search
搜索的显要词,注意此一定要跟.podspec的称号相同,否则报错
s.version:版本号
s.ios.deployment_target:支持之pod最低版本
s.summary: 简介
s.homepage:项目主页地址
s.license:许可证
s.author:作者
s.social_media_url:社交网址
s.source:项目之地点
s.source_files:需要包含的源文件
s.resources: 资源文件
s.requires_arc: 是否支持ARC
s.dependency:依赖库,不克凭未宣布的仓库
s.dependency:依赖库,如产生多独好这么写

test包: 对样例的测试,不干程序运行

(注: 也起这般描写: s.license= { :type => "MIT", :file => "LICENSE" }

main.py:实现命令执行参数定义

7, 创建tag,并推送至github,依次执行以下命令:

还要说一下检测:我是用
ip.chinaz.com/getip.aspx用作检测网址,如果用代理访问不超时,而且响应码为200,咱们就是当是水到渠成之代理

$ git add .
$ git commit -m "0.0.1"
$ git tag 0.0.1
$ git push --tags
$ git push origin master

(注: 当执行完 git push –tags  后极会于您输入GitHub的账号以及密码)

连通下运行程序看看效果:
  于windows下切换至工程目录,运行python main.py
-h
,会相自身定义之采用说明与参数设置。

Username for 'https://github.com':
Password for 'https://ganlinmeng@github.com': 

紧接着运行python main.py -c 1 4 (意思是爬取1-4页的ip地址):

8, 验证podspec文件

这时要想证明ip的科学:运行python main.py -t db

$ pod spec lint Redirect.podspec

如上所述好用的ip还是于少,不过对于私有算是够用了

倘终端提示 (but you can use `–allow-warnings` to ignore them).

看一下mongodb数据库

你可以

当我们下次爬取图片的当儿就可动用这些ip了

$ pod spec lint Redirect.podspec --allow-warnings

下面把解析及证明的代码贴一下:

  • 如若证实不经,会来详细的ERROR和WARING提示,根据提示依次解决,然后回第7步重新来平等全副。
    注意:在重开前,我们如果抹远程库的tag和当地的tag,命令如下:

    $ git tag -d 1.2 //删除本地tag
    $ git push origin :refs/tags/1.2 // 删除远程库tag

def parser(self,html_cont):
    '''
    :param html_cont:
    :return:
    '''
    if html_cont is None:
        return

    # 使用BeautifulSoup模块对html进行解析
    soup = BeautifulSoup(html_cont,'html.parser',from_encoding='utf-8')
    tr_nodes = soup.find_all('tr',class_ = True)

    for tr_node in tr_nodes:
        proxy = proxy_infor()
        i = 0
        for th in tr_node.children:
            if th.string != None and len(th.string.strip()) > 0:
                proxy.proxy[proxy.proxyName[i]] = th.string.strip()
                print  'proxy',th.string.strip()
                i += 1
                if(i>1):
                    break
        self.db_helper.insert({proxy.proxyName[0]:proxy.proxy[proxy.proxyName[0]],proxy.proxyName[1]:proxy.proxy[proxy.proxyName[1]]},proxy.proxy)

万一证实通过见面这样显示

证部分主导代码:

葡京赌场网址 2

def detect(self):
    '''
    http://ip.chinaz.com/getip.aspx  作为检测目标
    :return:
    '''
    proxys = self.db_helper.proxys.find()
    badNum = 0
    goodNum = 0
    for proxy in proxys:
        ip = proxy['ip']
        port = proxy['port']
        try:
            proxy_host ="http://"+ip+':'+port #
            response = urllib.urlopen(self.url,proxies={"http":proxy_host})
            if response.getcode()!=200:
                self.db_helper.delete({'ip':ip,'port':port})
                badNum += 1
                print proxy_host,'bad proxy'
            else:
                goodNum += 1
                print proxy_host,'success proxy'

        except Exception,e:
            print proxy_host,'bad proxy'
            self.db_helper.delete({'ip':ip,'port':port})
            badNum += 1
            continue

    print 'success proxy num : ',goodNum
    print 'bad proxy num : ',badNum

9, 如果是第一不良提交,需要事先实施这命令:

今底享受就到此处,如果大家看还可呀,记得打赏呀。代码上传到github上:https://github.com/qiyeboy/proxySpider\_normal

$ pod trunk register 这里写邮箱 '这里起个名字' --description=' 这里写描述'

履行得后,会为您的邮箱里发一样查封邮件,去邮箱点击链接!

接下来交给至CocoaPods

(注意:由于自身说明podspec文件时采取了–allow-warnings
所以这里后呢添加–allow-warnings)

pod trunk push Redirect.podspec --allow-warnings

10, 提交成功后,就可以经过cocopods查找Redirect了

葡京赌场网址 3

(注意:)刚交付后项目用pod
search命令会搜不顶,因为当地的目没有创新,使用下发号施令去索引文件

rm ~/Library/Caches/CocoaPods/search_index.json

末尾pod search 命令搜到自己之类别,大功告成

 如果还是挺就再也实践

rm ~/Library/Caches/CocoaPods/search_index.json

pod setup

再进行pod search,

-完美

葡京赌场网址 4

然就是可进行应用了.

最终谢谢各位大佬

参考:

https://www.jianshu.com/p/0e1d796b2a42

https://www.jianshu.com/p/a1339d45a324

http://www.cocoachina.com/ios/20160301/15459.html

https://www.cnblogs.com/richard-youth/p/4704413.html

https://www.jianshu.com/p/283584683b0b

https://www.cnblogs.com/xzjxylophone/p/4956469.html

 https://www.jianshu.com/p/b5e5cd053464