yagooglesearch
est une bibliothèque Python permettant d'exécuter des recherches Google intelligentes, réalistes et personnalisables. Il simule le véritable comportement de recherche humain de Google pour empêcher la limitation du débit par Google (la redoutable réponse HTTP 429), et si HTTP 429 est bloqué par Google, il est logique de reculer et de continuer à essayer. La bibliothèque n'utilise pas l'API Google et est fortement basée sur la bibliothèque googlesearch. Les fonctionnalités incluent :
requests
pour les requêtes HTTP et la gestion des cookiesCe code est fourni tel quel et vous êtes entièrement responsable de la manière dont il est utilisé. La suppression des résultats de recherche Google peut enfreindre leurs conditions d'utilisation. Une autre bibliothèque de recherche Python Google contenait des informations/discussions intéressantes :
La méthode préférée de Google consiste à utiliser son API.
pip install yagooglesearch
git clone https://github.com/opsdisk/yagooglesearch
cd yagooglesearch
virtualenv -p python3 .venv # If using a virtual environment.
source .venv/bin/activate # If using a virtual environment.
pip install . # Reads from pyproject.toml
import yagooglesearch
query = "site:github.com"
client = yagooglesearch . SearchClient (
query ,
tbs = "li:1" ,
max_search_result_urls_to_return = 100 ,
http_429_cool_off_time_in_minutes = 45 ,
http_429_cool_off_factor = 1.5 ,
# proxy="socks5h://127.0.0.1:9050",
verbosity = 5 ,
verbose_output = True , # False (only URLs) or True (rank, title, description, and URL)
)
client . assign_random_user_agent ()
urls = client . search ()
len ( urls )
for url in urls :
print ( url )
Même si une recherche sur Google via l'interface graphique affichera un message du type "Environ 13 000 000 de résultats", cela ne signifie pas que yagooglesearch
trouvera quelque chose de proche de cela. Les tests montrent qu'au maximum environ 400 résultats sont renvoyés. Si vous définissez 400 < max_search_result_urls_to_return
, un message d'avertissement sera imprimé dans les journaux. Voir #28 pour la discussion.
La stratégie utilisée est basse et lente lors de l'exécution de recherches Google à l'aide yagooglesearch
. Si vous commencez à recevoir des réponses HTTP 429, Google vous a détecté à juste titre en tant que robot et bloquera votre adresse IP pendant une période de temps définie. yagooglesearch
n'est pas capable de contourner CAPTCHA, mais vous pouvez le faire manuellement en effectuant une recherche Google à partir d'un navigateur et en prouvant que vous êtes un humain.
Les critères et les seuils de blocage sont inconnus, mais en général, la randomisation de l'agent utilisateur, l'attente suffisamment de temps entre les résultats de recherche paginés (7 à 17 secondes) et l'attente suffisamment de temps entre les différentes recherches Google (30 à 60 secondes) devraient suffire. Votre kilométrage variera certainement cependant. L’utilisation de cette bibliothèque avec Tor vous bloquera probablement rapidement.
Si yagooglesearch
détecte une réponse HTTP 429 de Google, il se mettra en veille pendant http_429_cool_off_time_in_minutes
minutes, puis réessayera. Chaque fois qu'un HTTP 429 est détecté, le temps d'attente augmente d'un facteur http_429_cool_off_factor
.
L'objectif est que yagooglesearch
se soucie de la détection et de la récupération HTTP 429 et ne charge pas le script qui l'utilise.
Si vous ne souhaitez pas que yagooglesearch
gère les HTTP 429 et préférez le gérer vous-même, transmettez yagooglesearch_manages_http_429s=False
lors de l'instanciation de l'objet yagooglesearch. Si un HTTP 429 est détecté, la chaîne "HTTP_429_DETECTED" est ajoutée à un objet de liste qui sera renvoyé, et c'est à vous de décider quelle doit être la prochaine étape. L'objet liste contiendra toutes les URL trouvées avant la détection du HTTP 429.
import yagooglesearch
query = "site:twitter.com"
client = yagooglesearch . SearchClient (
query ,
tbs = "li:1" ,
verbosity = 4 ,
num = 10 ,
max_search_result_urls_to_return = 1000 ,
minimum_delay_between_paged_results_in_seconds = 1 ,
yagooglesearch_manages_http_429s = False , # Add to manage HTTP 429s.
)
client . assign_random_user_agent ()
urls = client . search ()
if "HTTP_429_DETECTED" in urls :
print ( "HTTP 429 detected...it's up to you to modify your search." )
# Remove HTTP_429_DETECTED from list.
urls . remove ( "HTTP_429_DETECTED" )
print ( "URLs found before HTTP 429 detected..." )
for url in urls :
print ( url )
yagooglesearch
prend en charge l'utilisation d'un proxy. Le proxy fourni est utilisé pendant tout le cycle de vie de la recherche afin de lui donner un aspect plus humain, au lieu de passer par différents proxys pour différentes parties de la recherche. Le cycle de vie général de la recherche est :
google.com
Pour utiliser un proxy, fournissez une chaîne de proxy lors de l'initialisation d'un objet yagooglesearch.SearchClient
:
client = yagooglesearch . SearchClient (
"site:github.com" ,
proxy = "socks5h://127.0.0.1:9050" ,
)
Les schémas de proxy pris en charge sont basés sur ceux pris en charge dans la bibliothèque requests
Python (https://docs.python-requests.org/en/master/user/advanced/#proxies) :
http
https
socks5
- "fait en sorte que la résolution DNS se produise sur le client plutôt que sur le serveur proxy." Vous ne le souhaitez probablement pas , car toutes les recherches DNS proviendraient de l'endroit où yagooglesearch
est exécuté au lieu du proxy.socks5h
- "Si vous souhaitez résoudre les domaines sur le serveur proxy, utilisez chaussettes5h comme schéma." C'est la meilleure option si vous utilisez SOCKS, car la recherche DNS et la recherche Google proviennent de l'adresse IP du proxy. Si vous utilisez un certificat auto-signé pour un proxy HTTPS, vous devrez probablement désactiver la vérification SSL/TLS dans les cas suivants :
yagooglesearch.SearchClient
: import yagooglesearch
query = "site:github.com"
client = yagooglesearch . SearchClient (
query ,
proxy = "http://127.0.0.1:8080" ,
verify_ssl = False ,
verbosity = 5 ,
)
query = "site:github.com"
client = yagooglesearch . SearchClient (
query ,
proxy = "http://127.0.0.1:8080" ,
verbosity = 5 ,
)
client . verify_ssl = False
Si vous souhaitez utiliser plusieurs proxys, cette charge incombe au script utilisant la bibliothèque yagooglesearch
pour instancier un nouvel objet yagooglesearch.SearchClient
avec le proxy différent. Vous trouverez ci-dessous un exemple de parcours d'une liste de proxys :
import yagooglesearch
proxies = [
"socks5h://127.0.0.1:9050" ,
"socks5h://127.0.0.1:9051" ,
"http://127.0.0.1:9052" , # HTTPS proxy with a self-signed SSL/TLS certificate.
]
search_queries = [
"python" ,
"site:github.com pagodo" ,
"peanut butter toast" ,
"are dragons real?" ,
"ssh tunneling" ,
]
proxy_rotation_index = 0
for search_query in search_queries :
# Rotate through the list of proxies using modulus to ensure the index is in the proxies list.
proxy_index = proxy_rotation_index % len ( proxies )
client = yagooglesearch . SearchClient (
search_query ,
proxy = proxies [ proxy_index ],
)
# Only disable SSL/TLS verification for the HTTPS proxy using a self-signed certificate.
if proxies [ proxy_index ]. startswith ( "http://" ):
client . verify_ssl = False
urls_list = client . search ()
print ( urls_list )
proxy_rotation_index += 1
Si vous disposez d'une valeur de cookie GOOGLE_ABUSE_EXEMPTION
, elle peut être transmise à google_exemption
lors de l'instanciation de l'objet SearchClient
.
Le paramètre &tbs=
est utilisé pour spécifier des filtres verbatim ou temporels.
&tbs=li:1
Filtre temporel | &tbs= paramètre d'URL | Remarques |
---|---|---|
Heure passée | qdr:h | |
Jour passé | qdr:d | Dernières 24 heures |
La semaine dernière | qdr:w | |
Le mois dernier | qdr:m | |
Année passée | qdr:y | |
Coutume | cdr:1,cd_min:1/1/2021,cd_max:6/1/2021 | Voir la fonction yagooglesearch.get_tbs() |
Actuellement, la fonction .filter_search_result_urls()
supprimera toute URL contenant le mot « google ». Cela permet d'éviter que les URL de recherche renvoyées ne soient polluées par les URL de Google. Notez ceci si vous essayez de rechercher explicitement des résultats pouvant contenir « google » dans l'URL, tels que site:google.com computer
Distribué sous la licence BSD à 3 clauses. Voir LICENCE pour plus d’informations.
@opsdisk
Lien du projet : https://github.com/opsdisk/yagooglesearch