爬虫定位网站:http://www.yanglao.com.cn/
代码很简单,单线程,可优化的地方很多:
如下:
# -*- coding: utf-8 -*-
"""
Created on Wed Sep 27 16:37:57 2017
@author: ESRI
"""
from bs4 import BeautifulSoup as bs
import urllib
import csv
import requests
import re
import time
col=['名称','所在地区','机构类型','收住对象','收费区间','地址']
myfile=open('E:\\example.csv','w',newline='')
mywriter=csv.writer(myfile)
mywriter.writerow(col)
startreq=urllib.request.urlopen('http://www.yanglao.com.cn/city') #进入爬取第一页
soup=bs(startreq,'lxml')
citylinklist=soup.find_all('div',class_='citylist')[0].find_all('a',href=True) #获取城市名称
k=['所在地区','机构类型','收住对象','收费区间'] #定义字段
for city in citylinklist: #按城市名称循环
mainurl='http://www.yanglao.com.cn'+city['href']
print(mainurl)
req=urllib.request.urlopen(mainurl)
print(req)
soup=bs(req,'lxml')
#print(soup)
try:finalpage=int(soup.find_all('ul',id='yw1')[0].find_all('a')[-1]['href'].split('_')[-1]) #查找分页
except:finalpage=1
i=1
while(i<=finalpage):
url=mainurl+'_'+str(i)
try:req=urllib.request.urlopen(url)
except:print('lol')
soup=bs(req,'lxml')
linklist=soup.find_all('li',class_='rest-item')
for item in linklist:
row=[]
temp=item.find_all('a',href=True)[1]
row.append(temp['title'])
s0=temp['href']
s1='http://www.yanglao.com.cn'
nexturl=s1+s0
req1=urllib.request.urlopen(nexturl)
soup1=bs(req1,'lxml')
baseinfo=soup1.find_all('div',class_='base-info')[0]
emlist=list(map(lambda x:x.get_text()[:-1],baseinfo.find_all('em')))
lilist=baseinfo.find_all('li')
for name in k:
if name in emlist:
pos=emlist.index(name)
row.append(lilist[pos].get_text()[5:])
else:
row.append('')
#try:row.append(soup1.find_all('div',class_='contact-info')[0].find_all('li')[1].get_text()[11:])
#except:row.append('')
row[3]=row[3].replace('\xa0',',').strip(' ').split(' ')[-1][:-1]
row[1]=row[1].replace(' ','').replace('\r\n','')
try:mywriter.writerow(row)
except:print('lol')
i=i+1
myfile.close()
最终结果如下(部分结果):
名称,所在地区,机构类型,收住对象,收费区间,地址
铁东区馨家园老年公寓,辽宁-鞍山市-铁东区,老年公寓,"自理,半自理/介助,不能自理/介护",1200 - 5000
鞍山伯伦科技有限公司,辽宁-鞍山市-,其他,自理,2000 - 3600
鞍山康乐护理院,辽宁-鞍山市-铁西区,护理院,"自理,半自理/介助,不能自理/介护,特护",1000 - 2000
大吉山庄老年公寓,辽宁-鞍山市-千山区,老年公寓,"自理,半自理/介助,不能自理/介护,特护",750 - 2000
乐呵呵老年公寓,辽宁-鞍山市-铁西区,老年公寓,"自理,半自理/介助",600 - 2400
鞍山市天柱养老院,辽宁-鞍山市-铁东区,养老院,"自理,不能自理/介护,特护",700 - 1000
鞍山康乐老年公寓,辽宁-鞍山市-铁西区,老年公寓,"自理,半自理/介助,不能自理/介护,特护",800 - 1500
鞍山市立山区北铸祥乐园养老院,辽宁-鞍山市-立山区,养老院,"自理,半自理/介助",900 - 1600
和和养老院,辽宁-鞍山市-立山区,养老院,"自理,半自理/介助,不能自理/介护,特护",1000 - 1600
长乐养老院,辽宁-鞍山市-铁东区,养老院,"自理,半自理/介助,不能自理/介护,特护",1500 - 2000
鞍山市享乐居养老院,辽宁-鞍山市-铁东区,养老院,"自理,半自理/介助,不能自理/介护,特护",1000 - 1600
世外桃源老年公寓,辽宁-鞍山市-千山区,老年公寓,自理,1000 - 2000
鞍山祥颐园老年公寓,辽宁-鞍山市-铁东区,老年公寓,"半自理/介助,不能自理/介护,特护",5500 - 7250
怡居养老院,辽宁-鞍山市-千山区,养老院,自理,500 - 1500
福来居养老院,辽宁-鞍山市-千山区,养老院,自理,600 - 1000
鞍山市东方老年公寓,辽宁-鞍山市-千山区,老年公寓,自理,500 - 1000
鞍山市红祥回族养老院,辽宁-鞍山市-千山区,养老院,"自理,半自理/介助",700 - 1500
辽宁省鞍山市岫岩县朝阳乡敬老院,辽宁-鞍山市-岫岩满族自治县,敬老院,自理,500 - 1000
辽宁省鞍山市台安县民政局敬老院,辽宁-鞍山市-台安县,敬老院,自理,500 - 1000
辽宁省鞍山市千山区唐家房镇敬老院,辽宁-鞍山市-千山区,敬老院,自理,500 - 1000
辽宁省鞍山市台安县高力房镇敬老院,辽宁-鞍山市-台安县,敬老院,自理,500 - 1000
辽宁省鞍山市台安县黄沙镇敬老院,辽宁-鞍山市-台安县,敬老院,自理,500 - 1000
辽宁省鞍山市千山区宋三台子镇敬老院,辽宁-鞍山市-千山区,敬老院,自理,500 - 1000
辽宁省鞍山市立山区双山福利院,辽宁-鞍山市-立山区,福利院,自理,500 - 1000
辽宁省鞍山市千山区泰和慈善养老院,辽宁-鞍山市-千山区,养老院,自理,500 - 1000