Форум сайта python.su
0
Представляю вам мой “костыль”, скрипт работает, но время его выполнения по приблизительным расчетам дней 15, с учетом, что он проходится по всей базе, есть ли какие-нибудь идеи по ускорению работы скрипта или же упрощению, также столкнулся с одним неприятным моментом, по идее метод user.get позволяет получить 1000 записей, но если в цикле брать по 1000, после тысячи 6 выпадает bad request, ошибка связана с неверным запросом, но не понятно, где ошибка, ведь предыдущие 5000 ошибки не было, возможно, это связано с количеством обращений к серверу, можно выполнять 5 обращений в секунду, возможно не прав, заранее благодарен за помощь
from BeautifulSoup import BeautifulSoup import re import urllib2 import csv for i in range(503619): o=1+500*i p=500+500*i c=range(o,p) q=str(c).replace(" ", "") c=q.replace("[","") q=c.replace("]","") link="https://api.vk.com/method/users.get.xml?uids="+str(q)+"&fields=sex,bdate,city,country,has_mobile,education,status,last_seen,schools,relation,relatives" page=urllib2.urlopen(link) s=BeautifulSoup(page) for n in range(250): soup=s.response.contents[2*n+1] try: k=soup.find('city') city=int(soup.find('city').string) if city==153 or city==37 or city==168 or city==30 or city==70: uid="Unknown" last_name="Unknown" first_name="Unknown" sex="Unknown" bdate="Unknown" city="Unknown" country="Unknown" has_mobile="Unknown" university_name="Unknown" name="Unknown" status="Unknown" time="Unknown" relation="Unknown" relatives="Unknown" try: uid=soup.find('uid').string except: uid="Unknown" try: first_name=soup.find('first_name').string except: first_name="Unknown" try: last_name=soup.find('last_name').string except: last_name="Unknown" try: sex=soup.find('sex').string except: sex="Unknown" try: bdate=soup.find('bdate').string except: bdate="Unknown" try: city=soup.find('city').string except: city="Unknown" try: country=soup.find('country').string except: country="Unknown" try: has_mobile=soup.find('has_mobile').string except: has_mobile="Unknown" try: universities=soup.find('university_name').string except: universities="Unknown" try: schools=soup.find('name').string except: schools="Unknown" try: status=soup.find('status').string except: status="Unknown" try: last_seen=soup.find('time').string except: last_seen="Unknown" try: relation=soup.find('relation').string except: relation="Unknown" try: relatives=soup.find('relatives').string relatives="1" except: relatives="0" writer = csv.writer(open("/Users/roman/Desktop/oj.csv", "a")) writer.writerow([uid,first_name,last_name,sex,bdate,city,country,has_mobile,universities,schools,status,last_seen,relation,relatives]) writer=1 except: print(o)
Офлайн
9
С вк лучше работать через апи. https://pypi.python.org/pypi/vkontakte/1.3.2
Офлайн
0
alexsisуже есть такой пакет, но во много ли раз он ускоряет процесс?
С вк лучше работать через апи. https://pypi.python.org/pypi/vkontakte/1.3.2
Отредактировано ser25630 (Апрель 21, 2014 15:45:09)
Офлайн
0
alexsisи есть ли идеи по теме выпадающей ошибки, на 1000 записей?
С вк лучше работать через апи. https://pypi.python.org/pypi/vkontakte/1.3.2
Офлайн
9
У вас такая ошибка возникает при использовании vk api?
Офлайн
0
alexsisПри открытии самой ссылки, допустим в i=2100 выпадает такая ошибка
У вас такая ошибка возникает при использовании vk api?
Офлайн
0
alexsisпопробую воспользоваться самим пакетом vkontakte api, если даст должный результат отпишусь
https://pypi.python.org/pypi/vkontakte/1.3.2
Офлайн
0
alexsisспасибо за совет, получаю данные в формате листа, по листу ориентироваться куда проще чем веб ответу, но я периодически получаю ошибку о том, что вышло время ожидания ответа от сервера, интернет несколько слабенький, не подскажите как увеличить это время ожидания?
У вас такая ошибка возникает при использовании vk api?
Офлайн
0
alexsisвыпадает ошибка the read operation timed out на строке получения профилей, чем меньше профилей запрашиваю, тем менее часто выпадается эта ошибка, я так понимаю, это связано со скоростью моего интернета, но как можно избежать этой ошибки.
У вас такая ошибка возникает при использовании vk api?
import re import urllib2 import csv import vkontakte vko=vkontakte.API(token='atoken') for i in range(4000,1008000): try: o=1+250*i p=250+250*i c=range(o,p) q=str(c).replace(" ", "") c=q.replace("[","") q=c.replace("]","") soup=vko.getProfiles(uids=q, fields='sex,bdate,city,country,has_mobile,education,schools,status,last_seen,relation,relatives')
Отредактировано ser25630 (Апрель 23, 2014 01:54:38)
Офлайн
9
Можно увидеть весь traceback ошибки? Сформулируйте поконкретней вашу задачу.
Отредактировано alexsis (Апрель 22, 2014 15:57:33)
Офлайн