Python爬蟲實例:爬取國內所有醫院信息

本博客僅用於技術討論,若有侵權,聯繫筆者刪除。

此次的目的是爬取國內醫院的基本信息,並按省份存儲。爬取的黃頁是醫院列表。以下是結果圖:

一、初始化數據

初始化基本的數據,包括global變量,省份名稱等等。

import requests,re,xlwt,datetime
from bs4 import BeautifulSoup

#初始化
def init():
    global url, province_name, headers
    url = 'http://www.yixue.com/'
    province_name = [
        '北京市', '天津市', '河北省', '山西省', '遼寧省', '吉林省', '黑龍江省', '上海市', 
        '江蘇省', '浙江省', '安徽省', '福建省', '江西省', '山東省', '河南省', '湖北省', 
        '湖南省', '廣東省', '內蒙古自治區', '廣西壯族自治區', '海南省', '重慶市', '四川省', '貴州省',
        '雲南省', '西藏自治區', '陝西省', '甘肅省', '青海省', '寧夏回族自治區', '新疆維吾爾自治區'
    ]
    headers = {
        'Host':'www.yixue.com',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
    }

二、#獲取當前省數據並存入

由於這次的爬蟲數據,對於需要的數據都無法通過ID或者CLASS定位,筆者就採用BeautifulSoup中的節點樹,通過標籤去獲取對應信息。另外,由於聘爬蟲的數據在規則中具有不規則性,所以對於每一項數據都進行驗證,判斷數據類型後再存入表中的對應位置。

存儲數據
def sav_message(messgae, province_now):
    workbook = xlwt.Workbook(encoding='utf-8')
    name = province_now + "醫院列表"
    table=workbook.add_sheet(name)
    value=["醫院名稱", "醫院地址", "聯繫電話", "醫院等級", "重點科室", "經營方式", "傳真號碼", "電子郵箱", "醫院網站"]
    for i in range(len(value)):
        table.write(0,i,value[i])
    i = 0
    for data in messgae[3]:
        table.write(i+1, 0, data.b.a.text)
        for data_1 in data.ul:
            now_mess = data_1.text.replace('\n', '')
            now_data = now_mess.split(':')
            count = 0
            for tittle in value:
                if tittle == now_data[0]:
                    index = count
                count = count + 1
            table.write(i+1, index, now_data[1])
        i = i + 1
    workbook.save('./醫院信息爬蟲數據/'+province_now+'醫院列表.xls')

#獲取當前省數據
def get_province_hospital(province_now):
    r = requests.get(url+province_now+'醫院列表',headers=headers,timeout=10)
    soup = BeautifulSoup(r.text, "lxml")
    message = soup.find_all('ul')
    sav_message(message, province_now)

三、主函數

主函數則負責整個邏輯,包括對各省的循環操作。

#主函數
if __name__ == '__main__':
    init()
    for province in province_name:
        get_province_hospital(province)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章