如何将字符串与bs4对象进行比较

时间:2018-11-11 21:49:23

标签: python beautifulsoup

我正在尝试创建一个从Github获取数据的程序,该程序的Github配置文件描述中应包含一些字符串。

但是我无法使用not in statement。

 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获取字符串。 Output Here

1 个答案:

答案 0 :(得分:1)

如果要打印包含'@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)(由于operator precedence,因为in绑定了更多“紧密地”比or)。由于var是一个非空字符串,因此在布尔上下文中其值为True。所以

(var) or (var2 in test)

等同于

True or (var2 in test)

,其总值为True