因此,作為我一直試圖抓取的網站的序言,我似乎擁有/使用(我不確定與網絡開發等相關的行話)javascript代碼,并且我在嘗試抓取不同的表格時取得了不同的成功在不同的頁面上。例如在這個頁面上:http://www.tennisabstract.com/cgi-bin/player.cgi ?p=NovakDjokovic 我很容易就能“檢查元素”,然后找到Network腳本的正確“名稱”,然后找到我需要的請求 URL 來獲取我想要的表。我為此使用的代碼是:url = 'http://www.minorleaguesplits.com/tennisabstract/cgi-bin/frags/NovakDjokovic.js'content = requests.get(url)
soup = BeautifulSoup(content.text, 'html.parser')
table = soup.find('table', id='tour-years', attrs= {'class':'tablesorter'})
dfs = pd.read_html(str(table))
df = pd.concat(dfs)但是,現在當我查看同一站點上的不同頁面時,比如這個http://www.tennisabstract.com/charting/20190714-M-Wimbledon-F-Roger_Federer-Novak_Djokovic.html,我無法找到允許我最終獲得我想要的表的請求 URL。.js我重復了與上面相同的過程,但在具有該表的網絡選項卡下沒有腳本。當我查看 html 元素時,我確實看到了表格,但是如果沒有正確的 url,我當然無法獲得它。所以我的問題是,如何從此頁面http://www.tennisabstract.com/charting/20190714-M-Wimbledon-F-Roger_Federer-Novak_Djokovic.html獲取表格?
1 回答

森欄
TA貢獻1810條經驗 獲得超5個贊
查看html頁面的源代碼,您可以看到所有數據都已經加載到腳本標簽中。您唯一需要的是提取變量值并將其加載到 beautifulsoup。
以下代碼給出了腳本標簽中的所有變量和值
import requests, re
from bs4 import BeautifulSoup
res = requests.get("http://www.tennisabstract.com/charting/20190714-M-Wimbledon-F-Roger_Federer-Novak_Djokovic.html")
soup = BeautifulSoup(res.text, "lxml")
script = soup.find("script", attrs={"language":"JavaScript"}).text
var_only = script[:script.index("$(document)")].strip()
接下來,您可以使用正則表達式獲取變量值 - https://regex101.com/r/7cE85A/1
添加回答
舉報
0/150
提交
取消