私は最近、多くのpython=作業中のいくつかのプロジェクトに取り組むことを学んでいます。
現在、私はグーグル検索結果でいくつかのウェブスクレイピングを行う必要があります。 ajax google apiを使用して検索する方法を示すサイトをいくつか見つけましたが、それを使用しようとした後、サポートされなくなったようです。助言がありますか?
私は方法を見つけるためにかなり長い間探していましたが、現在機能する解決策を見つけることができません。
Googleの検索結果はいつでも直接スクレイピングできます。これを行うには、URL https://google.com/search?q=<Query>
これは、上位10件の検索結果を返します。
次に、たとえば、ページを解析するために lxml を使用できます。使用するものに応じて、CSS-Selector(.r a
)またはXPath-Selector(//h3[@class="r"]/a
)
場合によっては、結果のURLはGoogleにリダイレクトされます。通常、実際のリクエストURLを含むクエリパラメータq
が含まれます。
Lxmlとリクエストを使用したコードの例:
from urllib.parse import urlencode, urlparse, parse_qs
from lxml.html import fromstring
from requests import get
raw = get("https://www.google.com/search?q=StackOverflow").text
page = fromstring(raw)
for result in page.cssselect(".r a"):
url = result.get("href")
if url.startswith("/url?"):
url = parse_qs(urlparse(url).query)['q']
print(url[0])
GoogleがIPを禁止することに関する注意:私の経験では、検索リクエストでGoogleにスパムを送信し始めた場合にのみ、Googleが禁止します。 Googleがあなたをボットだと思った場合、503で応答します。
これは、SERPをスクレイピングするために使用できる別のサービスです( https://zenserp.com )これは、クライアントを必要とせず、より安価です。
pythonコードサンプル:
import requests
headers = {
'apikey': '',
}
params = (
('q', 'Pied Piper'),
('location', 'United States'),
('search_engine', 'google.com'),
('language', 'English'),
)
response = requests.get('https://app.zenserp.com/api/search', headers=headers, params=params)
Google検索エンジンの結果である Serp API のようなサードパーティのサービスを使用することもできます。ブロックされるという問題を解決し、プロキシを借りて結果を自分で解析する必要がなくなります。
Pythonとの統合は簡単です。
from lib.google_search_results import GoogleSearchResults
params = {
"q" : "Coffee",
"location" : "Austin, Texas, United States",
"hl" : "en",
"gl" : "us",
"google_domain" : "google.com",
"api_key" : "demo",
}
query = GoogleSearchResults(params)
dictionary_results = query.get_dictionary()
GitHub: https://github.com/serpapi/google-search-results-python