一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

scrapy

 Levy_X 2017-12-03

簡(jiǎn)介

在使用 scrapy 爬取 IT桔子公司信息,用來(lái)進(jìn)行分析,了解 IT 創(chuàng)業(yè)公司的一切情況,之前使用 scrapy 寫了一個(gè)默認(rèn)線程是10的單個(gè)實(shí)例,為了防止被 ban IP 設(shè)置了下載的速度,3萬(wàn)多個(gè)公司信息爬了1天多才完成,現(xiàn)在想到使用分布式爬蟲來(lái)提高效率。

源碼githup

技術(shù)工具:Python3.5 scrapy scrapy_redis redis docker1.12 docker-compose Kitematic mysql SQLAlchemy

準(zhǔn)備工作

  1. 安裝 Docker 點(diǎn)這里去了解、安裝;

  2. pip install scrapy scrapy_redis;

代碼編寫

  1. 分析頁(yè)面信息:
    我需要獲取的是每一個(gè)「公司」的詳情頁(yè)面鏈接 和 分頁(yè)按鈕鏈接;

  2. 統(tǒng)一存儲(chǔ)獲取到的鏈接,提供給多個(gè) spider 爬??;

  3. 多個(gè) spider 共享一個(gè) redis list 中的鏈接;

目錄結(jié)構(gòu)圖

juzi_spider.py

# coding:utf-8 from bs4 import BeautifulSoup from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule from scrapy_redis.spiders import RedisCrawlSpider from itjuzi_dis.items import CompanyItem class ITjuziSpider(RedisCrawlSpider): name = 'itjuzi_dis' allowed_domains = [''] # start_urls = ['http://www./company/157'] redis_key = 'itjuziCrawler:start_urls' rules = [ # 獲取每一頁(yè)的鏈接 Rule(link_extractor=LinkExtractor(allow=('/company\?page=\d '))), # 獲取每一個(gè)公司的詳情 Rule(link_extractor=LinkExtractor(allow=('/company/\d ')), callback='parse_item') ] def parse_item(self, response): soup = BeautifulSoup(response.body, 'lxml') . .省略一些處理代碼 . return item

說(shuō)明:

  1. class 繼承了RedisCrawlSpider 而不是CrawlSpider

  2. start_urls 改為一個(gè)自定義的 itjuziCrawler:start_urls,這里的itjuziCrawler:start_urls 就是作為所有鏈接存儲(chǔ)到 redis 中的 key,scrapy_redis 里也是通過(guò)redislpop方法彈出并刪除鏈接的;

db_util.py

使用 SQLAlchemy 作為 ORM 工具,當(dāng)表結(jié)構(gòu)不存在時(shí),自動(dòng)創(chuàng)建表結(jié)構(gòu)

middlewares.py

增加了很多 User-Agent,每一個(gè)請(qǐng)求隨機(jī)使用一個(gè),防止防止網(wǎng)站通過(guò) User-Agent 屏蔽爬蟲

settings.py

配置middlewares.py scrapy_redis redis 鏈接相關(guān)信息

部署

在上面的「目錄結(jié)構(gòu)圖」中有,Dockerfiledocker-compose.yml

Dockerfile

FROM python:3.5 ENV PATH /usr/local/bin:$PATH ADD . /code WORKDIR /code RUN pip install -r requirements.txt COPY spiders.py /usr/local/lib/python3.5/site-packages/scrapy_redis CMD /usr/local/bin/scrapy crawl itjuzi_dis

說(shuō)明:

  • 使用 python3.5作為基礎(chǔ)鏡像

  • /usr/local/bin設(shè)置環(huán)境變量

  • 映射 hostcontainer 的目錄

  • 安裝 requirements.txt

  • 特別要說(shuō)明的是COPY spiders.py /usr/local/lib/python3.5/site-packages/scrapy_redis,將 host 中的 spiders.py 拷貝到container 中的 scrapy_redis 安裝目錄中,因?yàn)?lpop 獲取redis 的值在 python2中是 str 類型,而在 python3中是 bytes 類型,這個(gè)問(wèn)題在 scrapy_reids 中需要修復(fù),spiders.py 第84行需要修改;

  • 啟動(dòng)后立即執(zhí)行爬行命令 scrapy crawl itjuzi_dis

docker-compose.yml

version: '2' services: spider: build: . volumes: - .:/code links: - redis depends_on: - redis redis: image: redis ports: - '6379:6379'

說(shuō)明:

  • 使用第2版本的 compose 描述語(yǔ)言

  • 定義了 spiderredis 兩個(gè) service

  • spider默認(rèn)使用當(dāng)前目錄的 Dockerfile 來(lái)創(chuàng)建,redis使用 redis:latest 鏡像創(chuàng)建,并都映射6379端口

開始部署

啟動(dòng) container

docker-compose up #從 docker-compose.yml 中創(chuàng)建 `container` 們 docker-compose scale spider=4 #將 spider 這一個(gè)服務(wù)擴(kuò)展到4個(gè),還是同一個(gè) redis

可以在 Kitematic GUI 工具中觀察創(chuàng)建和運(yùn)行情況;

在沒(méi)有設(shè)置 start_urls 時(shí),4個(gè) container 中的爬蟲都處于饑渴的等待狀態(tài)

現(xiàn)在給 redis 中放入 start_urls:

lpush itjuziCrawler:start_urls http://www./company

4個(gè)爬蟲都動(dòng)起來(lái)了,一直爬到start_urls為空

以上です!ありがとうございました!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    视频在线免费观看你懂的| 精品老司机视频在线观看| 丰满人妻少妇精品一区二区三区| 大尺度激情福利视频在线观看| 精品亚洲一区二区三区w竹菊| 亚洲熟妇中文字幕五十路| 亚洲综合日韩精品欧美综合区| 国产永久免费高清在线精品| 噜噜中文字幕一区二区| av在线免费观看一区二区三区 | 国产亚洲欧美自拍中文自拍| 97精品人妻一区二区三区麻豆| 日本午夜免费福利视频| 中文字幕亚洲精品在线播放| 99少妇偷拍视频在线| 午夜激情视频一区二区| 日韩一区二区三区高清在| 欧美黑人在线精品极品| 国产精品自拍杆香蕉视频| 国产三级不卡在线观看视频| 尹人大香蕉一级片免费看| 免费黄色一区二区三区| 在线观看国产成人av天堂野外| 青青操日老女人的穴穴| 不卡视频在线一区二区三区| 欧美丰满人妻少妇精品| 黑色丝袜脚足国产一区二区| 亚洲免费视频中文字幕在线观看 | 色欧美一区二区三区在线| 最新午夜福利视频偷拍| 日韩欧美亚洲综合在线| 亚洲三级视频在线观看免费| 日韩熟妇人妻一区二区三区| 神马午夜福利免费视频| 日本一品道在线免费观看| 中国黄色色片色哟哟哟哟哟哟| 日本人妻精品中文字幕不卡乱码| 东北女人的逼操的舒服吗| 国产精品一区二区三区激情| 五月天丁香婷婷狠狠爱| 成人精品视频在线观看不卡|