Пустой объект, возвращенный в методе BeautifulSoup find_all с использованием селектора CSS - PullRequest
0 голосов
/ 17 мая 2018

Я использую модуль запросов в 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")
...