簡體   English   中英

用BeautifulSoup刮擦時如何解決翻倍問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM