yagooglesearch
adalah pustaka Python untuk menjalankan penelusuran Google yang cerdas, tampak realistis, dan dapat disesuaikan. Ini menyimulasikan perilaku penelusuran Google manusia nyata untuk mencegah pembatasan kecepatan oleh Google (respons HTTP 429 yang ditakuti), dan jika HTTP 429 diblokir oleh Google, logikanya akan mundur dan terus mencoba. Perpustakaan tidak menggunakan Google API dan sebagian besar didasarkan pada perpustakaan pencarian Google. Fitur-fiturnya antara lain:
requests
untuk permintaan HTTP dan manajemen cookieKode ini diberikan apa adanya dan Anda bertanggung jawab penuh atas cara penggunaannya. Menghapus hasil Google Penelusuran mungkin melanggar Persyaratan Layanan mereka. Pustaka pencarian Google Python lainnya memiliki beberapa informasi/diskusi menarik tentangnya:
Metode pilihan Google adalah menggunakan API mereka.
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 )
Meskipun pencarian Google melalui GUI akan menampilkan pesan seperti "Tentang 13.000.000 hasil", bukan berarti yagooglesearch
akan menemukan sesuatu yang mendekati itu. Pengujian menunjukkan bahwa paling banyak, sekitar 400 hasil dikembalikan. Jika Anda menyetel 400 < max_search_result_urls_to_return
, pesan peringatan akan dicetak ke log. Lihat #28 untuk diskusinya.
Rendah dan lambat adalah strategi saat melakukan pencarian Google menggunakan yagooglesearch
. Jika Anda mulai mendapatkan respons HTTP 429, Google berhak mendeteksi Anda sebagai bot dan akan memblokir IP Anda selama jangka waktu tertentu. yagooglesearch
tidak dapat melewati CAPTCHA, namun Anda dapat melakukannya secara manual dengan melakukan pencarian Google dari browser dan membuktikan bahwa Anda adalah manusia.
Kriteria dan ambang batas pemblokiran tidak diketahui, namun secara umum, mengacak agen pengguna, menunggu waktu yang cukup antara hasil pencarian halaman (7-17 detik), dan waktu menunggu yang cukup antara pencarian Google yang berbeda (30-60 detik) sudah cukup. Jarak tempuh Anda pasti akan bervariasi. Menggunakan perpustakaan ini dengan Tor kemungkinan besar akan membuat Anda diblokir dengan cepat.
Jika yagooglesearch
mendeteksi respons HTTP 429 dari Google, ia akan tidur selama http_429_cool_off_time_in_minutes
menit lalu coba lagi. Setiap kali HTTP 429 terdeteksi, waktu tunggu bertambah beberapa kali lipat http_429_cool_off_factor
.
Tujuannya adalah agar yagooglesearch
khawatir tentang deteksi dan pemulihan HTTP 429 dan tidak membebani skrip yang menggunakannya.
Jika Anda tidak ingin yagooglesearch
menangani HTTP 429 dan lebih memilih menanganinya sendiri, teruskan yagooglesearch_manages_http_429s=False
saat membuat instance objek yagooglesearch. Jika HTTP 429 terdeteksi, string "HTTP_429_DETECTED" ditambahkan ke objek daftar yang akan dikembalikan, dan terserah Anda tentang langkah selanjutnya yang harus dilakukan. Objek daftar akan berisi URL apa pun yang ditemukan sebelum HTTP 429 terdeteksi.
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
mendukung penggunaan proxy. Proksi yang disediakan digunakan untuk seluruh siklus hidup penelusuran agar terlihat lebih manusiawi, alih-alih memutar melalui berbagai proksi untuk bagian penelusuran yang berbeda. Siklus hidup pencarian secara umum adalah:
google.com
Untuk menggunakan proxy, berikan string proxy saat menginisialisasi objek yagooglesearch.SearchClient
:
client = yagooglesearch . SearchClient (
"site:github.com" ,
proxy = "socks5h://127.0.0.1:9050" ,
)
Skema proksi yang didukung didasarkan pada skema yang didukung di perpustakaan requests
Python (https://docs.python-requests.org/en/master/user/advanced/#proxies):
http
https
socks5
- "menyebabkan resolusi DNS terjadi pada klien, bukan pada server proxy." Anda mungkin tidak menginginkan ini karena semua pencarian DNS akan bersumber dari tempat yagooglesearch
dijalankan, bukan dari proxy.socks5h
- "Jika Anda ingin menyelesaikan domain di server proxy, gunakan kaus kaki5h sebagai skemanya." Ini adalah pilihan terbaik jika Anda menggunakan SOCKS karena pencarian DNS dan pencarian Google bersumber dari alamat IP proxy. Jika Anda menggunakan sertifikat yang ditandatangani sendiri untuk proksi HTTPS, Anda mungkin perlu menonaktifkan verifikasi SSL/TLS ketika:
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
Jika Anda ingin menggunakan beberapa proxy, beban tersebut ada pada skrip yang memanfaatkan perpustakaan yagooglesearch
untuk membuat instance objek yagooglesearch.SearchClient
baru dengan proxy yang berbeda. Di bawah ini adalah contoh perulangan daftar proxy:
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
Jika Anda memiliki nilai cookie GOOGLE_ABUSE_EXEMPTION
, nilai tersebut dapat diteruskan ke google_exemption
saat membuat instance objek SearchClient
.
Parameter &tbs=
digunakan untuk menentukan filter kata demi kata atau berdasarkan waktu.
&tbs=li:1
Filter waktu | &tbs= parameter URL | Catatan |
---|---|---|
Satu jam terakhir | qdr:h | |
Sehari yang lalu | qdr:d | 24 jam terakhir |
Minggu lalu | qdr:w | |
Bulan lalu | qdr:m | |
Tahun lalu | qdr:y | |
Kebiasaan | cdr:1,cd_min:1/1/2021,cd_max:6/1/2021 | Lihat fungsi yagooglesearch.get_tbs() |
Saat ini, fungsi .filter_search_result_urls()
akan menghapus url apa pun yang mengandung kata "google". Hal ini untuk mencegah URL pencarian yang dikembalikan tercemar dengan URL Google. Perhatikan hal ini jika Anda mencoba menelusuri secara eksplisit hasil yang mungkin memiliki "google" di URL-nya, seperti site:google.com computer
Didistribusikan di bawah Lisensi 3-Klausul BSD. Lihat LISENSI untuk informasi lebih lanjut.
@opsdisk
Tautan Proyek: https://github.com/opsdisk/yagooglesearch