Я продолжаю писать свой сканер в Твиттере и сталкиваюсь с другими проблемами. Посмотрите на код ниже:
from BeautifulSoup import BeautifulSoup
import re
import urllib2
url = 'http://mobile.twitter.com/NYTimesKrugman'
def gettweets(soup):
tags = soup.findAll('div', {'class' : "list-tweet"})#to obtain tweet of a follower
for tag in tags:
print tag.renderContents()
print ('\n\n')
def are_more_tweets(soup):#to check whether there is more than one page on mobile
links = soup.findAll('a', {'href': True}, {id: 'more_link'})
for link in links:
b = link.renderContents()
test_b = str(b)
if test_b.find('more'):
return True
else:
return False
def getnewlink(soup): #to get the link to go to the next page of tweets on twitter
links = soup.findAll('a', {'href': True}, {id : 'more_link'})
for link in links:
b = link.renderContents()
if str(b) == 'more':
c = link['href']
d = 'http://mobile.twitter.com' +c
return d
def checkforstamp(soup): # the parser scans a webpage to check if any of the tweets are
times = soup.findAll('a', {'href': True}, {'class': 'status_link'})
for time in times:
stamp = time.renderContents()
test_stamp = str(stamp)
if test_stamp.find('month'):
return True
else:
return False
response = urllib2.urlopen(url)
html = response.read()
soup = BeautifulSoup(html)
gettweets(soup)
stamp = checkforstamp(soup)
tweets = are_more_tweets(soup)
print 'stamp' + str(stamp)
print 'tweets' +str (tweets)
while (not stamp) and tweets:
b = getnewlink(soup)
print b
red = urllib2.urlopen(b)
html = red.read()
soup = BeautifulSoup(html)
gettweets(soup)
stamp = checkforstamp(soup)
tweets = are_more_tweets(soup)
print 'done'
Код работает следующим образом:
Для одного пользователя NYTimesKrugman
-Я получаю все твиты на одной странице (gettweets)
-предоставлено больше твитов (больше твитов) и что я еще не получил месяц твитов (checkforstamp), я получаю ссылку на следующую страницу твитов
-Я иду на следующую страницу твитов (входя в цикл while) и продолжаю процесс, пока не будет нарушено одно из вышеуказанных условий
Однако я провел обширное тестирование и определил, что на самом деле не могу войти в цикл while. Скорее программа не делает этого. Это странно, потому что мой код написан так, что твиты верны, а штамп должен давать ложь. Тем не менее, я получаю следующие результаты: я действительно сбит с толку!
<div>
<span>
<strong><a href="http://mobile.twitter.com/nytimeskrugman">NYTimeskrugman</a></strong>
<span class="status">What Would I Have Done? <a rel="nofollow" href="http://nyti.ms/nHxb8L" target="_blank" class="twitter_external_link">http://nyti.ms/nHxb8L</a></span>
</span>
<div class="list-tweet-status">
<a href="/nytimeskrugman/status/98046724089716739" class="status_link">3 days ago</a>
</div>
<div class="list-tweet-actions">
</div>
</div>
stampTrue
tweetsTrue
done
>>>
Если бы кто-то мог помочь, это было бы здорово. Почему я не могу получить более 1 страницы твитов? Мой анализ в checkstamp выполняется неправильно? Thanx.