爬虫 动态网页爬取问题

各位前辈大家好,想请教一下爬虫爬取动态网页的问题。
我前端知识不是特别扎实,所以遇到了自己认为比较棘手的问题。
我因为工作需要想抓取一批公示信息,网站地址如下:

http://app1.sfda.gov.cn/datas...

用了splinter直接模拟浏览器,代码如下:

from splinter import Browser
browser = Browser('chrome')
url0 = '''http://app1.sfda.gov.cn/datasearch/face3/base.jsp?tableId=24&tableName=TABLE24&title=GSP%C8%CF%D6%A4&bcId=118715593187347941914723540896'''
browser.visit(url0) 
username_input = browser.find_by_xpath('//input[@id="keyword"]')[0]
username_input.type('安徽')
submit_input = browser.find_by_xpath("//input[@name='Submit']")[0]
submit_input.click()

结果是服务器无返回。
我不知道为什么实际点击与splinter模拟操作服务器端可以区别出来。

而且在Chrome里用 F12 调试的时候,过一会儿页面就会出现Paused in debugger,
Sources 会出现一个标签debugger:////VM200(也可能是其他数字)里面有一段代码var a = new Date(); debugger; new Date() - a > 100;
这是什么原因啊?
请各位指点,谢谢!

阅读 6.4k
2 个回答

用selenium和PhantomJS没啥问题,chrome的F12也很正常。。

from bs4 import BeautifulSoup as bsy
from urllib import parse
import requests

# 获取bcid的url
url_get_bcid = "http://app1.sfda.gov.cn/datasearch/face3/base.jsp?tableId=24&tableName=TABLE24&title=GSP%C8%CF%D6%A4&bcId=118715593187347941914723540896"
# 获取结果的url
url = "http://app1.sfda.gov.cn/datasearch/face3/search.jsp"

# 获取bcid
detail = requests.get(url_get_bcid)
bcid_line = bsy(detail.text,"lxml").find_all("input",id="keyBcId")[0]
bcid = bcid_line["value"]

# 获取关键字的网页编码
key = '安徽'
parse.quote(key)

# post所需要的数据
data = {
    'bcId':bcid,
    'State':'1',
    'tableId':'24',
    'State':'1',
    'keyword':parse.quote(key),
    'State':'1'
    }

# 生成你需要的数据,可以用bs4筛一下
detail2 = requests.post(url,data=data)
print(detail2.text)

结果如下:

<!--?????????-->

<table width=100% border=0 cellspacing=0 cellpadding=0>
<tr>
    <td height=27 bgcolor=#659ACE>
        <table width=100% border=0 align=center cellpadding=0 cellspacing=0>
        <tr>
            <td width=20>&nbsp;</td>

            <td><div align=left class=zs2>"GSP认证" 关键字 "安徽"  的内容列表 , 共有 7753 条记录</div></td></tr>

        </table></td></tr>
</table>

<table width=100% border=0 cellspacing=0 cellpadding=0 >


    
<tr>
    <td height=30><p align=left>
    <a href=javascript:commitForECMA(callbackC,'content.jsp?tableId=24&tableName=TABLE24&tableView=GSP认证&Id=60667',null)>1.安徽徽源医药有限公司 (A-AH09-028)</p></td></tr>
<tr>
    <td height=1 background=images/data01_04.gif></td></tr>
     
<tr>
    <td height=30><p align=left>
    <a href=javascript:commitForECMA(callbackC,'content.jsp?tableId=24&tableName=TABLE24&tableView=GSP认证&Id=73525',null)>2.安徽中徽药业有限公司 (A-AH10-006)</p></td></tr>
<tr>
    <td height=1 background=images/data01_04.gif></td></tr>
     
<tr>
    <td height=30><p align=left>
    <a href=javascript:commitForECMA(callbackC,'content.jsp?tableId=24&tableName=TABLE24&tableView=GSP认证&Id=134476',null)>3.安徽徽润医药有限公司 (A-AH12-008)</p></td></tr>
<tr>
    <td height=1 background=images/data01_04.gif></td></tr>
     
<tr>
    <td height=30><p align=left>
    <a href=javascript:commitForECMA(callbackC,'content.jsp?tableId=24&tableName=TABLE24&tableView=GSP认证&Id=190077',null)>4.安徽中徽药业有限公司 (A-AH14-139)</p></td></tr>
<tr>
    <td height=1 background=images/data01_04.gif></td></tr>
     
<tr>
    <td height=30><p align=left>
    <a href=javascript:commitForECMA(callbackC,'content.jsp?tableId=24&tableName=TABLE24&tableView=GSP认证&Id=30882',null)>5.安徽徽源医药有限公司徽源大药房 (C-AH05-3402)</p></td></tr>
<tr>
    <td height=1 background=images/data01_04.gif></td></tr>
     
<tr>
    <td height=30><p align=left>
    <a href=javascript:commitForECMA(callbackC,'content.jsp?tableId=24&tableName=TABLE24&tableView=GSP认证&Id=67',null)>6.安徽省医药公司 (A-AH01-001)</p></td></tr>
<tr>
    <td height=1 background=images/data01_04.gif></td></tr>
     
<tr>
    <td height=30><p align=left>
    <a href=javascript:commitForECMA(callbackC,'content.jsp?tableId=24&tableName=TABLE24&tableView=GSP认证&Id=60661',null)>7.安徽安瑞药业有限公司 (A-AH09-006)</p></td></tr>
<tr>
    <td height=1 background=images/data01_04.gif></td></tr>
     
<tr>
    <td height=30><p align=left>
    <a href=javascript:commitForECMA(callbackC,'content.jsp?tableId=24&tableName=TABLE24&tableView=GSP认证&Id=187238',null)>8.安徽安瑞药业有限公司 (A-AH14-014)</p></td></tr>
<tr>
    <td height=1 background=images/data01_04.gif></td></tr>
     
<tr>
    <td height=30><p align=left>
    <a href=javascript:commitForECMA(callbackC,'content.jsp?tableId=24&tableName=TABLE24&tableView=GSP认证&Id=13307',null)>9.安徽省徽都药业有限公司永泰大药房 (C-AH04-1776)</p></td></tr>
<tr>
    <td height=1 background=images/data01_04.gif></td></tr>
     
<tr>
    <td height=30><p align=left>
    <a href=javascript:commitForECMA(callbackC,'content.jsp?tableId=24&tableName=TABLE24&tableView=GSP认证&Id=971',null)>10.安徽省徽都药业有限公司 (A-AH03-054)</p></td></tr>
<tr>
    <td height=1 background=images/data01_04.gif></td></tr>
     
<tr>
    <td height=30><p align=left>
    <a href=javascript:commitForECMA(callbackC,'content.jsp?tableId=24&tableName=TABLE24&tableView=GSP认证&Id=63071',null)>11.安徽省徽都药业有限公司 (A-AH09-021)</p></td></tr>
<tr>
    <td height=1 background=images/data01_04.gif></td></tr>
     
<tr>
    <td height=30><p align=left>
    <a href=javascript:commitForECMA(callbackC,'content.jsp?tableId=24&tableName=TABLE24&tableView=GSP认证&Id=190028',null)>12.安徽省徽都药业有限公司 (A-AH14-089)</p></td></tr>
<tr>
    <td height=1 background=images/data01_04.gif></td></tr>
     
<tr>
    <td height=30><p align=left>
    <a href=javascript:commitForECMA(callbackC,'content.jsp?tableId=24&tableName=TABLE24&tableView=GSP认证&Id=47032',null)>13.安徽方敏医药有限公司 (A-AH06-029)</p></td></tr>
<tr>
    <td height=1 background=images/data01_04.gif></td></tr>
     
<tr>
    <td height=30><p align=left>
    <a href=javascript:commitForECMA(callbackC,'content.jsp?tableId=24&tableName=TABLE24&tableView=GSP认证&Id=47037',null)>14.安徽维涛医药有限公司 (A-AH07-010)</p></td></tr>
<tr>
    <td height=1 background=images/data01_04.gif></td></tr>
     
<tr>
    <td height=30><p align=left>
    <a href=javascript:commitForECMA(callbackC,'content.jsp?tableId=24&tableName=TABLE24&tableView=GSP认证&Id=47038',null)>15.安徽谯陵医药有限公司 (A-AH07-011)</p></td></tr>
<tr>
    <td height=1 background=images/data01_04.gif></td></tr>
     
</table>
<table width=100% border=0 cellspacing=0 cellpadding=0>
<tr>
    <td>&nbsp;</td></tr>
</table>
<table width=700 border=0 cellspacing=0 cellpadding=0>
<tr>
    <td width=200 align=center>第 1 页 共517页 共7753条</td>
    <td width=30></td>

      <td width=80><img src=images/dataanniu_03.gif width=57 height=17></td>
      <td width=80><img src=images/dataanniu_05.gif width=57 height=17></td>

      <td width=80><img src=images/dataanniu_07.gif width=57 height=17 onclick=javascript:devPage(2) style=cursor:pointer></td>
      <td width=80><img src=images/dataanniu_09.gif width=57 height=17 onclick=javascript:devPage(517) style=cursor:pointer></td>

    
    
    <form action=javascript:goPage(517)>
    <td width=80>跳转
        <input name=goInt id=goInt type=text value=1 size=4></td>
    <td><input src=images/dataanniu_11.gif type=image width=37 height=17 onclick="javascript:goPage(517)"></td>
    </form></tr>
</table>
<table width=100% border=0 cellspacing=0 cellpadding=0>
<tr>
    <td>&nbsp;</td></tr>
</table>
<form method="post" id="pageForm" name="pageForm" action="search.jsp">
<input type="hidden" name="tableId"          value="24">
<input type="hidden" name="bcId"             value="118715593187347941914723540896">
<input type="hidden" name="curstart"         value="">
<input type="hidden" name="tableName"        value="TABLE24">
<input type="hidden" name="viewtitleName"    value="COLUMN159">
<input type="hidden" name="viewsubTitleName" value="COLUMN158">
<input type="hidden" name="keyword"          value="安徽">
<input type="hidden" name="tableView"        value="GSP认证">
<input type="hidden" name="cid"              value="0">
<input type="hidden" name="ytableId"         value="0">
<input type="hidden" name="searchType"       value="search">

</form>

推荐使用 Chrome Headless 来进行 Web2.0 网站的数据采集。Web2.0 的网站主要困难在与 HTML 代码是动态生成,对于 Python 语言,无法执行 JS~

可是 Chrome 来说,等待页面加载结束之后,调用 DOM.getOuterHTML 岂不美滋滋

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题