【问题标题】:Can I retrieve Twitter Card headline and media URLs?我可以检索 Twitter Card 标题和媒体 URL 吗?
【发布时间】:2018-12-31 11:28:06
【问题描述】:

我想从我的推文中为一个项目收集所有 Twitter 卡片标题和网址。例如,对于这条推文:https://twitter.com/WSJ/status/1021517076069056514,我想检索以下信息:

现在,我通过访问推文并检查卡片来获取此信息,但我想为代码执行此操作并遍历我的推文。有谁知道如何以编程方式获取这些信息?真的很感激!

【问题讨论】:

标签: python twitter web-scraping tweets twitter-card


【解决方案1】:

TLDR;真正的最佳答案可能是Get Twitter card from API的副本

答案建议检查对 URL 的请求并检查 HTML 元素。这适用于您的示例推文,但不幸的是,它可能不够通用,无法适用于所有其他推文。

例如,我使用了示例中可能没有的硬编码标签。 但可以肯定的是,这可以作为一个起点,并适用于所有推文。

最重要的是证明可以做到。

import tweepy
from tweepy import OAuthHandler
import requests 

# fill values
consumer_key = ''
consumer_secret = ''
access_token = ''
access_secret = ''

auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)

api = tweepy.API(auth)

tweet_id = 1021517076069056514

status = api.get_status(id=tweet_id)

tweet_url = status.entities['urls'][0]['expanded_url']

r = requests.get(tweet_url)

from bs4 import BeautifulSoup

soup = BeautifulSoup(r.content, 'html.parser')

media_container =  soup.select('div.card2.js-media-container')

tweet_card = media_container[0].select('div.js-macaw-cards-iframe-container')

tweet_card_url = tweet_card[0]['data-full-card-iframe-url']

twitter_base_url = 'http://www.twitter.com'

r2 = requests.get(''.join([twitter_base_url, tweet_card_url]))

final_page = r2.content

soup2 = BeautifulSoup(final_page, 'html.parser')

final_data = soup2.find('img', {'class': 'u-block'}) 

headline = final_data['alt']
image_link = final_data['data-src']

print 'Headline: {}'.format(headline)
print 'Image Link: {}'.format(image_link)

得到:

Headline: Global central banks have rattled bond markets
Image Link: https://pbs.twimg.com/card_img/1021513789722841093/LQWGa8uL?format=jpg&name=600x314

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 2016-04-16
    • 2018-09-28
    • 2019-08-08
    相关资源
    最近更新 更多