Tweet ids与硒?

时间:2017-11-12 14:25:51

标签: python selenium twitter web-scraping

问题:我的selenium报废脚本不会给我发推文ID,可能是因为我的请求方式存在问题。

详细信息:

各位大家好,我在这里找到一个脚本(https://github.com/bpb27/twitter_scraping/blob/master/scrape.py)进入Twitter搜索并获取旧推文的ID。

从这个脚本我改变了两个部分:

user = 'realdonaldtrump'
start = datetime.datetime(2010, 1, 1)  # year, month, day
end = datetime.datetime(2016, 12, 7)  # year, month, day

已成为

user = 'metoo'
start = datetime.datetime(2017, 10, 24)  # year, month, day
end = datetime.datetime(2017, 10, 25)  # year, month, day

def form_url(since, until):
    p1 = 'https://twitter.com/search?f=tweets&vertical=default&q=from%3A'
    p2 =  user + '%20since%3A' + since + '%20until%3A' + until + 'include%3Aretweets&src=typd'
    return p1 + p2

已成为

def form_url(since, until):
    p1 = 'https://twitter.com/search?l=fr&q=%23'
    p2 =  user + '%20since%3A' + since + '%20until%3A' + until + 'include%3Aretweets&src=typd'
    return p1 + p2

我的更改后,脚本会正确搜索并遍历所有推文,但不会抓取任何ID。

以下是请求部分:

for tweet in found_tweets:
    try:
        id = tweet.find_element_by_name(id_selector).get_attribute('href').split('/')[-1]
        ids.append(id)
    except StaleElementReferenceException as e:
        print('lost element reference', tweet)

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

它可能与html上的更新有关。你的代码tweet.find_element_by_name(id_selector)应该返回

<a href="/xxx/status/928601524380536xxx" class="tweet-timestamp js-permalink js-nav js-tooltip" title="04:33 - 9 nov. 2017" data-conversation-id="928601524380536xxx"><span class="_timestamp js-short-timestamp " data-aria-label-part="last" data-time="xxx" data-time-ms="xxx" data-long-form="true">9 nov.</span></a>

如您所见,没有href属性。您应该为每条推文获取“data-conversation-id”属性,而不是获取href。

id = tweet.find_element_by_name(id_selector)['data-conversation-id']

另一方面,我不想使用这个id_selector('。at.tweet-timestamp'),因为tweet ['data-item-id']应该给出id。

 <li class="js-stream-item stream-item stream-item" data-item-id="928601524380536xxx" id="stream-item-tweet-928601524380536xxx" data-item-type="tweet">

贝斯茨,