как сравнить строку с объектом bs4 - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь создать программу, которая выбирает данные из Github, где в описании профиля Github должна быть какая-то строка.

Но я не могу использовать не в заявлении.

 git_url = "https://github.com:443/search?p=2&q="+str(payload)+"&type=Users"
    rr = requests.get(git_url, headers=headers, cookies=cookies)
    page =  bs4.BeautifulSoup(rr.text,"lxml")
    page_parse = page.select('.user-list-info p')
    for i in range(len(page_parse)):
        test =  page_parse[i].text
        var = '@Grab'
        if var not in test:
                print(page_parse[i].text)
        else:
                print('Not')

Хотя вывод не работает, он все еще показывает строку только с захватом, в то время как я хочу получить строку только с @grab. Вывод здесь

1 Ответ

0 голосов
/ 12 ноября 2018

Если вы хотите напечатать строки, которые содержат '@Grab' или '@ Grab', вы можете использовать:

test = page_parse[i].text
if ('@Grab' in test) or ('@ Grab' in test):
    print(test)

Или, если у вас есть много строк, которые вы хотите проверить, может быть проще поместить их в список, подобный этому:

test = page_parse[i].text
if any(item in test for item in ['@Grab', '@ Grab']):
    print(test)

Причина, по которой условие var or var2 in test всегда True, заключается в том, что Python анализирует это выражение как (var) or (var2 in test) (из-за приоритета оператора , поскольку in связывается более "плотно", чем or). Так как var является непустой строкой, она оценивается как True в логическом контексте. Итак

(var) or (var2 in test)

эквивалентно

True or (var2 in test)

, который всегда оценивается как True.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...