yagooglesearch
هي مكتبة Python لتنفيذ عمليات بحث Google ذكية وواقعية المظهر وقابلة للضبط. إنه يحاكي سلوك بحث Google البشري الحقيقي لمنع تقييد المعدل بواسطة Google (استجابة HTTP 429 المخيفة)، وإذا تم حظر HTTP 429 بواسطة Google، فمن المنطقي التراجع ومواصلة المحاولة. لا تستخدم المكتبة Google API وتعتمد بشكل كبير على مكتبة googlesearch. وتشمل الميزات:
requests
لطلبات HTTP وإدارة ملفات تعريف الارتباطيتم توفير هذا الرمز كما هو وأنت مسؤول مسؤولية كاملة عن كيفية استخدامه. قد يؤدي حذف نتائج بحث Google إلى انتهاك شروط الخدمة الخاصة بهم. تحتوي مكتبة بحث Python Google الأخرى على بعض المعلومات/المناقشات المثيرة للاهتمام حولها:
الطريقة المفضلة لدى Google هي استخدام واجهة برمجة التطبيقات الخاصة بها.
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 )
على الرغم من أن البحث في Google من خلال واجهة المستخدم الرسومية سيعرض رسالة مثل "حوالي 13,000,000 نتيجة"، فإن هذا لا يعني أن yagooglesearch
سيعثر على أي شيء قريب من ذلك. يُظهر الاختبار أنه يتم إرجاع حوالي 400 نتيجة على الأكثر. إذا قمت بتعيين 400 < max_search_result_urls_to_return
، فستتم طباعة رسالة تحذير على السجلات. انظر رقم 28 للمناقشة.
تعتبر الإستراتيجية منخفضة وبطيئة عند تنفيذ عمليات بحث Google باستخدام yagooglesearch
. إذا بدأت في الحصول على استجابات HTTP 429، فقد اكتشفك Google بحق كروبوت وسيحظر عنوان IP الخاص بك لفترة زمنية محددة. لا يستطيع yagooglesearch
تجاوز اختبار CAPTCHA، ولكن يمكنك القيام بذلك يدويًا عن طريق إجراء بحث Google من المتصفح وإثبات أنك إنسان.
معايير وعتبات الحظر غير معروفة، ولكن بشكل عام، يجب أن يكون توزيع وكيل المستخدم بشكل عشوائي، والانتظار وقتًا كافيًا بين نتائج البحث المقسمة إلى صفحات (7-17 ثانية)، والانتظار وقتًا كافيًا بين عمليات بحث Google المختلفة (30-60 ثانية) كافيًا. سوف تختلف الأميال الخاصة بك بالتأكيد بالرغم من ذلك. من المحتمل أن يؤدي استخدام هذه المكتبة مع Tor إلى حظرك بسرعة.
إذا اكتشف yagooglesearch
استجابة HTTP 429 من Google، فسيظل في وضع السكون لمدة http_429_cool_off_time_in_minutes
دقيقة ثم حاول مرة أخرى. في كل مرة يتم اكتشاف HTTP 429، فإنه يزيد من وقت الانتظار بمعامل http_429_cool_off_factor
.
الهدف هو إثارة قلق yagooglesearch
بشأن اكتشاف HTTP 429 واستعادته وعدم وضع العبء على البرنامج النصي الذي يستخدمه.
إذا كنت لا تريد أن يتعامل yagooglesearch
مع HTTP 429s وتفضل التعامل معه بنفسك، فقم بتمرير yagooglesearch_manages_http_429s=False
عند إنشاء كائن yagooglesearch. إذا تم اكتشاف HTTP 429، فستتم إضافة السلسلة "HTTP_429_DETECTED" إلى كائن القائمة الذي سيتم إرجاعه، والأمر متروك لك بشأن الخطوة التالية. سيحتوي كائن القائمة على أي عناوين URL تم العثور عليها قبل اكتشاف 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
استخدام الوكيل. يتم استخدام الوكيل المقدم طوال دورة حياة البحث بالكامل لجعله يبدو أكثر إنسانية، بدلاً من التناوب عبر وكلاء مختلفين لأجزاء مختلفة من البحث. دورة حياة البحث العامة هي:
google.com
لاستخدام وكيل، قم بتوفير سلسلة وكيل عند تهيئة كائن yagooglesearch.SearchClient
:
client = yagooglesearch . SearchClient (
"site:github.com" ,
proxy = "socks5h://127.0.0.1:9050" ,
)
تعتمد أنظمة الوكيل المدعومة على تلك المدعومة في مكتبة requests
Python (https://docs.python-requests.org/en/master/user/advanced/#proxies):
http
https
socks5
- "يتسبب في حدوث تحليل DNS على العميل، وليس على الخادم الوكيل." من المحتمل أنك لا تريد ذلك نظرًا لأن جميع عمليات بحث DNS ستصدر من مكان تشغيل yagooglesearch
بدلاً من الوكيل.socks5h
- "إذا كنت تريد حل المجالات الموجودة على الخادم الوكيل، فاستخدم SOCKS5H كمخطط." هذا هو الخيار الأفضل إذا كنت تستخدم SOCKS لأن بحث DNS وبحث Google يتم الحصول عليهما من عنوان IP للوكيل. إذا كنت تستخدم شهادة موقعة ذاتيًا لوكيل HTTPS، فمن المحتمل أن تحتاج إلى تعطيل التحقق من SSL/TLS عندما:
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
إذا كنت تريد استخدام عدة وكلاء، فإن هذا العبء يقع على عاتق البرنامج النصي الذي يستخدم مكتبة yagooglesearch
لإنشاء كائن yagooglesearch.SearchClient
جديد باستخدام الوكيل المختلف. فيما يلي مثال على التكرار عبر قائمة الوكلاء:
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
إذا كانت لديك قيمة ملف تعريف الارتباط GOOGLE_ABUSE_EXEMPTION
، فيمكن تمريرها إلى google_exemption
عند إنشاء كائن SearchClient
.
يتم استخدام المعلمة &tbs=
لتحديد عوامل التصفية الحرفية أو المستندة إلى الوقت.
&tbs=li:1
مرشح الوقت | &tbs= معلمة URL | ملحوظات |
---|---|---|
الساعة الماضية | قدر: ح | |
اليوم الماضي | قدر: د | الـ 24 ساعة الماضية |
الاسبوع الماضي | قدر: ث | |
الشهر الماضي | قدر: م | |
العام الماضي | قدر:ذ | |
مخصص | cdr:1,cd_min:1/1/2021,cd_max:6/1/2021 | راجع وظيفة yagooglesearch.get_tbs() |
في الوقت الحالي، ستقوم الدالة .filter_search_result_urls()
بإزالة أي عنوان URL يحتوي على كلمة "google" بداخله. وذلك لمنع تلوث عناوين URL للبحث التي تم إرجاعها بعناوين URL الخاصة بـ Google. لاحظ ذلك إذا كنت تحاول البحث بشكل صريح عن النتائج التي قد تحتوي على كلمة "google" في عنوان URL، مثل site:google.com computer
يتم توزيعه بموجب ترخيص BSD المكون من 3 فقرات. راجع الترخيص لمزيد من المعلومات.
@opsdisk
رابط المشروع: https://github.com/opsdisk/yagooglesearch