Python 我如何排除网页垃圾时的元组?

Python 我如何排除网页垃圾时的元组?,python,beautifulsoup,Python,Beautifulsoup,当我运行这段代码时,我会得到一个包含所有正确信息的列表。这样就行了,但我也从排除列表中得到了单词 是否有任何方法可以从输出中删除排他列表中的所有单词 from bs4 import BeautifulSoup url = 'https://www.finn.no/bap/forsale/search.html?category=0.93&product_category=2.93.3904.69&sub_category=1.93.3904' page = requests.ge

当我运行这段代码时,我会得到一个包含所有正确信息的列表。这样就行了,但我也从排除列表中得到了单词

是否有任何方法可以从输出中删除排他列表中的所有单词

from bs4 import BeautifulSoup
url = 'https://www.finn.no/bap/forsale/search.html?category=0.93&product_category=2.93.3904.69&sub_category=1.93.3904'
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
exclude = ('UTLEIE', 'Utleie', 'utleie', 'NIKON', 'Nikon', 'nikon' 'Leica', 'LEICA', 'leica', 'sony', 'SONY', 'Sony', 'Pentax', 'PENTAX', 'pentax', 'RF', 'iphone', 'android', 'Magic', 'MAGIC', 'magic')


def check_status(func):
    def verify(*args, **kwargs):
        if page.status_code != 200:
            return f'Error code: {page.status_code}'
        return func(*args, **kwargs)
    return verify

@check_status
def scrape_website():
    for i in soup.find_all('article',  {'class': 'ads__unit'}):
        for j in i.find('a', {'class': 'ads__unit__link'}):
            if any(s not in j.strip().lower() for s in exclude):
                print(j.strip())
scrape_website()
#---------------------------------------------------------------------------#
[Running] python -u "h:\webscrapfinn\tempCodeRunnerFile.py"
Canon efs 17-55 mm
Canon EF 50mm f/1.2L USM
Linser til mobiltelefon
Ricoh 50 mm f2 for Pentax speireflex, og Pentax til Sony E converter
nikon 14-24mm
TIL UTLEIE - Sigma 50mm 1.4 Art
Olympus M.Zuiko ED 14-150mm f/4-5.6
Sony 16-35mm F4
TIL UTLEIE - Canon 16-35mm F4 IS
Nikon 20mm 1.8
Fujinon 55-200mm

你写道:

if any(s not in j.strip().lower() for s in exclude):
    print(j.strip())
这是说“如果我的黑名单中的任何单词不在当前标签中,请打印标签”。按照这种逻辑,标签不会打印的唯一方式是如果标签中出现了所有被列入黑名单的单词

我可能会这样写:

if any(s in j.strip().lower() for s in exclude):
    continue
print(j.strip())
注意:print语句不在if语句中,但仍在内部for循环中。这样,只要您的黑名单中的任何一个单词出现在当前标记中,您就可以跳过当前标记并转到下一个标记。

您写道:

if any(s not in j.strip().lower() for s in exclude):
    print(j.strip())
这是说“如果我的黑名单中的任何单词不在当前标签中,请打印标签”。按照这种逻辑,标签不会打印的唯一方式是如果标签中出现了所有被列入黑名单的单词

我可能会这样写:

if any(s in j.strip().lower() for s in exclude):
    continue
print(j.strip())

注意:print语句不在if语句中,但仍在内部for循环中。这样,只要您的黑名单中的任何一个单词出现在当前标记中,您就可以跳过当前标记并移动到下一个标记。

编辑:因此“j”是来自webscraper模块的一串单词,因此,您需要将它们转换为单词列表,以检查是否有任何单词属于排除列表

在比较之前,您还需要“降低”排除列表中的所有单词。 将其列为一个列表,并从列表中将其转换为小写单词

将这两个列表转换为集合,可以使用集合操作进行比较

将两者交叉,检查是否有共同之处。如果没有,打印出来

只需删除该行:

if any(s not in j.strip().lower() for s in exclude):
和使用:

if not set(word.strip().lower().split()) & set(exclude):
基本上在代码中:

from bs4 import BeautifulSoup
import requests
url = 'https://www.finn.no/bap/forsale/search.html?category=0.93&product_category=2.93.3904.69&sub_category=1.93.3904'
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
exclude = ['UTLEIE', 'Utleie', 'utleie', 'NIKON', 'Nikon', 'nikon' 'Leica', 'LEICA', 'leica', 'sony', 'SONY', 'Sony', 'Pentax', 'PENTAX', 'pentax', 'RF', 'iphone', 'android', 'Magic', 'MAGIC', 'magic']

exclude = [x.lower() for x in exclude]


def check_status(func):
    def verify(*args, **kwargs):
        if page.status_code != 200:
            return f'Error code: {page.status_code}'
        return func(*args, **kwargs)
    return verify

@check_status
def scrape_website():
    for i in soup.find_all('article',  {'class': 'ads__unit'}):
        for word in i.find('a', {'class': 'ads__unit__link'}):
            if not set(word.strip().lower().split()) & set(exclude):
                print(word.strip())
scrape_website()

编辑:因此“j”是来自webscraper模块的一个字符串,因此您需要将它们转换为一个单词列表,以检查是否有任何单词属于排除列表

在比较之前,您还需要“降低”排除列表中的所有单词。 将其列为一个列表,并从列表中将其转换为小写单词

将这两个列表转换为集合,可以使用集合操作进行比较

将两者交叉,检查是否有共同之处。如果没有,打印出来

只需删除该行:

if any(s not in j.strip().lower() for s in exclude):
和使用:

if not set(word.strip().lower().split()) & set(exclude):
基本上在代码中:

from bs4 import BeautifulSoup
import requests
url = 'https://www.finn.no/bap/forsale/search.html?category=0.93&product_category=2.93.3904.69&sub_category=1.93.3904'
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
exclude = ['UTLEIE', 'Utleie', 'utleie', 'NIKON', 'Nikon', 'nikon' 'Leica', 'LEICA', 'leica', 'sony', 'SONY', 'Sony', 'Pentax', 'PENTAX', 'pentax', 'RF', 'iphone', 'android', 'Magic', 'MAGIC', 'magic']

exclude = [x.lower() for x in exclude]


def check_status(func):
    def verify(*args, **kwargs):
        if page.status_code != 200:
            return f'Error code: {page.status_code}'
        return func(*args, **kwargs)
    return verify

@check_status
def scrape_website():
    for i in soup.find_all('article',  {'class': 'ads__unit'}):
        for word in i.find('a', {'class': 'ads__unit__link'}):
            if not set(word.strip().lower().split()) & set(exclude):
                print(word.strip())
scrape_website()

当你说排除时,你的意思是你不想在输出中包含这些行项目,对吗?是的,这就是我的意思,sry代表糟糕的英语没有问题!我已经在下面为你回答了!让我知道这是否是你想要的。当你说排除时,你的意思是你不想要输出中的那些行项目,对吗?是的,这就是我的意思,sry代表糟糕的英语。没有问题!我已经在下面为你回答了!如果这是你想要的,请告诉我。它看起来不起作用,没有错误,但是仍然是相同的结果。它看起来不起作用,没有错误,但是仍然是相同的结果。它看起来不起作用,没有错误,但是仍然是相同的结果。检查代码后,我做了必要的修改。现在应该可以了。看起来没什么效果,没有错误,但是结果还是一样。在检查代码之后,我做了必要的修改。现在应该可以了。