Le but de mon script Python est de rechercher quelques chaînes différentes dans le code HTML de quelques sites Web, s'il trouve l'une des chaînes, il retournera un drapeau True.

Code:

import operator
import requests
import threading

# search for any of these items
search_for = ['about me', 'home page', 'website', 'submit your link', 'add a link']

# threads
threads = []

def send_get_request(link, search_for):
    try:
        html = requests.get(link)
    except requests.exceptions.RequestException as e:
        return False, e
    text = html.text.lower()
    if any(operator.contains(text, keyword.lower()) for keyword in search_for):
        return (True, link)
    else:
        return (False, link)


def process_result(result):
    if True in result:
        with open("potentialLinks.txt", "a") as file:
            file.write('{}\n'.format(str(result)))
            print("Success: {}".format(str(result)))
    else:
        print("Failed: {}".format(str(result)))


def main():
    # open and loop the links
    with open("profiles.txt", "r") as links:
        for link in links:
            link = link.strip()
            results = send_get_request(link, search_for)
            process_result(results)


# entry point ...
if __name__ == '__main__':
    main()

Ce qui me pose problème, c'est:

if any(operator.contains(text, keyword.lower()) for keyword in search_for): 

Lorsqu'il trouve un mot-clé dans le html, est-il possible pour moi de retourner lequel des mots-clés qu'il a trouvé pour déclencher le drapeau True?

Je ne peux pas penser à la meilleure façon de le faire, plus que probablement je pense à quelque chose de petit, merci pour toute aide à ce sujet.

1
willerson 17 mars 2019 à 19:53

2 réponses

Meilleure réponse
import operator
search_for = ['cat', 'mouse']

text = "I want to kill my cat"
keywords = [kw for kw in search_for if operator.contains(text.lower(), kw.lower())]
print(keywords)

text = "I want to kill my cat because it ate my mouse"
keywords = [kw for kw in search_for if operator.contains(text.lower(), kw.lower())]
print(keywords)

Production:

['cat']
['cat', 'mouse']

Vous pouvez vérifier une correspondance en vérifiant que la longueur de la liste de sortie est> 0

1
Steve 17 mars 2019 à 17:06
found = None 
for keyword in ["apple" ,"cat"]:
     if keyword.lower() in "this is a cat and this is not":
          found = keyword
          break

Et si vous voulez tous les mots clés correspondants, utilisez

[keyword for keyword in ["apple" ,"cat"] if keyword.lower() in "this is a cat and this is not an apple"]
1
mujjiga 17 mars 2019 à 17:07