无限刮网Twi

2024-05-14 04:21:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python3.X在网上搜索Twitter,但我只收集了我请求的最后20条tweet。 我想收集2006年到现在的一个请求的全部数据。为此,我认为应该再创建两个功能:一个收集最近的tweet,另一个收集当前的tweets? 我如何从这个滚动页面收集数据?我想我必须使用tweet的id,但是不管我做什么请求,我得到的总是最后20条tweets。在

from pprint import pprint
from lxml import html
import requests
import datetime as dt
from BeautifulSoup import BeautifulSoup

def search_twitter(search):
    url = "https://twitter.com/search?f=tweets&vertical=default&q="+search+"&src=typd&lang=fr"
    request = requests.get(url)
    sourceCode = BeautifulSoup(request.content, "lxml")
    tweets = sourceCode.find_all('li', 'js-stream-item')
    return tweets

def filter_tweets(tweets):
    data = []
    for tweet in tweets:
        if tweet.find('p', 'tweet-text'):
            dtwee = [
                ['id', tweet['data-item-id']],
                ['username', tweet.find('span', 'username').text],
                ['time', tweet.find('a', 'tweet-timestamp')['title']],
                ['tweet', tweet.find('p', 'tweet-text').text.encode('utf-8')]]
            data.append(dtwee)
            #tweet_time = dt.datetime.strptime(tweet_time, '%H:%M - %d %B %Y')
        else:
            continue
    return data

def firstlastId_tweets(tweets):
    firstID = ""
    lastID = ""
    i = 0
    for tweet in tweets:
        if(i == 0):
            firstID = tweet[0][1]
        elif(i == (len(tweets)-1)):
            lastID = tweet[0][1]
        i+=1
    return firstID, lastID

def last_tweets(search, lastID):
    url = "https://twitter.com/search?f=tweets&vertical=default&q="+search+"&src=typd&lang=fr&max_position=TWEET-"+lastID
    request = requests.get(url)
    sourceCode = BeautifulSoup(request.content, "lxml")
    tweets = sourceCode.find_all('li', 'js-stream-item')
    return tweets

tweets = search_twitter("lol")
tweets = filter_tweets(tweets)
pprint(tweets)
firstID, lastID = firstlastId_tweets(tweets)
print(firstID, lastID)
while True:
    lastTweets = last_tweets("lol", lastID)
    pprint(lastTweets)
    firstID, lastID = firstlastId_tweets(lastTweets)
    print(firstID, lastID)

Tags: importurlsearchreturnrequestdeftwitterfind
1条回答
网友
1楼 · 发布于 2024-05-14 04:21:23

我在这个网页上找到了一个很好的解决方案:

http://ataspinar.com/2015/11/09/collecting-data-from-twitter/

我所做的是创建一个名为max_pos的变量,我在其中存储了以下字符串:

'&max_position=TWEET-'+last_id+'-'+first_id

我存储了first_idposition1 Tweet id)和{}(position20 Tweet id

所以对于这个请求,我用了这样的方法:

request = requests.get(url+max_pos)max_pos empty开头。在

我认为这是一个常见的问题,我们可以发布一个有效的解决方案。我仍然没有它显示的结果,我需要的方式,但我可以模拟“向下滚动到最后”的指导从链接。在

相关问题 更多 >