[英]How to solve a doubling problem when scraping with BeautifulSoup
我的腳本有一個奇怪的問題,它從網頁中提取了一些日期。
這是腳本:
# import library
import json
import re
import requests
from bs4 import BeautifulSoup
import datetime
# Request to website and dowload HTML contents
url = 'https://www.coteur.com/cotes-basket.php'
#page = requests.get(url)
response = requests.get(url)
#soup = BeautifulSoup(page.text, 'html.parser')
soup = BeautifulSoup(response.text, 'html.parser')
s = soup.find("table", id="mediaTable").find_all('script', type='application/ld+json')
date_hour = [json.loads(re.search(r'>(.+)<', str(j), re.S).group(1))["startDate"] for j in s]
#print(date_hour)
date_hour = [sub.replace("T", " ") for sub in date_hour]
print(len(date_hour))
print(date_hour)
此代碼是有效的。 它返回標簽腳本內的startDate
元素。 但是有一個日期加倍(在網頁中,我計算了 24 個籃子事件,但我的列表長度為 25)。 在網頁中,您可以看到從00:00
開始的 3 個事件,但我的腳本提取了00:00
的 4 個日期
也許您知道為什么該網站不顯示這些額外的條目?
也許您知道為什么該網站不顯示這些額外的條目?
它不顯示沒有賠率的地方。 這是由於一個腳本運行並從視圖中刪除了那些沒有幾率的腳本。 我認為目前這是由script:nth-child(25)
標識的腳本,它以$(document).on('click'
... 開頭。這對odds.length 進行了測試,如果為 0,則刪除行。
您可以通過禁用 javascript 並重新加載頁面進行測試。 您將獲得與您的 python 請求相同的結果(其中 js 不運行)。 該行存在。 重新啟用js,該行將消失。
您可以通過 Recontres(主表)查看給定比賽的賠率 > Cotes(另見預測)。 如果您在禁用 js 的情況下執行此操作,您可以按照所有比賽的 Recontres 鏈接查看是否有賠率。 在預測中,應該有基於賠率的計算,而不是兩者都為 0。
用BeautifulSoup刮痧時如何解決翻倍問題?
沒有辦法,從您收到的requests
的響應中可以區分頁面上將丟失的行。 我不確定您是否甚至可以提出額外的請求來檢查賠率信息,因為沒有 js 的所有人都缺少它。 您可能需要切換到 selenium/瀏覽器自動化。 那么你就根本不需要 BeautifulSoup 了。
有一個很小的外部機會,您可能會發現一個 API / 其他站點具有相同的可能性,並且您可以交叉引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.