Очистка и анализ результатов поиска Google с использованием Python - PullRequest
21 голосов
/ 13 октября 2011

Я задал вопрос о реализации общей идеи сканирования и сохранения веб-страниц.Часть первоначального вопроса: как сканировать и сохранять много страниц «О программе» из Интернета.

После некоторых дальнейших исследований у меня есть несколько вариантов, как для анализа, так и для анализа (перечислены навнизу).

Сегодня я столкнулся с другим Рубиновым обсуждением о том, как извлечь из результатов поиска Google.Это дает отличную альтернативу для моей задачи, которая сэкономит все усилия на сканируемой части.

Новый вопрос : в Python, scrape Результаты поиска Googleдля данного ключевого слова, в данном случае «О», и, наконец, получить ссылки для дальнейшего анализа.Каковы наилучшие варианты методов и библиотек?(в плане простоты в освоении и простоте реализации).

ps на этом сайте , то же самое реализовано, но закрыто и просят денег за дополнительные результаты.Я бы предпочел сделать это сам, если бы не было доступного с открытым исходным кодом, и в то же время узнать больше о Python.Тем не менее, легкий в освоении и простой в реализации.Только начал изучать Python.: P


Окончательное обновление , проблема решена.Код с использованием xgoogle. Пожалуйста, прочтите примечание в разделе ниже, чтобы заставить xgoogle работать.

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()

Примечание на xgoogle (ниже ответил Майк Пеннингтон): последняя версияиз-за этого Github по умолчанию уже не работает, возможно, из-за изменений в результатах поиска Google.Эти два ответа ( a b ) на домашней странице инструмента дают решение, и в настоящее время он все еще работает с этой настройкой.Но, может быть, в какой-то другой день он может перестать работать из-за изменения / блокировки Google.


Ресурсы, известные до сих пор:

  • Для очистки, Scrapy кажется популярным выбором, и веб-приложение под названием ScraperWiki очень интересно, и есть другой проект , извлекающий свою библиотеку для автономного / локального использования. Механизм тоже несколько раз поднимался в разных дискуссиях.

  • Для разбора HTML BeautifulSoup кажется одним из самых популярныхвыбор.Конечно. lxml тоже.

Ответы [ 6 ]

11 голосов
/ 13 октября 2011

Вы можете найти xgoogle полезным ... многое из того, о чем вы, похоже, просите, есть ...

1 голос
/ 28 мая 2019

Еще один вариант очистки результатов поиска Google с помощью Python - ZenSERP .

Мне нравится подход API-first, который прост в использовании, а результаты JSON легко интегрируются в наше решение.

Вот пример запроса curl:

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"

И ответ:

{
  "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": []
}

Код Python, например:

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 голос
/ 12 сентября 2017

Этот работает хорошо на данный момент.Если выполняется какой-либо поиск, скребок может выбрать 100 элементов этого поиска, пройдя несколько страниц.Я попытался использовать функцию для безупречного завершения кода, но возникает проблема с ipv4, и страница перенаправляется на страницу с капчей.Все еще не понимаете, почему этот работает, но если он заключен в функцию, он больше не будет работать.Кстати, скребок выглядит немного неловко, потому что я дважды использовал один и тот же цикл for в своем скребке, чтобы он не мог пропустить содержимое первой страницы.

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 голос
/ 13 октября 2011

Взгляните на эту удивительную оболочку urllib для очистки веб-страниц https://github.com/mattseh/python-web/blob/master/web.py

1 голос
/ 13 октября 2011

Существует библиотека twill для эмуляции браузера.Я использовал его, когда возникла необходимость войти в систему с учетной записью электронной почты Google.Хотя это отличный инструмент с отличной идеей, он довольно старый и, похоже, в настоящее время не имеет поддержки (последняя версия выпущена в 2007 году).Это может быть полезно, если вы хотите получить результаты, которые требуют обработки файлов cookie или аутентификации.Вероятно, что twill является одним из лучших вариантов для этих целей.Кстати, он основан на mechanize.

Что касается синтаксического анализа, вы правы, BeautifulSoup и Scrapy великолепны.Одна из замечательных особенностей BeautifulSoup заключается в том, что он может обрабатывать недопустимый HTML (в отличие от Genshi , например.)

0 голосов
/ 01 февраля 2017
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)

это должно быть удобно .... для получения дополнительной информации перейдите к - https://github.com/goyal15rajat/Crawl-google-search.git

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...