资料库地址:http://web.tfrd.org.tw/genehelp/diseaseDatabase.html?selectedIndex=0

资料库它长这样:

【python爬虫】爬取疾病资料库

这次主要爬取其中的疾病名称,难点在于网页源代码是看不到数据的,但是可以通过F12开发者工具查看网页请求数据的源网址

【python爬虫】爬取疾病资料库 

可以看到requestURL的地址,打开这个地址可以看到:

【python爬虫】爬取疾病资料库 

 其中的大部分文字就是疾病名称,爬取这个就不难了。

首先将源码中的中文字符看作疾病名称!

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)

代码就写完了,随便写的,用的方法都有点蠢,将就看吧。

相关文章: