中科院爬蟲完整專案

HGXLONLY發表於2018-07-10
2018/07/09 23:43

專案名稱:爬取中科院871個院士的簡介資訊


1.爬取目的:中科院871個院士的簡介資訊


2.爬取最終結果:

3.具體程式碼如下:
import re  # 不用安裝(注意!!)
import os  # 資料夾等的操作(注意!!)
import time  
import requests  # http  urllib2

url = 'http://www.cae.cn/cae/html/main/col48/column_48_1.html'
html = requests.get(url)
# print(html.status_code) # 狀態碼200  404 500 502
html.encoding = 'utf-8'
# print(html.text) # 以文字形式返回網頁

# 提取資料
# + 一次或多次  大於等於一次
# findall返回的是列表(注意!!)
number = re.findall(
    '<a href="/cae/html/main/colys/(\d+).html" target="_blank">', html.text)

i = 1  # 這裡的i變數是由我創造進行明確區分所抓取的院士的數量的;
for m in number[:871]:
# for m in number[:4]:  # 這裡控制要爬取的個數
# for m in number[28:88]:
    nextUrl = 'http://www.cae.cn/cae/html/main/colys/{}.html'.format(m)
    # 再次請求資料
    nexthtml = requests.get(nextUrl)
    nexthtml.encoding = 'utf-8'
    # 注意正規表示式:
	# () 提取資料
    # . 匹配除了換行\n的任意單個字元
    # * 匹配前面的表示式任意次 {1,5}
    # ? 如果前面有限定符  非貪婪模式,注意!!!
    # 儘量可能少的匹配所搜尋的字串
    text = re.findall('<div class="intro">(.*?)</div>', nexthtml.text, re.S)  # re.S匹配換行的 
    text2 = re.sub(r'<p>| | |</p>', '', text[0]).strip()  # .strip()清楚空格

    # 儲存資料
    with open(r'E:\02中科院院士資訊爬取結果.txt', mode='a+', encoding="utf-8") as f:  # 特別注意這裡的要以編碼utf-8方式開啟
        f.write('{}. '.format(i) + text2 + '\n')
        i += 1

    # 不要下載太快
    # 限制下載的速度
    time.sleep(1)
    # 程式執行到這個地方  暫停1s

相關文章