Ни где не смог найти ничего про составление запросов, чтоб вытащить часть информации расположенной между заранее заданными фразами, в ходе трех дневных мучений и попыток переделоть что-то имеющееся под себя получился такой вот “уродец”:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import re
import time
from urllib import *
class Http_Request:
def getURL(self,url):
# Загрузка страницы
return str(urlopen(url).read())
class YaBot(Http_Request):
def get_ya_page(self, request, page, region = 1):
# Создание поискового запроса
page = page # страницы Яндекса начинаются с 0
url = 'http://all.auto.ru/list/?category_id=15§ion_id=1&subscribe_id=&filter_id=&submit=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8&mark_id=0&year%5B1%5D=&year%5B2%5D=&color_id=&price_usd%5B1%5D=&price_usd%5B2%5D=¤cy_key=RUR&body_key=&run%5B1%5D=&run%5B2%5D=&engine_key=0&engine_volume%5B1%5D=&engine_volume%5B2%5D=&drive_key=&engine_power%5B1%5D=&engine_power%5B2%5D=&transmission_key=0&used_key=&wheel_key=&custom_key=&available_key=&change_key=&owner_pts=&stime=0&country_id=1&has_photo=0®ion%5B%5D=89®ion_id=89&sort_by=2&city_id=&output_format=1&client_id=0&extras%5B1%5D=0&extras%5B2%5D=0&extras%5B3%5D=0&extras%5B4%5D=0&extras%5B5%5D=0&extras%5B6%5D=0&extras%5B7%5D=&extras%5B8%5D=0&extras%5B9%5D=0&extras%5B10%5D=0&extras%5B11%5D=0&extras%5B12%5D=&extras%5B13%5D=0&extras%5B14%5D=0&extras%5B15%5D=0&extras%5B16%5D=0&extras%5B17%5D=0&extras%5B18%5D=&extras%5B19%5D=&extras%5B20%5D=&extras%5B21%5D=&extras%5B22%5D=&extras%5B23%5D=0&extras%5B24%5D=0&extras%5B25%5D=&extras%5B26%5D=&extras%5B27%5D=0&extras%5B28%5D=0&extras%5B29%5D=&_p=' + \
str(page)
# Возвращаем страницу поиска
return self.getURL(url)
def site_place(self,
site, # сайт, который ищем в поиске
request, # поисковый запрос для анализа
to_page, # кол-во страниц поиска для анализа
per_page = 50, #кол-во результатов на странице
region = 1): # регион поиска, подробнее тут:
# http://bit.ly/cKeksq
for page in range(1, to_page+1):
#Запрос очередной страницы поиска
data = self.get_ya_page(request, page, region)
# Подготовка регулярных выражений для поиска на
# странице результатов Яндекса
# Номера позиций
position_regex = re.compile(r'<b class="b-serp-item__number">([0-9]+)</b>')
# Адреса страниц (пока не используется)
search_url_regex = re.compile(r'<td align=left style=width:30%><a href="http://cars.auto.ru/cars/used/sale ?/([^"/]+)')
# Адреса сайтов
url_regex = re.compile('<td align=left style=width:30%><a href="http://cars.auto.ru/cars/used/sale ?/([^"/]+\.[a-z]{2,4})')
# Каптча
captcha_regex = re.compile('<div class="b-captcha">')
# Поиск на странице результатов Яндекса
positions = position_regex.findall(data)
# search_urls = search_url_regex.findall(data)
urls = url_regex.findall(data)
captcha = captcha_regex.findall(data)
print urls
if captcha:
return -2
for position in positions[:per_page]:
if urls[int(position)-((page-1)*per_page)-1].upper() == site.upper():
return position
time.sleep(3) # Антикаптча
return -1
def main():
ya = YaBot()
site = 'unlim-net.ru' # с www или без имеет значение
request = 'безлимитка'
region = 2 # Москва
site_position = ya.site_place(site, request, 1, region = region) #сколько страниц запросит
if site_position == -1:
print 'sayt ne nayden'
elif site_position == -2:
print 'CAPTCHA'
else:
print 'poziciya: '+str(site_position)
if __name__ == "__main__":
main()
С помощью него, я смог получить нужную информацию со страницы, но вот привести его в божеский вид (это переделаный парсер яндекса), так чтоб он продолжал при этом работать, так и не смог. И полученную информацию в файл писать, он так-же категорически отказывается.
Огромная просьба ко всем, кому не лень, помочь отредактировать этот код.