Python 如何限制刮削时的结果量

Python 如何限制刮削时的结果量,python,parsing,web-scraping,screen-scraping,Python,Parsing,Web Scraping,Screen Scraping,我试图刮一个网站和它的工作,但我想限制数量的结果出来。我该怎么做 req = requests.get('https://www.imdb.com/list/ls026573448/') soup2 = bs4.BeautifulSoup(req.text,) def pressed(self, instance): genre = self.genre.text if genre == 'Horror' or 'horror': soup2.select('h

我试图刮一个网站和它的工作,但我想限制数量的结果出来。我该怎么做

req = requests.get('https://www.imdb.com/list/ls026573448/')
soup2 = bs4.BeautifulSoup(req.text,)

def pressed(self, instance):
    genre = self.genre.text
    if genre == 'Horror' or 'horror':
        soup2.select('h3')
        for x in soup2.select('h3'):
            print(x.text)

当我运行这段代码时,大约会出现50个结果。如何将其限制为20或15?

下面是一个使用:has和:contains来隔离适当元素的示例,然后使用
limit
在20处停止(感谢@facelessuser指出这一点)。这与bs4.7.1是一致的

from bs4 import BeautifulSoup
import requests

r = requests.get('https://www.imdb.com/list/ls026573448/')
soup = bs(r.content, 'lxml')
films = [item.text for item in soup.select('.lister-item-header:has(~ p:has(.genre:contains("Horror"))) a', limit = 20)]
print(films)

是否要筛选结果?如果是,筛选的标准是什么?不,我不想筛选任何内容@AndrejKesely我只想得到前20个结果,而不是所有结果。因此,当您的结果在变量
results
(即列表)中时,例如,对于前20个结果,您可以对i执行
results[:20]
,在枚举中标记(soup2.select('h3'):if(i>25):break-else:print(tag.text)切片可能是浪费周期。相反,您应该输入
limit
soup.select('.lister项目标题:has(~p:has(.genre:contains(“Horror”))a',limit=20)
。这样做会导致搜索在达到限制后立即停止,而不是在找到所有匹配项后对其进行过滤。@facelessuser Marvelous。我不知道这一点。非常感谢。你打电话给我?我一定错过了,因为我在收件箱中没有看到任何通知。@QHarr嘿,我复制并粘贴了films变量和applie将它添加到我自己的代码中,但它不起作用,我仍然会得到运行我的代码的所有结果,正如上面所示。您将得到20个结果。