澳门美高梅手机网站Python爬虫实战入门六:进步爬虫功用—并发爬取前程无忧

小说首发个人博客:http://zmister.com/

Dubbo安装

下载地址:https://github.com/alibaba/dubbo/releases

pom.xml:http://files.cnblogs.com/files/belen/pom.xml

澳门美高梅手机网站,相关作品:
Python爬虫实战入门一:工具准备
Python爬虫实战入门二:从一个简便的HTTP请求早先
Python爬虫实战入门三:简单的HTML解析——爬取腾讯快讯
Python爬虫实战入门四:使用Cookie模拟登录——获取电子书下载链接
Python爬虫实战入门五:获取JS动态内容—爬取和讯
Python爬虫实战入门六:提升爬虫成效—并发爬取智联合招生聘
Python爬虫入门实战七:使用Selenium–以抓取QQ空间好友说说为例
Python爬虫入门实战八:数据存储——MongoDB与MySQL

Zookeeper(注册核心)

Pom.xml

         <dependency>

                   <groupId>org.apache.zookeeper</groupId>

                   <artifactId>zookeeper</artifactId>

                   <version>3.4.6</version>

         </dependency>

ZooKeeper是3个分布式的,开放源码的分布式应用程序协调服务,是谷歌的Chubby3个开源的完毕,是Hadoop和Hbase的严重性组件。

实例中,zookeeper将作为dubbo服务的挂号中央。同时担当集群调度。

此前小说中所介绍的爬虫都以对单个U途乐L实行剖析和爬取,url数量少不费时,但是即使大家供给爬取的网页url有许多大概愈来愈多,那如何做?
选取for循环对具备的url进行遍历访问?
嗯,想法很好,不过只要url过多,爬取完全数的数额会不会太过分耗费时间了?
对此大家能够使用并发来对U揽胜L举办访问以爬取数据。
诚如而言,在单机上大家运用二种并发方式:

为何要用zookeeper?

Zookeeper能够提供配置管理、命名服务、分布式算法、集群管理效用。具体表明参看如下文章:

http://zhidao.baidu.com/question/919262980452730419.html?fr=iks&word=zookeeper+dubbo+%B9%D8%CF%B5&ie=gbk

  • 多线程(threading)
  • 多进程(multiprocessing)
  • 协程(gevent)

zookeeper安装

参照下一篇博文:

http://www.cnblogs.com/belen/p/4804063.html

对于以上三种方法的现实概念解释和验证,各位能够自动网上搜寻驾驭,相信会比自个儿表达得理解,所以在此就难堪它们举行解释表明了。
本连串文章有八个主要,1个是实战,一个是入门,既为实战,理论性的东西就讲述得比较少;既为入门,所描述的都以简简单单易懂易操作的事物,高深的技巧还请入门之后自行探索,那样也会成长得更快。
那正是说下边,开端并发爬取的实战入门,以多进程为例,并发爬取智联合招生聘的招贤纳士信息。
** 壹 、分析U奇骏L和页面结构**
① 、搜索全国限制内岗位名包蕴“Python”的职分招聘
作者们不分职业类型、不分行业种类,工作地点选为全国,职位名为“Python”,对招聘新闻实行搜索,结果如下图:

Consumer

咱俩注意图中四个红框的音讯:

目录结构

通过eclipse创制maven项目dubboclient,结构如下:

 澳门美高梅手机网站 1

  1. 搜索结果的url结构;(构造url地址举行for循环遍历)
  2. 查找结果的条数;(判断url的数量)
  3. 募集的新闻的重头戏;(解析数据)

集成Spring

applicationContext.xml:

http://files.cnblogs.com/files/belen/applicationContext.xml

 

由此筛选url参数,大家规定了亟需爬取的基本UOdysseyL为:

调用格局

流入spring后,通过ApplicationContext获取相应服务接口,调用服务章程。

http://sou.zhaopin.com/jobs/searchresult.ashx?jl=全国&kw=python&kt=3&p=2

Provider

其中

目录结构

通过eclipse创制maven项目dubboserver,结构如下:

 澳门美高梅手机网站 2

http://sou.zhaopin.com/jobs/searchresult.ashx
为请求地址和目录

集成Spring

applicationContext.xml:

http://files.cnblogs.com/files/belen/applicationProvider.xml

jl:工作地点参数
kw:搜索的基本点字
kt:以职责名搜索
p:页数

运维方法

ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext(

                                     new String[] {
“applicationProvider.xml” });

context.start();

俺们得以窥见,除了页数会扭转之外,其他的参数值都以固定的值。大家来规定一下摸索结果的总页数。
因为网页上有提醒一共有微微个地方满意条件,大家拿总职位数除以单页显示的岗位数量即可见道搜索结果的页数。

实例运维顺序

① 、  运维zookeeper,参看下一篇博文

 澳门美高梅手机网站 3

http://www.cnblogs.com/belen/articles/4804063.html

2、  启动Consumer

是在先导化spring的运用上下文。

三 、  客户端调用劳动

 澳门美高梅手机网站 4

# coding:utf-8

import requests
from bs4 import BeautifulSoup
import re

url = 'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=全国&kw=python&p=1&kt=3'
wbdata = requests.get(url).content
soup = BeautifulSoup(wbdata, 'lxml')

items = soup.select("div#newlist_list_content_table > table")
count = len(items) - 1
# 每页职位信息数量
print(count)

job_count = re.findall(r"共<em>(.*?)</em>个职位满足条件", str(soup))[0]
# 搜索结果页数
pages = (int(job_count) // count) + 1
print(pages)

Dubbo伪集群(单zookeeper)

单机服务器下模拟Dubbo集群,通过反复运转main函数,运行多个服务。本实例将起动多个服务器。为了差异客户端调用的是哪些服务,将劳动接口重返值做一些有别于:

服务1返回hello1 tom

服务2返回hello2 tom

服务3返回hello3 tom

其它七个服务对外暴光的端口也做出调整(spring配置文件):

服务1端口为:2090

服务2端口为:2089

服务3端口为:2088

客户端随机调用服务接口十次,输出如下结果:

 澳门美高梅手机网站 5

将服务1停歇运行,客户端随机调用服务接口拾肆回,输出如下结果:

 澳门美高梅手机网站 6

出口结果申明,dubbo集群具有负载均衡和灾备作用(failover)。使用zk完结

结果再次回到每页60条地点新闻,一共有14页。
那正是说大家的待爬取的url地址就有14个,url地址中参数p的值分别从1到14,这么少的url,使用for循环也能够急忙到位,但在此大家选用多进程展开现身说法。
贰 、在爬虫中接纳多进度
先上代码:

Dubbo控制台

上边内容看起来没那么直观。要是有四个控制台来管理和显现就太棒了。不得不说dubbo仍然挺亲切的。

# coding:utf-8

import requests
from bs4 import BeautifulSoup
from multiprocessing import Pool

def get_zhaopin(page):
    url = 'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=全国&kw=python&p={0}&kt=3'.format(page)
    print("第{0}页".format(page))
    wbdata = requests.get(url).content
    soup = BeautifulSoup(wbdata,'lxml')

    job_name = soup.select("table.newlist > tr > td.zwmc > div > a")
    salarys = soup.select("table.newlist > tr > td.zwyx")
    locations = soup.select("table.newlist > tr > td.gzdd")
    times = soup.select("table.newlist > tr > td.gxsj > span")

    for name, salary, location, time in zip(job_name, salarys, locations, times):
        data = {
            'name': name.get_text(),
            'salary': salary.get_text(),
            'location': location.get_text(),
            'time': time.get_text(),
        }
        print(data)

if __name__ == '__main__':
    pool = Pool(processes=2)
    pool.map_async(get_zhaopin,range(1,pages+1))
    pool.close()
    pool.join()

下载

官网下载地址:

http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-admin/2.4.1/dubbo-admin-2.4.1.war

可是该地址近日径直无法下载。

http://download.csdn.net/detail/liweifengwf/7784901能够透过那里下载。

结果如下:

安装

将war包拷贝到tomcat/webapps目录下,运营tomcat。浏览器中输入:

http://localhost:8080/dubbo/

澳门美高梅手机网站 7

暗中认可用户名和密码:root,root.能够透过/web-inf/dubbo.properties修改用户名和密码。

 澳门美高梅手机网站 8

因为除开采纳了多进度之外,其余的代码与事先小说介绍的艺术铜仁小异,所以在此只介绍一下多进度的主导代码:

from multiprocessing import Pool

multiprocessing是Python自带的贰个多进度模块,在此我们使用其Pool方法。

if __name__ == '__main__':
    pool = Pool(processes=2)
    pool.map_async(get_zhaopin,range(1,pages+1))
    pool.close()
    pool.join()
  1. 实例化三个进度池,设置进程为2;
  2. 调用进程池的map_async()方法,接收1个函数(爬虫函数)和二个列表(url列表)

那样,在爬虫中利用多进程展开并发爬取就消除了,越多高档、复杂强大的章程,还请各位参考其余文档资料。

发表评论

电子邮件地址不会被公开。 必填项已用*标注