По сути, на веб-сайте navigation
используется технология AJAX, которая достаточно быстра, как и при просмотре папки на локальном компьютере.
Поэтому data
, отображаемый в UI
(пользовательский интерфейс), на самом деле исходит из фона XHR запроса на указание c directory
внутри хоста, который marktwertetop
, где он использует AJAX
.
Я смог найти XHR
запрос, который был сделан к нему, затем я вызвал его напрямую с требуемым parameters
, пока зацикливался на pages
.
I Выяснилось, что разница между small
и large
фотографиями на самом деле одна location
из direction
, что составляет small
и header
, поэтому я заменил ее внутри самого url
.
Также я считал, что под antibiotic
защитой (meant) подразумевается requests.Session()
для поддержания Session
во время моих loop
и downloading
pics
, что означает предотвращение безопасности слоя TCP
с blocking/refusing/dropping
мой packet/request
а Scraping/Downloading
.
Представь, что ты уже откройте browser
, где вы переходите между одними и теми же website
страницами, есть созданное cookies
session
, которое established
, пока вы подключены к site
, и если idle
, то это refre sh сама.
Но то, как вы это делали, это просто вы открываете браузер, затем закрываете его, затем снова открываете и закрываете, И ТАК ВКЛЮЧЕНО ! где сторона server
считает это атакой DDOS
?! или поведение наводнения. и это очень основы firewall
действия.
import requests
from bs4 import BeautifulSoup
site = "https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop?ajax=yw1&page={}"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
}
def main(url):
with requests.Session() as req:
allin = []
for item in range(1, 21):
print(f"Collecting Links From Page# {item}")
r = req.get(url.format(item), headers=headers)
soup = BeautifulSoup(r.content, 'html.parser')
img = [item.get("src") for item in soup.findAll(
"img", class_="bilderrahmen-fixed")]
convert = [item.replace("small", "header") for item in img]
allin.extend(convert)
return allin
def download():
urls = main(site)
with requests.Session() as req:
for url in urls:
r = req.get(url, headers=headers)
name = url[52:]
name = name.split('?')[0]
print(f"Saving {name}")
with open(f"{name}", 'wb') as f:
f.write(r.content)
download()
ОБНОВЛЕНИЕ за комментарий пользователя:
import requests
from bs4 import BeautifulSoup
import csv
site = "https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop?ajax=yw1&page={}"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
}
def main(url):
with requests.Session() as req:
allin = []
names = []
for item in range(1, 21):
print(f"Collecting Links From Page# {item}")
r = req.get(url.format(item), headers=headers)
soup = BeautifulSoup(r.content, 'html.parser')
img = [item.get("src") for item in soup.findAll(
"img", class_="bilderrahmen-fixed")]
convert = [item.replace("small", "header") for item in img]
name = [name.text for name in soup.findAll(
"a", class_="spielprofil_tooltip")][:-5]
allin.extend(convert)
names.extend(name)
with open("data.csv", 'w', newline="", encoding="UTF-8") as f:
writer = csv.writer(f)
writer.writerow(["Name", "IMG"])
data = zip(names, allin)
writer.writerows(data)
main(site)
Вывод: просмотр онлайн