本博客僅用於技術討論,若有侵權,聯繫筆者刪除。
此次的目的是爬取國內醫院的基本信息,並按省份存儲。爬取的黃頁是醫院列表。以下是結果圖:
一、初始化數據
初始化基本的數據,包括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)