Как получить изображения из результатов поиска Google с помощью Mechanize

Я пытался проанализировать HTML результата поиска изображений Google и получить исходную ссылку на изображения.

До сих пор мне удавалось написать код Python для получения HTML-кода поиска Google с помощью Python Mechanize и BeautifulSoup.

Глядя на источник HTML результатов поиска Google, я обнаружил, что Google хранит двойное кодирование URL-адреса исходного изображения в div с классом rg_meta, но HTML, который я получаю от Mechanize, не содержит такого класса. Фактически вся новая веб-страница возвращается через Mechanize.

Я знаю об API-интерфейсах поиска изображений Google, но мне нужно анализировать HTML таким образом. Что я делаю неправильно? Могу ли я замаскировать Mechanize как Chrome или другой браузер?

Это фрагмент того, что я пытался. Ничего не возвращает:

import urllib
import mechanize
from bs4 import BeautifulSoup
from urlparse import urlparse

search = "cars"
browser = mechanize.Browser()
browser.set_proxies({"https": "10.0.2.88:3128"})
browser.set_handle_robots(False)
browser.addheaders = [('User-agent','Mozilla')]

html = browser.open("https://www.google.co.in/search?&source=lnms&tbm=isch&sa=X&q="+search+"&oq="+search)
htmltext=html.read()
print htmltext    
img_urls = []
formatted_images = []
soup = BeautifulSoup(htmltext)
#results = soup.findAll("a")
results = soup.findAll("div", { "class" : "rg_meta" })
print results

person Mercurial    schedule 23.12.2013    source источник
comment
Вы прямо соглашаетесь не осуществлять доступ (или пытаться получить доступ) к каким-либо Услугам с помощью любых автоматизированных средств (включая использование скриптов или поисковых роботов)...   -  person Paulo Scardine    schedule 23.12.2013
comment
Хочешь ответить как? я новичок в питоне.   -  person Mercurial    schedule 23.12.2013
comment
Условия использования Google не позволяют использовать скрипты в веб-поиске. Попробуйте что-то вроде pattern.web clips.ua.ac.be/pages/pattern- веб-сервисы   -  person PepperoniPizza    schedule 27.12.2013


Ответы (2)


Спасибо за попытку, но мне пришлось перейти на urllib2, чтобы решить эту проблему. Следующий код анализирует страницу поиска Google для ссылки на изображения.

search = search.replace(" ","%20")
  site= "http://www.google.co.in/search?q="+search+"&tbm=isch&tbs=isz:l"
  hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
         'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
         'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
         'Accept-Encoding': 'none',
         'Accept-Language': 'en-US,en;q=0.8',
         'Connection': 'keep-alive'}
  QtGui.qApp.processEvents()
  req = urllib2.Request(site, headers=hdr)

  try:
      QtGui.qApp.processEvents()
      page = urllib2.urlopen(req)
  except urllib2.HTTPError, e:
      print e.fp.read()  
  QtGui.qApp.processEvents()
  content = page.read()
  #print content
  soup = BeautifulSoup(content)
  results = soup.findAll("a")
  linkarray = soup.find_all(attrs={"class": "rg_meta"})
  #print linkarray
  refer_rl=[]
  total=len(linkarray)
  i=0
  for divs in linkarray:
    i=i+1
    stri=str(divs)
    refer_url=stri.split('%3B')
    try:
        QtGui.qApp.processEvents()
        url=urllib.unquote(refer_url[2]).decode('utf8') 
        url=urllib.unquote(url).decode('utf8') 
        #os.system('wget '+url)
        #f = open('links.txt', 'a')
        #f.write(url+'\n')
        form.textBrowser.append(url)
        form.progressBar.setProperty("value", i*100/total)
        time.sleep(0.05)

    except:
        continue
  #os.system('aria2c -i links.txt -x 16')
  #os.system('rm links.txt')
  print "All good, you can download now"
person Mercurial    schedule 27.12.2013

import mechanize
br = mechanize.Browser()
br.open(<yoursitehere>)
images = re.findall("src=\"[^\"]{8,240}", br.response().read()) 
for i in images: print i
br.close()

вам нужно немного отфильтровать результаты и повозиться с RE, в зависимости от HTML конкретного сайта

person miguelraiz    schedule 08.04.2020