Python webScraping - Betclic URL's
Python webScraping - Betclic URL's
编辑:
所以我找到了一种方法,通过单击“国家/地区”元素来实现,请参阅我的答案。
还有一个问题可以使这个更好:
当我在一个国家 <li>
上执行 scrollIntoView(true) 时,它进入另一个元素 (<div class="sportList_subtitle">Desportos</div>
) 并且不可点击。
是否有一些 javascript 或像“scrollIntoClickable”这样的 selenium 函数?
原文:
我正在尝试使用 python 和 BeautifulSoup + Selenium 从 Betclic 网站抓取信息。
鉴于每个游戏的 URL 具有结构:“域”/“sports_url”/“competition_url”/“match_url”
示例:https://www.betclic.pt/futebol-s1/liga-dos-campeoes-c8/rennes-chelsea-m2695669
您可以尝试使用您的语言,他们翻译实际的 URL 字符串,但结构和 ID 是相同的。
唯一剩下的就是抓住所有不同的“competition_url”
所以我现在的问题是来自“sports_url”(https://www.betclic.pt/futebol-s1)我怎样才能得到所有子“competition_url”?
问题出在左侧面板上每个国家/地区名称下方的“隐藏”URL。只有在您单击每个国家/地区名称旁边的箭头后,它们才会出现,就像一个下拉列表。单击事件实际上为该国家/地区的 <li>
添加了一个 class“处于活动状态”,并且
<li>
末尾的 <ul>
。这是添加的 <ul>
,其中包含我要获取的 URL 的列表。
点击前代码:
<!---->
<li class="sportList_item has-children ng-star-inserted" routerlinkactive="active-link" id="rziat-DE">
<div class="sportList_itemWrapper prebootFreeze">
<div class="sportlist_icon flagsIconBg is-DE"></div>
<div class="sportlist_name">Alemanha</div>
</div>
<!---->
</li>
点击后的代码(为演示而缩减):
<li class="sportList_item has-children ng-star-inserted is-active" routerlinkactive="active-link" id="rziat-DE">
<div class="sportList_itemWrapper prebootFreeze">
<div class="sportlist_icon flagsIconBg is-DE"></div>
<div class="sportlist_name">Alemanha</div>
</div>
<!---->
<ul class="sportList_listLv2 ng-star-inserted">
<!---->
<li class="sportList_item ng-star-inserted" routerlinkactive="active-link">
<a class="sportList_itemWrapper prebootFreeze" id="competition-link-5" href="/futebol-s1/alemanha-bundesliga-c5">
<div class="sportlist_icon"></div>
<div class="sportlist_name">Alemanha - Bundesliga</div>
</a>
</li>(...)
</li>(...)
</li>(...)
</li>
</ul>
</li>
在此示例中,我要查找的是“/futebol-s1/alemanha-bundesliga-c5”。
有没有办法获得所有这些 URL?还是“隐藏”<ul>
?
也许是一种模拟点击并再次解析 HTML 代码的方法?
提前致谢!
所以我找到了一种通过单击“国家/地区”元素来完成此操作的方法。
还有一个问题可以使这个更好:
当我在一个国家 <li>
上执行 scrollIntoView(true) 时,它进入另一个元素 (<div class="sportList_subtitle">Desportos</div>
) 并且不可点击。
是否有一些 javascript 或像“scrollIntoClickable”这样的 selenium 函数?
我现在做的怎么样:
driver = webdriver.Chrome(ChromeDriverManager().install())
url = "https://www.betclic.pt/"
driver.get(url)
link_set = set()
all_sports = driver.find_element_by_css_selector(
("body > app-desktop > div.layout > div > app-left-menu > div >"
" app-sports-nav-bar > div > div:nth-child(2) > ul")
).find_elements_by_tag_name("li")
try:
cookies = driver.find_element_by_css_selector("body > app-desktop > bc-gb-cookie-banner > div > div > button")
cookies.click()
except:
print("Cookie error or not found...")
for sport in all_sports:
sport.click()
has_container = driver.find_element_by_tag_name("app-block-ext").size.get('height')>0
if not has_container:
for competition in driver.find_elements_by_css_selector("a[id*='block-link-']"):
link_set.add(competition.get_attribute("href"))
driver.execute_script("arguments[0].scrollIntoView(true);", competition)
else:
driver.execute_script("arguments[0].scrollIntoView(true);", driver.find_element_by_tag_name("app-block-ext"))
all_countries = driver.find_elements_by_css_selector("li[id^='rziat']")
for country in all_countries:
country.click()
competitions = driver.find_elements_by_css_selector("a[id^='competition-link']")
for element in competitions:
link_set.add(element.get_attribute("href"))
driver.execute_script("arguments[0].scrollIntoView(true);", country)
for link in sorted(link_set):
print(link)
编辑:
所以我找到了一种方法,通过单击“国家/地区”元素来实现,请参阅我的答案。
还有一个问题可以使这个更好:
当我在一个国家 <li>
上执行 scrollIntoView(true) 时,它进入另一个元素 (<div class="sportList_subtitle">Desportos</div>
) 并且不可点击。
是否有一些 javascript 或像“scrollIntoClickable”这样的 selenium 函数?
原文:
我正在尝试使用 python 和 BeautifulSoup + Selenium 从 Betclic 网站抓取信息。
鉴于每个游戏的 URL 具有结构:“域”/“sports_url”/“competition_url”/“match_url”
示例:https://www.betclic.pt/futebol-s1/liga-dos-campeoes-c8/rennes-chelsea-m2695669
您可以尝试使用您的语言,他们翻译实际的 URL 字符串,但结构和 ID 是相同的。
唯一剩下的就是抓住所有不同的“competition_url”
所以我现在的问题是来自“sports_url”(https://www.betclic.pt/futebol-s1)我怎样才能得到所有子“competition_url”?
问题出在左侧面板上每个国家/地区名称下方的“隐藏”URL。只有在您单击每个国家/地区名称旁边的箭头后,它们才会出现,就像一个下拉列表。单击事件实际上为该国家/地区的 <li>
添加了一个 class“处于活动状态”,并且
<li>
末尾的 <ul>
。这是添加的 <ul>
,其中包含我要获取的 URL 的列表。
点击前代码:
<!---->
<li class="sportList_item has-children ng-star-inserted" routerlinkactive="active-link" id="rziat-DE">
<div class="sportList_itemWrapper prebootFreeze">
<div class="sportlist_icon flagsIconBg is-DE"></div>
<div class="sportlist_name">Alemanha</div>
</div>
<!---->
</li>
点击后的代码(为演示而缩减):
<li class="sportList_item has-children ng-star-inserted is-active" routerlinkactive="active-link" id="rziat-DE">
<div class="sportList_itemWrapper prebootFreeze">
<div class="sportlist_icon flagsIconBg is-DE"></div>
<div class="sportlist_name">Alemanha</div>
</div>
<!---->
<ul class="sportList_listLv2 ng-star-inserted">
<!---->
<li class="sportList_item ng-star-inserted" routerlinkactive="active-link">
<a class="sportList_itemWrapper prebootFreeze" id="competition-link-5" href="/futebol-s1/alemanha-bundesliga-c5">
<div class="sportlist_icon"></div>
<div class="sportlist_name">Alemanha - Bundesliga</div>
</a>
</li>(...)
</li>(...)
</li>(...)
</li>
</ul>
</li>
在此示例中,我要查找的是“/futebol-s1/alemanha-bundesliga-c5”。
有没有办法获得所有这些 URL?还是“隐藏”<ul>
?
也许是一种模拟点击并再次解析 HTML 代码的方法?
提前致谢!
所以我找到了一种通过单击“国家/地区”元素来完成此操作的方法。
还有一个问题可以使这个更好:
当我在一个国家 <li>
上执行 scrollIntoView(true) 时,它进入另一个元素 (<div class="sportList_subtitle">Desportos</div>
) 并且不可点击。
是否有一些 javascript 或像“scrollIntoClickable”这样的 selenium 函数?
我现在做的怎么样:
driver = webdriver.Chrome(ChromeDriverManager().install())
url = "https://www.betclic.pt/"
driver.get(url)
link_set = set()
all_sports = driver.find_element_by_css_selector(
("body > app-desktop > div.layout > div > app-left-menu > div >"
" app-sports-nav-bar > div > div:nth-child(2) > ul")
).find_elements_by_tag_name("li")
try:
cookies = driver.find_element_by_css_selector("body > app-desktop > bc-gb-cookie-banner > div > div > button")
cookies.click()
except:
print("Cookie error or not found...")
for sport in all_sports:
sport.click()
has_container = driver.find_element_by_tag_name("app-block-ext").size.get('height')>0
if not has_container:
for competition in driver.find_elements_by_css_selector("a[id*='block-link-']"):
link_set.add(competition.get_attribute("href"))
driver.execute_script("arguments[0].scrollIntoView(true);", competition)
else:
driver.execute_script("arguments[0].scrollIntoView(true);", driver.find_element_by_tag_name("app-block-ext"))
all_countries = driver.find_elements_by_css_selector("li[id^='rziat']")
for country in all_countries:
country.click()
competitions = driver.find_elements_by_css_selector("a[id^='competition-link']")
for element in competitions:
link_set.add(element.get_attribute("href"))
driver.execute_script("arguments[0].scrollIntoView(true);", country)
for link in sorted(link_set):
print(link)