从JavaScript的网页刮隐藏的内容与Python
问题描述:
我试图刮掉从以下网站内容:从JavaScript的网页刮隐藏的内容与Python
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]'))
上面的例子会打印出主队(在这种情况下,将“法国”)
似乎源的结构已经改变了,所以我无法正确地抓取内容。
让我困惑的是,我能够使用Firefox Inspector工具查看标签,但是当我拉动源代码时,它在响应中不可见。
我认为他们必须以某种方式隐藏内容,以使其无法(?)刮取数据。
难道有人请指出我正确的方向如何正确地刮内容。
答
您需要的内容是使用jQuery(Ajax)加载的。我不知道最近dryscrape是否已经更新,但是最后一次我使用它不支持从jQuery加载的ajax内容...
无论如何..只要看看铬的网络检查员,你会意识到主要内容是使用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()