xenonhammer
New member
Нашел вот такой мануал 2012 года на хабре по написанию подобного паука:
Дело в том что когда пытался собрать методом копипаста, ничего не вышло ибо не могу установить библиотеку StringIO. Поискал информацию, говорят что данной библиотеки уже нет. Уперевшись в это, дальше не стал проверять чего не хватает еще.
Говорят что можно написать разными путями например с использованием scraper. Но так как я на самом деле не имею знаний чтобы реализовать данный инструмент, прошу поделиться вашим мнением по этому поводу.
Не нашел бесплатного решения, все на тарифах, по этому пробую сделать сам. Но сам на данный момент не смог
Python:
import pycurl
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
def get_page(url, *args, **kargs):
c = pycurl.Curl()
c.setopt(pycurl.URL, url)
c.bodyio = StringIO()
c.setopt(pycurl.WRITEFUNCTION, c.bodyio.write)
c.get_body = c.bodyio.getvalue
c.headio = StringIO()
c.setopt(pycurl.HEADERFUNCTION, c.headio.write)
c.get_head = c.headio.getvalue
c.setopt(pycurl.FOLLOWLOCATION, 1)
c.setopt(pycurl.MAXREDIRS, 5)
c.setopt(pycurl.CONNECTTIMEOUT, 60)
c.setopt(pycurl.TIMEOUT, 120)
c.setopt(pycurl.NOSIGNAL, 1)
c.setopt(pycurl.USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:13.0) Gecko/20100101 Firefox/13.0')
httpheader = [
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
'Accept-Charset:utf-8;q=0.7,*;q=0.5',
'Connection: keep-alive',
]
c.setopt(pycurl.HTTPHEADER, httpheader)
c.perform()
if c.getinfo(pycurl.HTTP_CODE) != 200:
raise Exception('HTTP code is %s' % c.getinfo(pycurl.HTTP_CODE))
return c.get_body()
import urllib
import urlparse
key='кирпич'
region=213
page=1
params = ['http', 'yandex.ru', '/yandsearch', '', '', '']
params[4] = urllib.urlencode({
'text':key,
'lr':region,
'p':page-1,
})
url = urlparse.urlunparse(params)
html = get_page(url)
def site_list(key, region=213, page=1):
params = ['http', 'yandex.ru', '/yandsearch', '', '', '']
params[4] = urllib.urlencode({
'text':key,
'lr':region,
'p':page-1,
})
url = urlparse.urlunparse(params)
html = get_page(url)
site_list = []
for h2 in lxml.html.fromstring(html).find_class('b-serp-item__title'):
b = h2.find_class('b-serp-item__number')
if len(b):
num = b[0].text.strip()
url = h2.find_class('b-serp-item__title-link')[0].attrib['href']
site = urlparse.urlparse(url).hostname
site_list.append((num, site, url))
return site_list
def cut_www(site):
if site.startswith('www.'):
site = site[4:]
return site
site = 'habrahabr.ru'
for pos, s, url in site_list('python', 213, 1):
if cut_www(s) == site:
print pos, url
def site_position(site, key, region=213, max_position=10):
for page in range(1,int(math.ceil(max_position/10.0))+1):
site = cut_www(site)
for pos, s, url in site_list(key, region, page):
if cut_www(s) == site:
return pos, url
return None, None
print site_position('habrahabr.ru', 'python', 213, 100)
Дело в том что когда пытался собрать методом копипаста, ничего не вышло ибо не могу установить библиотеку StringIO. Поискал информацию, говорят что данной библиотеки уже нет. Уперевшись в это, дальше не стал проверять чего не хватает еще.
Говорят что можно написать разными путями например с использованием scraper. Но так как я на самом деле не имею знаний чтобы реализовать данный инструмент, прошу поделиться вашим мнением по этому поводу.
Не нашел бесплатного решения, все на тарифах, по этому пробую сделать сам. Но сам на данный момент не смог