[英]Python parsing a table from webpage
我正在尝试将此链接中的表解析为结构化数据类型,例如DataFrame或json或类似的东西。 但是,似乎我尝试过的所有方法都无法奏效,包括requests
pandas.read_html
。
最终我发现这是因为从网页获得的HTML在表中不包含信息。 例如,字符串"贵广转债"
显然存在于表主体中,但页面源中不存在(ctrl + F,它不提供匹配项)! 然而,这个字符串存在 ,当你点击右键并去Inspect
的细胞。
看来,如果我可以在“ Inspect -> Elements
面板中获取信息,则可以解析该表。 我怎样才能做到这一点?
对于使用ajax请求加载数据的动态页面,请尝试监视开发人员工具 (F12)中的“ 网络”选项卡 ,然后找到您需要的请求。
这里的报价器数据是从https://www.jisilu.cn/data/cbnew/cb_list/?___jsl=LST___t=1561977181934
请求的
POST https://www.jisilu.cn/data/cbnew/cb_list/?___jsl=LST___t=1561977181934
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-US,de-DE;q=0.7,en;q=0.3
Referer: https://www.jisilu.cn/data/cbnew/
X-Requested-With: XMLHttpRequest
Connection: keep-alive
Cookie: kbzw__Session=7n47d42nc28n259v722k8onhq5; kbz_newcookie=1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
fprice=&tprice=&volume=&svolume=&premium_rt=&ytm_rt=&rating_cd=&is_search=N&btype=&listed=Y&industry=&bond_ids=&rp=50&page=1
<> 2019-07-01T013533.200.json
然后,您可以使用requests
库或任何其他http客户端获取json(如果需要,请记住提供标头/ cookie),然后根据需要使用JSON。
使用信息,您可以利用requests
库,如下所示:
import requests
if __name__ == '__main__':
data = {
'fprice': '',
'tprice': '',
'volume': '',
'svolume': '',
'premium_rt': '',
'ytm_rt': '',
'rating_cd': '',
'is_search': 'N',
'btype': '',
'listed': 'Y',
'industry': '',
'bond_ids': '',
'rp': '50',
'page': '',
}
res = requests.post('https://www.jisilu.cn/data/cbnew/cb_list/?___jsl=LST___t=1561977181934',
data=data)
res.raise_for_status()
data = res.json()
print(data)
这会给您很大的清单:
{'page': 1, 'rows': [{'id': '110052', 'cell': {'bond_id': '110052', 'bond_nm': '贵广转债', 'stock_id': 'sh600996', 'stock_nm': '贵广 ... and goes on much longer
对于在动态更新/加载网页时进行抓取的情况,我建议在Python中使用“ Selenium”。 它将页面加载到浏览器中,并允许您从那里以编程方式与其进行交互。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.