pythonscrapy分布式爬取boss直聘信息 scarpyd 部署scrapy 并進行數據可視化

需要準備 redis mongodb scrapy-redis ?這些自己百度安裝?

1.對要爬取的頁面進行分析。。。因爬取時候沒使用代理現在ip已經被屏蔽 所以明天進行分析 今天上代碼

代碼分析 這是沒有使用redis的爬蟲?

沒有使用redis的爬蟲代碼

# -*- coding: utf-8 -*-

importscrapy

fromscrapy.httpimportRequest

frombooszp.itemsimportBooszpItem

#from scrapy_redis.spiders import RedisSpider

classBoosSpider(RedisSpider):

name ="boos"

#? redis_key='boos:start_urls'

start_urls = ['http://www.zhipin.com/job_detail/?query=php&scity=100010000&source=1']

allowed_domains = ["www.zhipin.com"]

# def start_requests(self):

#for url in self.start_urls:

# yield Request(url=url,callback=self.parse)

defparse(self,response):

lianjie =response.xpath('//div[@class="job-primary"]')

fordizhiinlianjie:

item = BooszpItem()

item['name'] = dizhi.xpath('./div[@class="info-primary"]/h3[@class="name"]/text()').extract()

item['xinzi']= dizhi.xpath('./div[@class="info-primary"]/h3[@class="name"]/span[@class="red"]/text()').extract()

item['dizhi']= dizhi.xpath('./div[@class="info-primary"]/p/text()').extract()

item['gongsi']=dizhi.xpath('./div[@class="info-company"]/div[@class="company-text"]/h3[@class="name"]/text()').extract()

yielditem

jj = response.xpath('//div[@class="page"]/a/@href').extract()[-1]

ifjj !='javascript:;':

ff ='http://www.zhipin.com/'+jj

yieldRequest(url=ff,callback=self.parse,dont_filter = True)



item

# -*- coding: utf-8 -*-

importscrapy

fromscrapy.httpimportRequest

frombooszp.itemsimportBooszpItem

fromscrapy_redis.spidersimportRedisSpider

classBoosSpider(RedisSpider):

name ="boos"

redis_key='boos:start_urls'

#? ? start_urls = ['http://www.zhipin.com/job_detail/?query=php&scity=100010000&source=1']

allowed_domains = ["www.zhipin.com"]

defstart_requests(self):

forurlinself.start_urls:

yieldRequest(url=url,callback=self.parse)

defparse(self,response):

lianjie =response.xpath('//div[@class="job-primary"]')

fordizhiinlianjie:

item = BooszpItem()

item['name'] = dizhi.xpath('./div[@class="info-primary"]/h3[@class="name"]/text()').extract()

item['xinzi']= dizhi.xpath('./div[@class="info-primary"]/h3[@class="name"]/span[@class="red"]/text()').extract()

item['dizhi']= dizhi.xpath('./div[@class="info-primary"]/p/text()').extract()

item['gongsi']=dizhi.xpath('./div[@class="info-company"]/div[@class="company-text"]/h3[@class="name"]/text()').extract()

yielditem

jj = response.xpath('//div[@class="page"]/a/@href').extract()[-1]

ifjj !='javascript:;':

ff ='http://www.zhipin.com/'+jj

yieldRequest(url=ff,callback=self.parse,dont_filter = True)

importscrapy

classBooszpItem(scrapy.Item):

# define the fields for your item here like:

# name = scrapy.Field()

name =scrapy.Field()

xinzi=scrapy.Field()

dizhi =scrapy.Field()

jingyan=scrapy.Field()

dengji=scrapy.Field()

gongsi=scrapy.Field()




from scrapy importsignals

import random

from scrapy.confimportsettings

classUAMiddleware(object):

user_agent_list = settings['USER_AGENT_LIST']

defprocess_request(self,request,spider):

ua = random.choice(self.user_agent_list)

request.headers['User-Agent'] = ua

classProxyMiddleware(object):

ip_list = settings['IP_LIST']

defprocess_request(self,request,spider):

ip = random.choice(self.ip_list)

printip

request.meta['proxy'] = ip

settings.py

DOWNLOADER_MIDDLEWARES = {

'booszp.middlewares.UAMiddleware':543,#獲取middlewares 的user

'booszp.middlewares.ProxyMiddleware':544,#獲取 ip代理

}

ITEM_PIPELINES = {

'booszp.pipelines.BooszpPipeline':300,

#'scrapy_redis.pipelines.RedisPipeline':301

}

SCHEDULER ="scrapy_redis.scheduler.Scheduler"#首先是Scheduler的替換,

# 這個東西是Scrapy中的調度員

DUPEFILTER_CLASS ="scrapy_redis.dupefilter.RFPDupeFilter"#去重

SCHEDULER_PERSIST = False

#如果這一項為True,那么在Redis中的URL不會被Scrapy_redis清理掉,

# 這樣的好處是:爬蟲停止了再重新啟動,它會從上次暫停的地方開始繼續爬取

# 。但是它的弊端也很明顯,如果有多個爬蟲都要從這里讀取URL,需要另外寫一段代碼來防止重復爬取。

#如果設置成了False,那么Scrapy_redis每一次讀取了URL以后,就會把這個URL給刪除。

# 這樣的好處是:多個服務器的爬蟲不會拿到同一個URL,也就不會重復爬取。但弊端是:爬蟲暫停以后再重新啟動,它會重新開始爬。

SCHEDULER_QUEUE_CLASS ='scrapy_redis.queue.SpiderQueue'

#爬蟲請求的調度算法

USER_AGENT_LIST = ['Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1',

'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36',

'Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11']

IP_LIST = ['http://122.226.62.90:3128',#代理ip

'http://101.200.40.47:3128',

'http://84.52.115.139:8080']

REDIS_HOST ='127.0.0.1'#修改為Redis的實際IP地址

REDIS_PORT =6379#修改為Redis的實際端口

MONGODB_HOST='127.0.0.1'# mongodb

MONGODB_POST =27017

MONGODB_DBNAME='boos'

MONGODB_DOCNAME='boos3'

importpymongo

fromscrapy.confimportsettings

classBooszpPipeline(object):

def__init__(self):

client = pymongo.MongoClient()

db = client[settings['MONGODB_DBNAME']]

self.post = db[settings['MONGODB_DOCNAME']]

defprocess_item(self,item,spider):

book_info =dict(item)

self.post.insert(book_info)

returnitem

然后啟動redis 喂鏈接就可以了

啟動爬蟲就行了?

然后使用scrapyd 進行項目部署


啟動 scrapyd?


在重新打開cmd


curl http://localhost:6800/listprojects.json 查看爬蟲信息


curl http://localhost:6800/schedule.json -d project=booszp -d spider=boos

啟動爬蟲

在瀏覽器輸入localhost:6500



然后去redis 喂條url


然后就可以看到爬取的數據了

如有問題請留言

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • scrapy學習筆記(有示例版) 我的博客 scrapy學習筆記1.使用scrapy1.1創建工程1.2創建爬蟲模...
    陳思煜閱讀 12,780評論 4 46
  • scrapy源碼https://github.com/scrapy/scrapy/tree/master/scra...
    木魚非魚閱讀 873評論 0 1
  • 春天到來時,讀完三本書,《茶的故事》、《無盡綠》、《山居歲月》。 剛跟小盆友聊起延伸閱讀,就拿自己將這三本書一起讀...
    壹貳閱讀 677評論 0 0
  • 鄉村文化孕育成長 要回想腦海中最早記事是什么時候、什么事情,恐怕還真是記不得。我一直在盡力回想,自己是怎么來到這個...
    匠人致遠閱讀 303評論 2 1
  • 午后天空,一如牛奶藍,一鋪如洗。一大坨一大坨棉花糖的云朵掛在那里,不經意的輕盈,賞心悅目。想念清爽的抹茶,酥酥的曲...
    孫大圣獅子王閱讀 454評論 0 3