久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Python大佬批量爬取中國(guó)院士信息,告訴你哪個(gè)地方人杰地靈

 太極混元天尊 2018-05-27



摘要

院士(Academician)源于Academy, Academy是古希臘傳說(shuō)中的一位拯救雅典免遭劫難而犧牲的英雄,屬于科學(xué)及學(xué)術(shù)界的最高榮譽(yù)頭銜,。哪里盛產(chǎn)生院士?python爬蟲(chóng)告訴你,。

背景調(diào)研

目前中國(guó)院士共有1500余人,,其中科學(xué)院院士799人,工程院院士875人,。

  • 科學(xué)院院士名單 

    http://www.casad.cas.cn/chnl/371/index.html

  • 工程院院士名單 

    http://www./cae/html/main/col48/column_48_1.html

這里我以工程院院士信息抓取進(jìn)行講解,。

工程院士出生地分布圖

必備模塊

  • 通過(guò) pip 安裝scrapy 爬蟲(chóng)框架模塊

  • 通過(guò) pip 安裝 jieba 分詞模塊

  • 通過(guò) pip 安裝win32api
    如果報(bào)ImportError: DLL load failed: 找不到指定的模塊。 安裝好后,,把 D:\Python27_64\Lib\site-packages\pywin32_system32下的所有東西拷貝到C:\Windows\System32下面

爬蟲(chóng)流程

在E盤下面建立文件夾project_scrapy,

  • 建立爬蟲(chóng)項(xiàng)目 在E盤下面建立文件夾project_scrapy,進(jìn)入該文件夾下面,,打開(kāi)cmd窗口,然后運(yùn)行下面的命令搭建爬蟲(chóng)框架,。 scrapy startproject engaca_spider 目錄樹(shù)如下:

E:\project_scrapy>tree /f
卷 新加卷 的文件夾 PATH 列表
卷序列號(hào)為 00000001 7009:36A5
E:.
└─engaca_spider
 │  scrapy.cfg
 │
 └─engaca_spider
     │  items.py
     │  middlewares.py
     │  pipelines.py
     │  settings.py
     │  __init__.py
     │
     └─spiders
             __init__.py
  • 設(shè)置輸出內(nèi)容 在items.py 中添加如下內(nèi)容

# -*- coding: utf-8 -*-
import scrapy
class EngacaSpiderItem(scrapy.Item):
 # define the fields for your item here like:
 # name = scrapy.Field()
 name = scrapy.Field()
 place = scrapy.Field()
 pass
  • 在settings.py 中設(shè)置爬蟲(chóng)源頭
    在settings.py 文件添加如下語(yǔ)句

starturl = 'http://www./cae/html/main/col48/column_48_1.html'
  • 省份列表文件 scrapy.cfg的同層文件夾中存放pro_list.txt

    鏈接:https://pan.baidu.com/s/1-fr_kWtIgzzjsNV_2Yu0JA 密碼:vrsu

  • 爬蟲(chóng)核心代碼 在spiders文件夾下面建立 aca_spider.py

#!python
#coding: utf-8
import scrapy
from scrapy.spiders import Spider
from scrapy.selector import Selector  
import re
from engaca_spider.settings import starturl
from engaca_spider.items import  EngacaSpiderItem
from pprint import pprint
import json
import urllib
from urlparse import urljoin  
import jieba
pro_list =[ i.strip().decode('utf-8')  for i in  open('pro_list.txt').readlines()]
class EngAcaSpider(Spider):
 '''
 '''

 name = 'EngAca'

 #需要處理的http狀態(tài)
 handle_httpstatus_list = [404,403]

 def start_requests(self):
     '''
     '''

     yield scrapy.Request(starturl,self.getnames)

 def getnames(self,response):
     '''
     '''

     if response.status == 403:
         print 'meet 403, sleep 600 seconds'
         import time
         time.sleep(600)
         yield scrapy.Request(response.url, callback=self.getnames)
     #404,,頁(yè)面不存在,直接返回即可
     elif response.status == 404:
         print 'meet 404, return'
     #正常處理
     else:
         print 'second:',response.url
         self.logger.info('a response from %s',response.url)

         names_li=response.selector.xpath('//li[@class='name_list']/a')
         for name_li in names_li:
             '''
             '''

             items=EngacaSpiderItem()
             items['name']=name_li.xpath('./text()').extract_first()  #unicode
             urlhref=name_li.xpath('./@href').extract_first()
             newurl=urljoin(response.url,urlhref)
             yield scrapy.Request(newurl,callback=self.getplaces,meta={'items':items})

 def getplaces(self,response):
     '''
     '''

     items = response.meta['items']

     # get first content;
     #  中英文 混用 .encode('gbk','ignore')  忽略英文空格
     ptext=response.selector.xpath('//div[@class='intro']/p[1]/text()').extract_first()
     content=ptext.split(u',。')[1]        
     seg_list = jieba.cut(content)
     for place in seg_list:
         place=place.replace(u'省','')
         place=place.replace(u'市','')
         print 'place:',place
         if place in pro_list:
             items['place']=place
             break
     else:
         items['place']='None'
     pprint(items)
     yield items
  • 結(jié)果輸出代碼 在pipelines.py 處理輸出內(nèi)容,,可以把內(nèi)容保存到數(shù)據(jù)庫(kù)或者文本中。 這里我直接保存到文本result.txt中,。

# -*- coding: utf-8 -*-
class EngacaSpiderPipeline(object):
 def process_item(self, item, spider):
     return item
from pprint import pprint
import codecs
class ShopinfoPipeline(object):
 def process_item(self, item, spider):
     return item
class JsonWithEncodingPipeline(object):  
 def __init__(self):                    
     self.file = codecs.open('result.txt', 'w', encoding='utf-8')  #保存為json文件
     line='name  place\n'
     self.file.write(line)#寫入文件中
 def process_item(self, item, spider):
     '''
     '''

     keylist=['name','place']
     baseline=''
     for i in keylist:
         baseline+=item[i]+' '
     baseline+='\n'
     pprint(baseline)
     self.file.write(baseline)#寫入文件中
 def spider_closed(self, spider):#爬蟲(chóng)結(jié)束時(shí)關(guān)閉文件
     self.file.close()
  • 在settings.py指定輸出管道

ITEM_PIPELINES = {
'engaca_spider.pipelines.JsonWithEncodingPipeline': 300,
}

運(yùn)行爬蟲(chóng)

在這個(gè)目錄scrapy.cfg的同層文件夾下打開(kāi)cmd窗口運(yùn)行爬蟲(chóng),在該目錄下生成結(jié)果文件result.txt,。

scrapy crawl EngAca

利用pycharts進(jìn)行數(shù)據(jù)可視化

參照教程,繪制地圖熱圖,。微信好友的全國(guó)分布的熱圖,,你的微信朋友遍布全中國(guó)了嗎?

從這張圖上,,我們可以看出江蘇院士最多,,超過(guò)100人,,人杰地靈當(dāng)之無(wú)愧。

項(xiàng)目所有文件

鏈接:https://pan.baidu.com/s/1-fr_kWtIgzzjsNV_2Yu0JA 密碼:vrsu

總結(jié)

這是最基本也是最重要的爬蟲(chóng)練習(xí),。里面沒(méi)有涉及到JS加密,、反爬措施。借助這個(gè)練習(xí),,可以熟悉爬蟲(chóng)框架,。 數(shù)據(jù)預(yù)測(cè)未來(lái),做事先人一步,。



    本站是提供個(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)論公約

    類似文章 更多