跟着鬼哥学爬虫-4-根据需求爬工作需要内容
学习爬虫不是为了好玩,也是为了能够使得我们的工作更加简单方便的开展。
0x01:需求
朋友找来需要帮忙爬一个网站的数据,我们先贴图:
http://hospital.yuemei.com/rate/shanghai/p1.html
这个医院类的网站的一些医院名称,医院资质,医院介绍,医院地址,方便市场和商务去谈合作,所以如果一条一条查看数据,整理表格就太浪费时间了。
所以我们先分析看一下如果来开展。
0x02:开始
我们先打开网址看一下:
看到红色标注的信息,也就是我们需要的数据了。
0x03:整理需求
<div class="hos-related"> | |
<span class="item1"><a target="_blank" href="http://www.yuemei.com/hospital/7268/">上海江依南医疗美容门诊部</a></span> | |
<div class="item2"> | |
<div class="inline"><i>资质:</i><b>民营</b><b>美容门诊部</b></div> | |
<div class="hos-atr minying"> | |
<span>悦美认证民营医院</span> | |
<p class="hide-more"> | |
<i></i> | |
<span>类型:美容门诊部</span> | |
<span>该机构已通过<a target="_blank" href="http://www.yuemei.com/vcard/7268/"><i>悦美身份认证</i></a></span> | |
</p> | |
</div> | |
</div> | |
<span class="item2"><i>地址:</i><b>上海市静安区凤阳路560</b></span> | |
<a target="_blank" href="http://www.yuemei.com/hospital/7268/" class="item3">查看医院</a> | |
</div>
截取名称,资质,地址。
|
所以我们需要分析select的数据了。
在这里,通过上面红色标注,我们这样写:someData= soup1.select("div.hosList div.hos-related")
然后后面我们需要获取三个数据段内容了。
这里,使用了前面文章中讲的Tag的属性,来获取其Child,来一步一步达到我们需要的数据。
这里直接贴代码了:
soup1=BeautifulSoup(html,"lxml")
someData= soup1.select("div.hosList div.hos-related")
for d in someData:
name= d.findChild("span",attrs={"class":"item1"}).find("a").text
三个数据,放到一块一起获取出来即可。
现在,我们还需要将数据保存出来,既然都可以获取了 ,为啥不能做成表格呢?
这里我们用到的是csv库。
import sys
fff=open('ggz.csv','wb')
spamwriter = csv.writer(fff,dialect='excel')
spamwriter.writerow(["name","zizhi","address"])
然后这里写上上面我们获取到的内容。
也就是全部代码为:
# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import urllib2
import csv
import sys
def getSomePageMd5(i):
url = 'http://hospital.yuemei.com/rate/shanghai/p'+str(i)+".html"
print url
response = urllib2.urlopen(url)
html =response.read()
soup1=BeautifulSoup(html,"lxml")
someData= soup1.select("div.hosList div.hos-related")
for d in someData:
name= d.findChild("span",attrs={"class":"item1"}).find("a").text
zizhi_div= d.findChild("div",attrs={"class":"item2"})
zi = zizhi_div.findChild("div",attrs={"class":"inline"})
zizhi=""
for s in zi.children:
zizhi+=s.text+" "
address_div= d.findChild("span",attrs={"class":"item2"})
address= ""
for i in address_div:
address+= i.text
#print address
spamwriter.writerow([name,zizhi,address])
#print name+" "+zizhi+ " "+address
if __name__ == "__main__":
reload(sys)
sys.setdefaultencoding('utf8')
fff=open('ggz.csv','wb')
spamwriter = csv.writer(fff,dialect='excel')
spamwriter.writerow(["name","zizhi","address"])
#getSomePageMd5()
for i in range(1,11):
getSomePageMd5(i)