Vous faites chier avec vos trucs genre Anubis qui cassent mes petits scrapers python :(
Là, je voulais gentiment scraper les missions sur le Fandom de Cyberpunk 2077 pour pouvoir faire mon arbre de mission.
Et pouf, on se fait rembarrer parce qu'on utilise pas un vrai navigateur :
$ curl -v https://cyberpunk.fandom.com/wiki/Cyberpunk_2077_Main_Jobs
> Host: cyberpunk.fandom.com
> User-Agent: curl/8.18.0
> Accept: */*
>
< HTTP/2 403
Dans ces cas là, pas le choix, Selenium WebDriver.
WebDriver est lib multilangage pour contrôler un navigateur web tel que firefox ou chrome.
Minimal Viable Product®
#!/usr/bin/env python3
from pathlib import Path
from selenium import webdriver
from selenium.webdriver.common.by import By
def main():
output_dir = Path("html")
output_dir.mkdir(exist_ok=True)
driver = webdriver.Firefox()
driver.get("https://cyberpunk.fandom.com/wiki/Cyberpunk_2077_Main_Jobs")
links = [
(link.get_attribute("title"), link.get_attribute("href"))
for link in driver.find_elements(By.CSS_SELECTOR, ".navbox li a")
]
for link_title, link_href in links:
page_file = output_dir / f"{link_title}.html"
if page_file.exists():
print(f"{link_title} already exists, skipping")
continue
print(f"Saving {link_title} from {link_href}")
driver.get(link_href)
content_node = driver.find_element(By.CSS_SELECTOR, ".mw-parser-output")
page_file.write_text(content_node.get_attribute("outerHTML"))
driver.quit()
if __name__ == "__main__":
main()
j'trouve ça moins élégant que Hishel. Mais bon.


Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.