【问题标题】:Scraping hidden content from a javascript webpage with python使用 python 从 javascript 网页中抓取隐藏的内容
【发布时间】:2017-03-23 22:20:39
【问题描述】:

我正在尝试从以下网站抓取内容:

https://mobile.admiral.at/en/event/event/all#/event/15a822ab-84a1-e511-90a2-000c297013a7

我之前已经使用 dryscrape 和以下代码成功抓取了内容:

import dryscrape
import webkit_server
from lxml import html

session = dryscrape.Session()
session.set_timeout(20)
session.set_attribute('auto_load_images', False)
session.visit('https://mobile.admiral.at/en/event/event/all#/event/15a822ab-84a1-e511-90a2-000c297013a7')
response = session.body()
tree = html.fromstring(response)

print(tree.xpath('(//td[@class="team-name"]/text())[1]'))

上面的示例将打印主队(在本例中为“France”)

好像源码结构变了,无法正常抓取内容。

让我感到困惑的是,我可以使用 Firefox Inspector 工具查看标签,但是当我拉取源代码时,它在响应中不可见。

我认为他们一定以某种方式隐藏了内容,以使 (?) 无法抓取数据。

有人可以指出正确的方向如何正确抓取内容。

【问题讨论】:

    标签: python web-scraping


    【解决方案1】:

    您需要的内容是使用 jQuery (Ajax) 加载的。不知道dryscrape最近有没有更新,但是我上次用的时候不支持从jQuery加载的ajax内容...

    无论如何.. 只要看看 chrome 的网络检查器,您就会发现主要内容是使用 API 加载的。你可以直接调用那个 API,你会得到一个包含页面所有数据的很棒的 JSON:

    import requests
    data = requests.get('https://mobile.admiral.at/;apiVer=json;api=main;jsonType=object;apiRw=1/en/api/event/get-event?id=15a822ab-84a1-e511-90a2-000c297013a7').json()
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2017-01-29
    • 2019-11-05
    • 2015-04-02
    相关资源
    最近更新 更多