Я использую модуль запросов в Python для входа на страницу результатов.Оттуда я хочу, чтобы программа напечатала мое имя, метки и т. Д. На терминале с помощью bs4.При использовании name = soupe.find_all("td", {"class": "celldata"})
или
names = soupe.find_all(class_="celldata")
код работает отлично.Но когда я копирую селектор CSS для моего имени, то есть
namess = soupe.find_all(r'body > table > tbody > tr:nth-of-type(4) > td > div:nth-of-type(1) > table > tbody > tr:nth-of-type(2) > td:nth-of-type(3)')
Это вернуло пустой объект.Я думаю, что это должно было вернуть мое имя.В чем проблема с этим способом?Кроме того, кто-то может сказать мне, когда использовать CSS-селекторы, а когда делать это вручную.
Другая проблема, с которой я столкнулся, заключалась в том, что в методе post я указывал URL-адрес веб-сайта, на котором мне нужно было заполнить форму, т.е.
http://kvpy.iisc.ernet.in/kvpy-1415/checkMarks.php
тогда программа не работала.Мне пришлось изменить его на URL страницы, которая содержала имя и ранг учащегося и т. Д., Например,
http://kvpy.iisc.ernet.in/kvpy-1415/checkMarksSuccess.php
, который появляется после заполнения формы.почему это произошло?
Вот полный код:
import requests
import bs4
s = requests.Session()
payload = {'id': '15015556', 'dd' : '25', 'mm' : '09', 'yyyy' : '1998'}
r = s.post(r'http://kvpy.iisc.ernet.in/kvpy-1415/checkMarksSuccess.php', payload)
if (r.text.find("Name of the Candidate")) >= 0:
soupe = bs4.BeautifulSoup(r.content, "lxml")
name = soupe.findAll("td", {"class": "celldata"})
names = soupe.find_all(class_="celldata")
namess = soupe.find_all(r'body > table > tbody > tr:nth-of-type(4) > td > div:nth-of-type(1) > table > tbody > tr:nth-of-type(2) > td:nth-of-type(3)')
print (namess)
'''for n in name:
print(n.get_text())'''
else:
print("failure")