使用python从javascript网页抓取隐藏的内容

时间:2016-06-09 15:26:43

标签: python web-scraping

我试图从以下网站上删除内容:

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工具查看标签,但是当我拉动源时,它在响应中不可见。

我认为他们必须以某种方式隐藏内容,以便不可能(?)刮掉数据。

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

1 个答案:

答案 0 :(得分: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()