首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

抢救啊 抓取网页数据保存到本地数据库 有1万多页

2013-09-15 
急救啊抓取网页数据保存到本地数据库有1万多页啊http://app1.sfda.gov.cn/datasearch/face3/base.jsp?tabl

急救啊 抓取网页数据保存到本地数据库 有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

热点排行