繁体   English   中英

Python从网页解析表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM