zoukankan      html  css  js  c++  java
  • python3爬取中国药学科学数据

    今天我表弟说帮忙爬一下中国药学科学数据,导出json格式给他。一共18万条数据。

    看了一下网站http://pharm.ncmi.cn/dataContent/admin/index.jsp?submenu=183

    竟然get请求。不爬你爬谁。。。

    #/usr/bin/env python
    #Guoyabin
    #-*- coding:utf-8 -*-
    import re,requests,threading,time
    def inserttxt(file,text):
    	f=open(file,'a+')
    	f.write(text)
    	f.close()
    
    def down(begin,end):
    	url='http://pharm.ncmi.cn/dataContent/dataSearch.do'
    	for i in range(begin,end):
    		file=str(end)+'.txt'
    		params={'method':'viewpage','id':i,'did':26}
    		try:
    			html=requests.get(url,params=params,timeout=60)
    			r=html.text.replace("
    ","")
    			html.close()
    			r=r.replace("
    ","")
    			r=r.replace("	","")
    			r=r.replace(">","")
    			req='width="89%">(.*?) </td>'
    			yaovalue=re.findall(req,r)
    			yaokey=['{
    name:"','",
    english:"','",
    number:"','",
    shanpinmingchen:"','",
    danwei:"','",
    date:"','",
    class:"','",
    guige:"','",
    jixing:"','",
    leibie:"','",
    pizhun:"']
    			yao=zip(yaokey,yaovalue)
    			for i in yao:
    				for x in i:
    					inserttxt(file,x)
    			inserttxt(file,'"
    },
    ')
    			#休息3秒在爬,原来没有休息。导致大量TCP连接。且对方直接封我ip。
                            #18万条数据/10线程*3秒等待/60秒/60分=15个小时拿完对方数据。不如改一下程序,多台独立IP电脑运行了。
    			time.sleep(3)
    		except:
    			print('url访问失败')
    			continue
    			
    if __name__=='__main__':
    	t1=threading.Thread(target=down,args=(2228,20000,))
    	t1.start()
    	t2=threading.Thread(target=down,args=(20000,40000,))
    	t2.start()
    	t3=threading.Thread(target=down,args=(40000,60000,))
    	t3.start()
    	t4=threading.Thread(target=down,args=(60000,80000,))
    	t4.start()
    	t5=threading.Thread(target=down,args=(80000,100000,))
    	t5.start()
    	t6=threading.Thread(target=down,args=(100000,120000,))
    	t6.start()
    	t7=threading.Thread(target=down,args=(120000,140000,))
    	t7.start()
    	t8=threading.Thread(target=down,args=(140000,160000,))
    	t8.start()
    	t9=threading.Thread(target=down,args=(16000,180000,))
    	t9.start()
    	t10=threading.Thread(target=down,args=(18000,183662,))
    	t10.start()
    	t10.join()
    	input('已经下载完,按回车退出')
    

      开始运行了几次没问题,已经爬下一半了,过了一会直接被封了。可能爬的太快了。容我做个悲伤的表情。

    无耻的求一下赞助

  • 相关阅读:
    准备 FRM 考试——方法、工具与教训
    930. 和相同的二元子数组 前缀和
    1906. 查询差绝对值的最小值 前缀和
    剑指 Offer 37. 序列化二叉树 二叉树 字符串
    815. 公交路线 BFS
    518. 零钱兑换 II dp 完全背包
    1049. 最后一块石头的重量 II dp
    5779. 装包裹的最小浪费空间 二分
    5778. 使二进制字符串字符交替的最少反转次数 字符串 滑动窗口
    474. 一和零 dp
  • 原文地址:https://www.cnblogs.com/guoyabin/p/7150972.html
Copyright © 2011-2022 走看看