python - spider - web scraping tutorial
Cómo raspar y analizar los resultados de búsqueda de Google usando Python (5)
Hice una question sobre cómo realizar una idea general para rastrear y guardar páginas web. Parte de la pregunta original es: cómo rastrear y guardar muchas páginas "Acerca de" de Internet.
Con un poco más de investigación, tengo algunas opciones para seguir adelante con el raspado y el análisis (enumerados en la parte inferior).
Hoy me encontré con otra discusión de Ruby sobre cómo eliminar los resultados de búsqueda de Google. Esto proporciona una excelente alternativa para mi problema que ahorrará todo el esfuerzo en la parte de rastreo.
La nueva pregunta es: en Python, para raspar los resultados de búsqueda de Google para una palabra clave determinada, en este caso "Acerca de", y finalmente obtener los enlaces para un análisis más detallado. ¿Cuáles son las mejores opciones de métodos y bibliotecas para seguir adelante? (en medida de fácil de aprender y fácil de implementar).
PD: en este sitio web , se implementa exactamente lo mismo, pero se cierra y pide dinero para obtener más resultados. Preferiría hacerlo yo mismo si no hubiera código abierto disponible y aprender más Python mientras tanto.
Oh, por cierto, los consejos para analizar los enlaces de los resultados de búsqueda serían buenos, si los hubiera. Aún así, fácil de aprender y fácil de implementar. Acabo de empezar a aprender Python. :PAG
Actualización final , problema resuelto. Codifique con xgoogle, lea la nota en la sección a continuación para que xgoogle funcione.
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()
Nota sobre xgoogle (a continuación contestada por Mike Pennington): la última versión de Github ya no funciona de forma predeterminada, debido a los cambios en los resultados de búsqueda de Google probablemente. Estas dos respuestas ( a b ) en la página de inicio de la herramienta brindan una solución y, en la actualidad, aún funciona con este ajuste. Pero quizás algún otro día pueda dejar de funcionar nuevamente debido al cambio / bloqueo de Google.
Recursos conocidos hasta ahora:
Para el raspado, Scrapy parece ser una opción popular y una aplicación web llamada ScraperWiki es muy interesante y hay otro proyecto que extrae su biblioteca para uso local / sin conexión. Mechanize fue criado varias veces en diferentes discusiones también.
Para analizar HTML, BeautifulSoup parece ser una de las opciones más populares. Por supuesto. lxml también.
Eche un vistazo a este impresionante envoltorio de urllib para raspado web https://github.com/mattseh/python-web/blob/master/web.py
Este funciona bien para este momento. Si se realiza una búsqueda, el raspador puede recuperar 100 elementos de esa búsqueda pasando por varias páginas. Intenté usar la función para completar el código sin problemas, pero surge el problema de ipv4 y la página se redirige a la que tiene captcha. Aún confuso por qué funciona, pero si está dentro de la función, ya no funcionará. Por cierto, el raspador se ve un poco incómodo porque usé el mismo bucle for loop dos veces en mi raspador para que no se salte el contenido de la primera página.
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)
Hay un twill lib para emular navegador. Lo usé cuando tuve la necesidad de iniciar sesión con la cuenta de correo electrónico de Google. Si bien es una gran herramienta con una gran idea, es bastante antigua y parece tener una falta de soporte hoy en día (la última versión se lanza en 2007). Puede ser útil si desea recuperar resultados que requieran autenticación o manejo de cookies. Probablemente esa twill
sea una de las mejores opciones para ese propósito. Por cierto, se basa en mechanize
.
En cuanto al análisis, tienes razón, BeautifulSoup
y Scrapy
son geniales. Una de las cosas interesantes detrás de BeautifulSoup
es que puede manejar HTML no válido (a diferencia de Genshi , por ejemplo).
Puede encontrar útil a xgoogle ... mucho de lo que parece que está pidiendo está ahí ...
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)
esto debería ser útil ... para más información, vaya a https://github.com/goyal15rajat/Crawl-google-search.git