Разбор страниц сайта Zebo

Структура страницы результатов поиска на сайте Zebo довольно сложна, но определить, какие части страницы относятся к списку элементов, просто, так как для них задан класс bgverdanasmall. Воспользовавшись этим, мы можем извлечь из страницы интересующие нас данные. Создайте файл downloadzebodata.py и включите в него такой код: from BeautifulSoup import BeautifulSoup import urllib2 import re

chare=re.compile(r'[!-\.&]’) itemowners={}

# Эти слова следует игнорировать

d ropwords=[‘a’,’new’,’some’,’more’,’my’,’own’,’the’,’many’,’other’,’another’ ]

currentuser=0 for i in range(1,51): # URL страницы результатов поиска c=urllib2.urlopen(

‘http://member.zebo.com/Main?event_key=USERSEARCH&wiowiw=wiw&keyword=car& page=%%d’ %% (i))

soup=BeautifulSoup(c.read( )) for td in soup(‘td’): # Найти ячейки таблицы с классом bgverdanasmall if (‘class’ in dict(td.attrs) and td[‘class’]==’bgverdanasmall’): items=[re.sub(chare,”,a.contents[0].lower()).strip( ) for a in td(‘a’)]

for item in items: # Удалить игнорируемые слова

txt=’ ‘.]oin([t for t in item.split(‘ ‘) if t not in dropwords]) if len(txt)<2: continue itemowners.setdefault(txt,{}) itemowners[txt][currentuser]=1 currentuser+=1

Эта программа загружает и разбирает первые 50 страниц «пожеланий» с сайта Zebo. Поскольку данные вводятся в виде неструктурированного текста, приходится приложить усилия для их очистки, в частности удалить такие слова, как артикль a и some, избавиться от знаков препинания и перевести все в нижний регистр.

Проделав все это, программа сначала создает список предметов, которые желают иметь более пяти человек, затем строит матрицу, столбцы которой представляют анонимных пользователей, а строки – предметы, и наконец выводит эту матрицу в файл. Добавьте следующий код в файл downloadzebodata.py: out=file(‘zebo.txt’,’w’) out.write(‘Item’)

for user in range(0,currentuser): out.write(‘\tU%d’ % user) out.write(‘\n’)

for item,owners in itemowners.items( ): if len(owners)>10: out.write(item)

for user in range(0,currentuser): if user in owners: out.write(‘\t1’) else: out.write(‘\t0’) out.write(‘\n’)

Выполните следующую команду, которая создаст файл zebo.txt в том же формате, что и для набора данных о блогах. Единственное отличие состоит в том, что вместо счетчиков мы используем 1, если человек хочет иметь некий предмет, и 0 – если не хочет: c:\code\cluster>python downloadzebodata.py

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100