python3读取BJDA药品经营企业数据
#-*- coding:utf-8 -*- 
#读取北京FDA的药品经营企业数据
# 20161125 zhangshaohua
import re
import urllib.request
import urllib.parse
import os
def getContent(url,pat,charSet):
    #指定网址、正则表达式、编码方式,返回指定内容
    page = urllib.request.urlopen(url)
    content = page.read().decode(charSet)
    pattern = re.compile(pat)
    result = re.findall(pattern,content)
    return result
#读取首页
url = 'http://www.bjda.gov.cn/eportal/ui?pageId=331148'
#取总记录数,每页20条
zjls = getContent(url,'总记录数:(\d{1,5}),','UTF-8')
vdzjls = int(zjls[0])
vdzjls = int(round(vdzjls/20,0)) 
for i in range(51,vdzjls):
    url = 'http://www.bjda.gov.cn/eportal/ui?pageId=331148¤tPage='+str(i)
    pattern = 'artileId=(.*)">查看'
    page_id = getContent(url,pattern,'UTF-8')
    for url_id in page_id:
        try:
            subid = url_id
            suburl = "http://www.bjda.gov.cn/eportal/ui?pageId=331631&artileId="+subid
            qymc = getContent(suburl,'企业名称:</th>\r\n.*?<td>(.*?)</td>','UTF-8')
            zcdz = getContent(suburl,'注册地址:</th>\r\n.*?<td>(.*?)\s{0,3}</td>','UTF-8')
            xkzh = getContent(suburl,'许可证号:</th>\r\n.*?<td>(.*?)</td>','UTF-8')
            print(qymc,zcdz,xkzh)
            file_object = open('bjda.txt','a')            
            file_object.write(qymc[0])
            file_object.write(',')
            file_object.write(zcdz[0])
            file_object.write(',')            
            file_object.write(xkzh[0])
            file_object.write('\n\r')
            
        finally:
            None
        file_object.close()
vdzjls  = int(zjls[0])
print('药品零售企业读取完成!')
经历了读取HDA的练习,此次读取BJ的数据开始比较顺畅。在读取996条数据时出错,再次出现换行造成的问题;
多次试错后用‘\s{0,3}’成功解决.
正则表达式要继续学习,才能不断进步,避免遇“”坑“”时能顺利通过!
    活到老,学到老。
                    
                
                
            
        
浙公网安备 33010602011771号