刮除只返回一个值

时间:2018-11-09 20:49:05

标签: python python-3.x

我想刮一些东西作为我的第一个程序,只是为了真正地学习基础知识,但是我很难显示出多个结果。

前提是要去一个论坛(http://blackhatworld.com),抓取所有线程标题并与字符串进行比较。如果包含“免费”一词,它将打印出来,否则将不会打印。

这是当前代码:

import requests
from bs4 import BeautifulSoup


page = requests.get('https://www.blackhatworld.com/')
content = BeautifulSoup(page.content, 'html.parser')
threadtitles = content.find_all('a', class_='PreviewTooltip')


n=0
for x in range(len(threadtitles)):
    test = list(threadtitles)[n]
    test2 = list(test)[0]
    if test2.find('free') == -1:
        n=n+1
    else:
        print(test2)
        n=n+1

这是运行程序的结果: https://i.gyazo.com/6cf1e135b16b04f0807963ce21b2b9be.png

如您所见,它正在检查“免费”一词,它可以工作,但仅显示第一个结果,而页面中还有其他几个结果。

2 个答案:

答案 0 :(得分:1)

默认情况下,字符串比较区分大小写(FREE != free)。要解决您的问题,首先需要将test2小写:

test2 = list(test)[0].lower()

答案 1 :(得分:1)

要解决您的问题并简化代码,请尝试以下操作:

import requests
from bs4 import BeautifulSoup

page = requests.get('https://www.blackhatworld.com/')
content = BeautifulSoup(page.content, 'html.parser')
threadtitles = content.find_all('a', class_='PreviewTooltip')

count = 0

for title in threadtitles:
    if "free" in title.get_text().lower():
        print(title.get_text())
    else:
        count += 1

print(count)

奖金:打印值href

for title in threadtitles:
    print(title["href"])

另请参阅this