wake-up-neo.net

Kratzen und Analysieren der Google-Suchergebnisse mit Python

Ich habe ein Frage zur Realisierung einer allgemeinen Idee zum Durchsuchen und Speichern von Webseiten gefragt . Ein Teil der ursprünglichen Frage ist: Wie man viele "About" -Seiten aus dem Internet crawlt und speichert.

Mit einigen weiteren Nachforschungen hatte ich einige Möglichkeiten, sowohl beim Scraping als auch beim Parsen (weiter unten aufgeführt) vorzugehen.

Heute stieß ich auf ein anderes Ruby-Diskussion darüber, wie man aus den Google-Suchergebnissen kratzt. Dies ist eine großartige Alternative für mein Problem, die den ganzen Aufwand für das Crawlen von Teilen erspart.

Die neuen question sind: in Python scrape Google-Suchergebnisse für ein bestimmtes Keyword, in diesem Fall "About", und schließlich die Links zum weiteren Parsen erhalten .. _. Was sind die besten Optionen? von Methoden und Bibliotheken zum Weitermachen? (im Sinne von leicht erlernbar und leicht zu implementieren). 

p.s. In diese Website wird genau dasselbe implementiert, aber geschlossen und für mehr Ergebnisse nach Geld gefragt. Ich würde es am liebsten selbst machen, wenn keine Open-Source-Software verfügbar ist, und in der Zwischenzeit mehr Python lernen.

Ach ja, Ratschläge für das Parsing der Links aus den Suchergebnissen wären Nizza, wenn überhaupt. Trotzdem einfach zu erlernen und einfach zu implementieren. Ich habe gerade angefangen, Python zu lernen. : P


Finales Update, Problem gelöst. Code mit xgoogle. Bitte lesen Sie den Hinweis im nachfolgenden Abschnitt, damit xgoogle funktioniert.

import time, random
from xgoogle.search import GoogleSearch, SearchError

f = open('a.txt','wb')

for i in range(0,2):
    wt = random.uniform(2, 5)
    gs = GoogleSearch("about")
    gs.results_per_page = 10
    gs.page = i
    results = gs.get_results()
    #Try not to annnoy Google, with a random short wait
    time.sleep(wt)
    print 'This is the %dth iteration and waited %f seconds' % (i, wt)
    for res in results:
        f.write(res.url.encode("utf8"))
        f.write("\n")

print "Done"
f.close()

Hinweis auf xgoogle (unten beantwortet von Mike Pennington): Die neueste Version von Github funktioniert bereits standardmäßig nicht, aufgrund von Änderungen in den Google-Suchergebnissen. Diese beiden Antworten ( ab ) auf der Startseite des Tools geben eine Lösung und es arbeitet derzeit noch mit diesem Tweak. Aber vielleicht funktioniert es an einem anderen Tag aufgrund der Änderung/Blockierung von Google nicht mehr.


Bisher bekannte Ressourcen:

  • Für das Scraping scheint Scrapy eine beliebte Wahl zu sein und eine Web-App namens ScraperWiki ist sehr interessant und es gibt ein anderes Projekt -Extrahieren der Bibliothek für die Offline/lokale Verwendung. Mechanize wurde in verschiedenen Diskussionen auch ziemlich oft angesprochen.

  • Für das Analysieren von HTML scheint BeautifulSoup die beliebteste Wahl zu sein. Na sicher. lxml auch.

19
Flake

Sie können xgoogle nützlich finden ... vieles von dem, was Sie zu fragen scheinen, ist da ...

10
Mike Pennington

Dieser funktioniert gut für diesen Moment. Wenn eine Suche durchgeführt wird, kann der Scraper 100 Elemente dieser Suche abrufen, indem er mehrere Seiten durchläuft. Ich habe versucht, die Funktion zu verwenden, um den Code einwandfrei zu vervollständigen, aber die ipv4-Ausgabe erscheint und die Seite wird zu der mit captcha umgeleitet. Noch immer verwirrt, warum dieses funktioniert, aber wenn es in Funktion eingebunden ist, funktioniert es nicht mehr. Übrigens, der Scraper sieht etwas unbeholfen aus, weil ich in meinem Scraper zweimal dieselbe Schleife benutzt habe, damit er den Inhalt der ersten Seite nicht überspringen kann.

import requests ; from bs4 import BeautifulSoup

search_item = "Excel"
base = "http://www.google.de"
url = "http://www.google.de/search?q="+ search_item

response = requests.get(url)
soup = BeautifulSoup(response.text,"lxml")
for item in soup.select(".r a"):
    print(item.text)
for next_page in soup.select(".fl"):
    res = requests.get(base + next_page.get('href'))
    soup = BeautifulSoup(res.text,"lxml")
    for item in soup.select(".r a"):
        print(item.text)
1
SIM

Eine andere Möglichkeit, Google-Suchergebnisse mit Python) zu scrappen, ist die von ZenSERP .

Ich mag den API-First-Ansatz, der einfach zu verwenden ist und dessen JSON-Ergebnisse sich leicht in unsere Lösung integrieren lassen.

Hier ist ein Beispiel für eine curl -Anforderung:

curl "https://app.zenserp.com/api/search" -F "q=Pied Piper" -F "location=United States" -F "search_engine=google.com" -F "language=English" -H "apikey: APIKEY"

Und die Antwort:

{
  "q": "Pied Piper",
  "domain": "google.com",
  "location": "United States",
  "language": "English",
  "url": "https://www.google.com/search?q=Pied%20Piper&num=100&hl=en&gl=US&gws_rd=cr&ie=UTF-8&oe=UTF-8&uule=w+CAIQIFISCQs2MuSEtepUEUK33kOSuTsc",
  "total_results": 17100000,
  "auto_correct": "",
  "auto_correct_type": "",
  "results": []
}

Ein Python Code zum Beispiel:

import requests

headers = {
    'apikey': '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)
1
Johnny

Es gibt eine twill lib zum Emulieren des Browsers. Ich habe es verwendet, wenn ich mich bei Google E-Mail-Konto anmelden musste. Es ist zwar ein großartiges Werkzeug mit einer großartigen Idee, aber es ist ziemlich alt und scheint heutzutage keine Unterstützung zu bieten (die neueste Version wurde 2007 veröffentlicht) oder Authentifizierung. Wahrscheinlich ist twill eine der besten Optionen für diese Zwecke . Übrigens, es basiert auf mechanize.

Was das Parsen angeht, haben Sie Recht, BeautifulSoup und Scrapy sind großartig. Eines der coolsten Dinge hinter BeautifulSoup ist, dass es mit ungültigem HTML umgehen kann (im Gegensatz zu Genshi zum Beispiel).

1
ikostia

Werfen Sie einen Blick auf diesen fantastischen urllib-Wrapper für Web Scraping https://github.com/mattseh/python-web/blob/master/web.py

1
justinfay
from urllib.request import urlopen
from bs4 import BeautifulSoup
import urllib.request
import re

import numpy as np
count=0
query=input("query>>")
query=query.strip().split()
query="+".join(query)

html = "https://www.google.co.in/search?site=&source=hp&q="+query+"&gws_rd=ssl"
req = urllib.request.Request(html, headers={'User-Agent': 'Mozilla/5.0'})

soup = BeautifulSoup(urlopen(req).read(),"html.parser")

#Regex
reg=re.compile(".*&sa=")

links = []
#Parsing web urls
for item in soup.find_all('h3', attrs={'class' : 'r'}):
    line = (reg.match(item.a['href'][7:]).group())
    links.append(line[:-4])

print(links)

das sollte praktisch sein .... mehr dazu unter - https://github.com/goyal15rajat/Crawl-google-search.git

0
Rajat Goyal