急救啊 抓取网页数据保存到本地数据库 有1万多页啊
http://app1.sfda.gov.cn/datasearch/face3/base.jsp?tableId=25&tableName=TABLE25&title=国产药品&bcId=124356560303886909015737447882
那位大侠能帮帮小弟 抓取这个网站上的药品信息并保存到本地数据库 最好能进入药品的下级目录 取得更多的数据内容 共1万多页 是在抱歉 图片上传不了
[解决办法]
共11062页 共165919条
平均每页花费3秒的话
取完这 1W 页的数据大约 9+小时
还没有计算中间掉线需要补数据的时间
要求高了一点
扫雷
[解决办法]
Clear
nTime = Seconds()
nDelayTime = 2 && 延时时间,如果你的网速慢,秒数酌情放大
Public oie, objTable, nPages
nStartPage = 1 && 起始页
nEndPage = 10 && 结束页
Create Cursor 国产药品 (序号 N (6), 产品名称 C(40), 批准文号 C(20), 生产单位 C(40), 药品本位码 C(70) )
oIE = Createobject("internetexplorer.application")
oIE.Visible = .F.
oIE.Navigate("http://app1.sfda.gov.cn/datasearch/face3/base.jsp?tableId=25&tableName=TABLE25&title=国产药品&bcId=124356560303886909015737447882")
=WaittingFor()
For I = nStartPage To nEndPage
Wait Window "正在提取数据,预计耗时(秒):" + Alltrim( Str((nEndPage - nStartPage + 1) * nDelayTime * 1.1 ) ) + Chr(13) + ;
"现在正在提取:" + Alltrim( Str(I) ) + " of " + Alltrim( Str(nEndPage) ) + " 页" Nowait
nPages = "javascript:devPage(" + Alltrim(Str(I)) + ")"
oIE.Navigate(nPages)
=WaittingFor()
Do GetDates
Endfor
Wait Window "耗时(秒) : " + Alltrim(Str(Seconds() - nTime)) Timeout 3
oIE.Quit()
Go Top
Browse Last
Return
Function WaittingFor && 延时
tStartSecond = Seconds()
Do While oIE.Busy=.T. Or oIE.ReadyState#4
If Seconds() - tStartSecond > nDelayTime
Exit
Endif
Enddo
Procedure GetDates && 提取该页数据
objCollection = oIE.Document.getElementsByTagName("Table").[156]
objTable = objCollection
For Each objRow In objTable.Rows
If Empty(objRow.cells(0).innertext)
Else
Insert Into 国产药品 Values (;
VAL(Strextract(objRow.cells(0).innertext, [], [.])), ;
Strextract(objRow.cells(0).innertext, [.], [ (国药准字]), ;
Strextract(objRow.cells(0).innertext, [ (国药准字], [ ]), ;
Strextract(objRow.cells(0).innertext, [ ], [ ], 2), ;
Strextract(objRow.cells(0).innertext, [ ], [)], 3) )
Endif
Next