Scrapy爬虫:爬取国内医院信息名录


Scrapy爬虫:爬取国内医院信息名录

今天勺子接到了领导交给我的一个任务:网上收集江苏省内医院的名录,信息越详细越好,于是,不纠结、不抱怨,抄起scrapy一路开爬!

一、网站选择

网上医院信息网站还是很多的,经过对比筛选,勺子最终选择了99医院库(https://yyk.99.com.cn/)。这个网站的医院信息内容非常全面,一些不知名的医院都能查得到,完全满足领导要求。

Scrapy爬虫:爬取国内医院信息名录

二、网站分析

进入网址:https://yyk.99.com.cn/jiangsu/,就可以看到江苏全省的医院名录了(居然有将近4000家),点击每个医院名称,即可进入医院的详情页,在详情页的医院介绍模块里,可以查到医院的性质、地址、等级等信息,因此,整体思路就比较清晰了,先获取近4000家医院的全部链接,再逐一访问获取每家医院的详细信息。


Scrapy爬虫:爬取国内医院信息名录


三、创建工程

开始动手,两行代码创建工程:

<code>scrapy startproject jiangsuhospital
scrapy genspider hospital '99.com.cn'/<code>

工程创建完成后,再setting.py里进行必要配置,将ROBOTSTXT_OBEY置为False,设置请求头,打开pipelines等。

四、核心代码

hospital.py的代码如下:

<code>import scrapy
from jiangsuhospital.items import JiangsuhospitalItem

class HospitalSpider(scrapy.Spider):
name = 'hospital'
allowed_domains = ['99.com.cn']
start_urls = ['https://yyk.99.com.cn/jiangsu/']

def parse(self, response):
divs = response.xpath("//html/body//div[@class='m-table-2']//tr")

#拼接各家医院的url
for div in divs:
trs = div.xpath('.//td')
for tr in trs:
href = tr.xpath('.//a/@href').extract_first()
next_url = 'https://yyk.99.com.cn'+href+'jianjie.html'

#请求所有医院的url
yield scrapy.Request(next_url,callback=self.parse_detail)/<code>

五、数据保存

通过pipelines.py将数据保存至csv文件中,csv数据保存基本可以写成以下固定格式:

<code>import os
import csv

class JiangsuhospitalPipeline(object):
def open_spider(self,spider):
store_file = os.path.dirname(__file__) + '\\\\result\\\\result.csv'
self.file = open(store_file,'w',newline='')
self.writer = csv.writer(self.file)


def process_item(self, item, spider):
if item['mingcheng'] :
self.writer.writerow((item['mingcheng'],item['bieming'],item['shuxing'],item['dianhua'],item['dizhi'],item['chengshi'],item['yuanzhang'],item['jianyuan'],item['leixing'],item['dengji'],item['keshi'],item['renshu'],item['bingchuang'],item['nianmenzhen'],item['yibao']))
return item

def close_spider(self,spider):
self.file.close()/<code>

六、结果展示

<code>scrapy crawl hospital,表格就出来了,调整就是这样/<code>
Scrapy爬虫:爬取国内医院信息名录

很简单的一个小工程,很好的解决了领导的需求,在此源码奉上,供大家参考,下载地址:https://github.com/cxxc2001/jiangsuhospital。

对代码有问题,或需要数据,或其他商业合作,可以私信勺子!

【一把勺子,挖掘数据律动!!】


分享到:


相關文章: