#python #python-3.x #beautifulsoup #web-crawler
#python #python-3.x #beautifulsoup #веб-сканер
Вопрос:
Прошло некоторое время, когда я не просматривал веб-страницы, и меня заблокировали на веб-сайте…
Если я проверю страницу с помощью chrome, я увижу все ссылки в исходном коде, но при использовании bs4 с python 3 суп не будет содержать никаких ссылок!
Поскольку я новичок в сканировании, я хотел бы, чтобы кто-нибудь объяснил мне, пожалуйста 🙂
Связано ли это с агентом? действительно ли невозможно обойти эту страницу?
import requests
from bs4 import BeautifulSoup
import re
url="https://www.pointdevente.parionssport.fdj.fr/grilles/resultats"
request_headers={'User-Agent': "(Mozilla/5.0 (Windows; U; Windows NT 6.0;en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6" }
r = requests.get(url,headers=request_headers)
req_txt=r.text
if r.status_code==200:
soup = BeautifulSoup(req_txt, u'html5lib')
print(soup.prettify())
links_pak=[url u'/' node.get(u'href') for node in soup.find_all(u'a')] #if node.get(u'href').endswith(ext)]
print("links : ",links_pak)
else:
print(r.status_code)
Редактировать: после некоторых исследований я обнаружил, что это связано с JS front code, поэтому я посмотрел на поведение сети и нашел несколько вызовов API, которые я смогу использовать для того, что мне нужно.
Итак, вот моя проблема со списком словарей, поэтому у меня есть код ниже :
import requests
from bs4 import BeautifulSoup
import re
url="https://www.pointdevente.parionssport.fdj.fr/api/loto-foot/list"
r = requests.get(url)
req_txt=r.text
if r.status_code==200:
print(r.json())
list_all=r.json()
else:
print(r.status_code)
Я просмотрел много документации и понимаю, как фильтровать dicts по значению ключа или посмотреть, есть ли значение в списке dicts, но я хотел бы проверить в моем списке dicts (например, list_all), есть ли кортеж key:value в dict, если это такизвлекайте данные только этого dict!
В моем примере, если вы запустите снипет кода, вы увидите, что в dicts есть ключ ‘SportID’, я хочу получать dicts только там, где ‘SportID: 100’ имеет значение true…Я немного запутался в понимании dict….
Спасибо за вашу помощь!
Комментарии:
1. Возможно, вам следует обратить внимание на полнофункциональный веб-браузер с автоматизацией ( selenium-python ?), Потому что многие веб-сайты получают данные через запросы JavaScript (XMLHttpRequest), которые может быть сложно получить с помощью
requests
/curl
/wget
. В вашем случае посмотрите на url pointdevente.parionssport.fdj.fr/api/loto-foot /…2. да, я узнал этот адрес api, я не знаю, буду ли я его использовать или будут только совпадения 🙂 Тем не менее, я не знаю, как выбрать полезные для меня словари: ((( Я отредактировал свой пост, чтобы объяснить более подробно.
Ответ №1:
Хорошо, после многих попыток с пониманием списка я узнал, как это сделать…
Итак, вот рабочий фрагмент кода :
import requests
from bs4 import BeautifulSoup
import re
url="https://www.pointdevente.parionssport.fdj.fr/api/loto-foot/list"
r = requests.get(url)
req_txt=r.text
if r.status_code==200:
list_all=r.json()
list_foot=[d for d in list_all if d['sportId']==100] #Filters foot results only
print(list_foot)
else:
print(r.status_code)