资料库地址:http://web.tfrd.org.tw/genehelp/diseaseDatabase.html?selectedIndex=0
资料库它长这样:
这次主要爬取其中的疾病名称,难点在于网页源代码是看不到数据的,但是可以通过F12开发者工具查看网页请求数据的源网址
可以看到requestURL的地址,打开这个地址可以看到:
其中的大部分文字就是疾病名称,爬取这个就不难了。
首先将源码中的中文字符看作疾病名称!
import requests
import bs4
from bs4 import BeautifulSoup
url= 'http://web.tfrd.org.tw/genehelpDB/GeneHelp/DiseaseDBIndex/'
path= r'C:\Users\谢迎超\Desktop\download\疾病.txt'
urls={'0': 'A', '1': 'B', '2': 'C', '3': 'D', '4': 'E', '5': 'F', '6': 'G', '7': 'H',
'8': 'I', '9':'J', '10': 'K', '11': 'L', '12': 'M', '13': 'N', '14': 'O',
'15': 'P', '16': 'Q', '17': 'R', '18': 'S', '19': 'T', '20': 'U', '21': 'V', '22': 'W',
'23': 'X', '24': 'Y', '25': 'Z', '26': 'CD'
}#为了更好的网址,设置一个字典,虽然这方法有点蠢
def GetText(url):#get网页源码
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def main(url):
r= GetText(url)
soup= BeautifulSoup(r, 'html.parser')
pstr= list(soup)[0]
#将网页HTML转换成一个list,list(soup)[0]是第一个元素,可以发现就是网页的源码,这个方法也有点蠢
plist=pstr[16:-1].split('}')
#截取源代码中'['和']'中的元素,观察源代码可以看出每一个疾病都是被"{}"包起来的,所以以'}'分割成列表
#这样plist中的每一个元素就涵盖了一个疾病(中文字符串)
# 先将列表赋给字符串,又把字符串分割成列表,这方法简直蠢死了。
k=0
for i in range(len(plist)-1):
k= k+1
pplist= plist[i].split('"')
#可以看出疾病名称被"和"包围了,所以以"为分割将plist的每一个元素再分割
#其中pplist[7]就是疾病名称(中文字符串)
p= pplist[7].find('【')
#其实可以发现有几个中文字符串并不是疾病名称,通过"【"符号筛选掉
if p==-1:
print(pplist[7])
Write2txt(pplist[7])
print('\n疾病数:%d'%k)
def Write2txt(text):#文件写入
f= open(path,'a')
f.write(text)
f.writelines('\n')
f.close()
for j in range(26):#字典的作用在这里!!!
url1= url+str(urls[str(j)])
print('%s:'%urls[str(j)])
main(url1)
代码就写完了,随便写的,用的方法都有点蠢,将就看吧。