Здесь копии двух файлов из паука GitMyScrapycsv2 (компьютер W8). Заданы кортежи для BASE_URL .csv topmailru
Проба кода grab и furl для задачи "Процессинг csv таблиц" Здесь код формирования словаря для start_urls и решение вопросов кодировки кириллицы
Вот вопросы, которые возникли до того, как я написал скрипт¶
В том первом спайдере я запихнул весь код для формирования списка начальных URL сразу в класс Spider_mail_pages_1. Теперь я знаю про модули и ...еще кое-что, потому попробую разместить модули (или модуль) в отдельной папке проекта.
В модуле сначала зададим константы (списки или словари) ...Сколько их вообще может быть? Надо предусмотреть разные варианты списков и импортировать уже готовые варианты по мере необходимости.
Как их будем обозначать? Например, пол 1) - все 2) - м,ж
Из этих списков (или словарей?) будем формировать наборы. Напрмер, набор: год, пол, марка, или набор2: год, пол, возраст... (сколько всего параметров ?)
Потом сформируем метод для того, чтобы из наборов создавать списки со строками URL. Например, (пол)(месяц)(марка)= 2123= 72 строк URL (24 для каждой марки. Очевидно, что так мы легко можем задавать списки в десятки и сотни строк. Каждый список в отдельный файл?
Каждый список в отдельный файл, например, скачал (набор3: пол, возраст, фирма) за год, очевидно надо будет этот набор сохранить, чтобы скачать тот же набор параметров для другой фирмы, или за другой год ...
А как хранить? Очевидно, что для каждой конфигурации нужно создавать отдельную папку. В нее помещать подпапки со списками насальных URL... Надо додумать здесь же
Очевидно, что для скачаных данных нужны отдельные (от кода) файлохранилища. Поначалу - просто отдельные папки... Можно в них копировать списки URL ... просто копировать модули, в которые мы записали эти списки? В каждую папку вкладывать файл .rst описания структуры проекта?
Над этими вопросами я уже думал (здесь есть посты проекты CSV), потому теперь надо просто попробовать... а уж потом конкретизировать правила
В модуле сначала зададим константы (списки или словари) ...Сколько их вообще может быть? Надо предусмотреть разные варианты списков и импортировать уже готовые варианты по мере необходимости.
Как их будем обозначать? Например, пол 1) - все 2) - м,ж
Из этих списков (или словарей?) будем формировать наборы. Напрмер, набор: год, пол, марка, или набор2: год, пол, возраст... (сколько всего параметров ?)
Потом сформируем метод для того, чтобы из наборов создавать списки со строками URL. Например, (пол)(месяц)(марка)= 2123= 72 строк URL (24 для каждой марки. Очевидно, что так мы легко можем задавать списки в десятки и сотни строк. Каждый список в отдельный файл?
Каждый список в отдельный файл, например, скачал (набор3: пол, возраст, фирма) за год, очевидно надо будет этот набор сохранить, чтобы скачать тот же набор параметров для другой фирмы, или за другой год ...
А как хранить? Очевидно, что для каждой конфигурации нужно создавать отдельную папку. В нее помещать подпапки со списками насальных URL... Надо додумать здесь же
Очевидно, что для скачаных данных нужны отдельные (от кода) файлохранилища. Поначалу - просто отдельные папки... Можно в них копировать списки URL ... просто копировать модули, в которые мы записали эти списки? В каждую папку вкладывать файл .rst описания структуры проекта?
Над этими вопросами я уже думал (здесь есть посты проекты CSV), потому теперь надо просто попробовать... а уж потом конкретизировать правила
Все вопросы выше от безграмотности¶
Неделя прошла под флагом ликвидации безграмотности. Я даже разбил файл с книгой Лутца на части по 100-200 страниц, дабы читать легче было... и грузить мегабайты в старенький маломощный "планшет". После внимательного прочтения глав 17 - 30 о модулях и классах в голове прояснилось, и я стал (наконец-то) понимать чужой код без напряжения.
Вопросы возникали детские, но фундаментальные, вот например:
Вопросы возникали детские, но фундаментальные, вот например:
Можно ли присваивать кортежи, как обычные переменные?¶
In [1]:
t1=('a1','b1','c1',)
In [2]:
t2=()
In [3]:
t2=t1
t2
Out[3]:
После этого я написал шедевр в нового паука два файла для формирования списка unitial_urls (файл URL_parametrs.py)¶
In [1]:
!dir C:\Users\kiss\Documents\GitMyScrapy\scrapy_csv_2\scrapy_csv_2\initial_urls
Сначала мы формируем кортежи из возможных значений в базовой строке (BASE_URL), а потом скрипт перебирает все возможные сочетания из строк кортежей и формирует список всех первоначальных URL
In [2]:
%load "C:\\Users\\kiss\\Documents\\GitMyScrapy\\scrapy_csv_2\\scrapy_csv_2\\initial_urls\\url_mailru.py"
In []:
#### You have to edit this for every Spider #########
# service http://top.mail.ru/referers?id=85837&period=0&date=&pp=20&gender=0&agegroup=0&filter_type=0&filter=nissan#sids=&percent=0>ype=line
# The real CSV file from this service may be without 'date'
BASE_URL="http://top.mail.ru/referers.csv?id=85837&period=2&date=2014-06-30&sf=0&pp=200&filter_type=0&filter=nissan&gender=0&agegroup=0&"
# Any number of items in tulip
DATE = ('date=2014-01-30', 'date=2014-02-30', 'date=2014-03-30', 'date=2014-04-30', 'date=2014-05-30', 'date=2014-06-30', 'date=2014-07-30', 'date=2014-08-30', 'date=2014-09-30', 'date=2014-10-30', 'date=2014-11-30', 'date=2014-12-30',) # "-30" (the day value) does not work for week or month period
FILTER = ('mercedes-benz',) # I decided to use three variants to filter by firm name. Every item of FILTER can be more complex...
# You have to select from two variants of tulip- all, or many items
AGEGROUP = ('0',) #('1','2','3','4','5','6','7','8','9',)
#{"0":"Все", "1":"до 12","2":"12-18","3":"19-24","4":"25-30","5":"31-35","6":"36-40","7":"41-45","8":"46-50","9":"старше 50"}
GENDER = ('0',) #('1','2',) #{"0":"All", "1":"Male","2":"Female"}
# One item in tulip only !!!
PERIOD = ('2',) #{"0":"День", "1":"Неделя","2":"Месяц"}
FILTER_TYPE = ('0',) #{"0":"Только", "1":"Кроме"} # "toyota" only or except "toyota"
PP = ('200',) #["10","20","50","100","200"] # Number of rows in output file
# If you want to load more then 200 rows add items to this tulip
SF = ('0',) #{"0":"1-st page", "200":"2-nd page","400":"3-st page", ...} # sum of rows on previous pages. This is example for pp=200
В URL_parametrs.py мы сначала загружаем модуль с кортежами, а потом запускаем вложенные циклы для всех кортежей. Таким образом, вся настройка списка происходит в файле url_mailru.py
Для некоторых кортежей есть два взаимоисключающих варианта настройки, например пол - "0"("все") или пол "1","2"...
Для некоторых кортежей есть два взаимоисключающих варианта настройки, например пол - "0"("все") или пол "1","2"...
In [3]:
%load "C:\\Users\\kiss\\Documents\\GitMyScrapy\\scrapy_csv_2\\scrapy_csv_2\\initial_urls\\URL_parametrs.py"
In []:
from furl import furl #url parser
from scrapy_csv_2.initial_urls.url_mailru import *
# assign tulips with parts of URLs
"""
We use furl library opportunities to select and reassign named URL.args
New tulips with values for args we take from imported module like this:
from scrapy_csv_2.initial_urls.url_mailru import *
New values are inserted to args of url like this string:
BASE_URL="http://top.mail.ru/referers.csv?
id=85837&period=2&date=2014-06-30&sf=0&pp=200
&filter_type=0&filter=nissan&gender=0&agegroup=0&"
"""
initial_urls=[]
def listtopmail():
i_urls=[]
f = furl(BASE_URL)
#self.result_counter = 0 # couner for URL list
for i1 in AGEGROUP:
f.args['agegroup']=i1
for i2 in GENDER:
f.args['gender']=i2
for i3 in FILTER:
f.args['filter']=i3
for i4 in FILTER_TYPE:
f.args['filter_type']=i4
for i5 in PP:
f.args['pp']=i5
for i6 in SF:
f.args['sf']=i6
for i7 in DATE:
f.args['date']=i7
for i8 in PERIOD:
f.args['period']=i8
#print '"это в цикле f.url= %s /n' % f.url
i_urls.append(f.url)
return i_urls
#
if __name__ == '__main__':
initial_urls=makelist()
Простое лучше, чем сложное... Simple is better than complex¶
In [6]:
import this
In []:
Посты чуть ниже также могут вас заинтересовать
Комментариев нет:
Отправить комментарий