如何用beautifulsoup刮一个隐藏的表

时间:2019-04-01 23:15:32

标签: python web-scraping beautifulsoup screen-scraping

这是关于使用beautifulsoup刮除隐藏的表。

如您在this website中所见,有一个按钮“ choisissez votreséance”,当我们单击它时,将显示一个表格。

当我单击检查表元素时,我可以看到包含诸如价格之类的属性的标签。但是,当我查看网站的源代码时,找不到此信息。

表'display:none'的代码中有一些影响,但我找不到解决方法。

1 个答案:

答案 0 :(得分:0)

页面似乎正在使用AJAX并在后台加载定价数据。使用Chrome浏览器,我按了F12键,然后在“网络”标签下浏览了一下。当我单击“ choisissez votreséance”按钮时,我注意到该地址的POST:

'https://www.ticketmaster.fr/fr/manifestation/holiday-on-ice-billet/idmanif/446304'

这对您来说是个好消息,因为您无需抓取HTML数据,只需向API提供ID(在页面源代码中)。

在下面的代码中我是

  1. 请求初始页面
  2. 收集cookie
  3. 发布我们收集的ID(数据)和cookie
  4. 返回进一步处理所需的JSON数据(变量J)

希望以下内容对您有所帮助!

干杯, 亚当


import requests
from bs4 import BeautifulSoup

h = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
s = requests.session()

initial_page_request = s.get('https://www.ticketmaster.fr/fr/manifestation/holiday-on-ice-billet/idmanif/446304',headers=h)

soup = BeautifulSoup(initial_page_request.text,'html.parser')
idseanc = soup.find("select",{"id":"sessionsSelect"})("option")[0]['value'].split("_")[1]

cookies = initial_page_request.cookies.get_dict()

headers = {
    'Origin': 'https://www.ticketmaster.fr',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
    'Content-Type': 'application/json; charset=UTF-8',
    'Accept': '*/*',
    'Referer': 'https://www.ticketmaster.fr/fr/manifestation/holiday-on-ice-billet/idmanif/446304',
    'X-Requested-With': 'XMLHttpRequest',
    'Connection': 'keep-alive',
}

data = {'idseanc':str(idseanc)}

response = s.post('https://www.ticketmaster.fr/planPlacement/FindPrices/connected/false/idseance/2870471', headers=headers, cookies=cookies, data=data)

j = response.json()