【问题标题】:Is it possible to read tweet-text of a tweet URL without twitter API?是否可以在没有 twitter API 的情况下读取推文 URL 的推文文本?
【发布时间】:2017-08-23 08:01:22
【问题描述】:

我正在使用Goose 从 URL 读取文章的标题/正文。但是,这不适用于 twitter URL,我猜是由于 HTML 标记结构不同。有没有办法从这样的链接中读取推文文本?

一个这样的推文示例(缩短的链接)如下:

https://twitter.com/UniteAlbertans/status/899468829151043584/photo/1

注意:我知道如何通过 twitter API 阅读推文。但是,我对此不感兴趣。我只想通过解析 HTML 源来获取文本,而无需所有 twitter 身份验证麻烦。

【问题讨论】:

    标签: python-2.7 url web-scraping text-extraction tweets


    【解决方案1】:

    刮擦自己

    打开推文的 url,传递给您选择的 HTML 解析器并提取您感兴趣的 XPath。

    在以下位置讨论抓取:http://docs.python-guide.org/en/latest/scenarios/scrape/

    如果站点的结构始终相同,则可以通过右键单击所需元素,选择“检查”,右键单击检查器中突出显示的行并选择“复制”>“复制 XPath”来获得 XPath。否则,请选择准确定义所需对象的属性。

    在你的情况下:

    //div[contains(@class, 'permalink-tweet-container')]//strong[contains(@class, 'fullname')]/text()
    

    会给你作者的名字和

    //div[contains(@class, 'permalink-tweet-container')]//p[contains(@class, 'tweet-text')]//text()
    

    将为您提供推文的内容。

    完整的工作示例:

    from lxml import html
    import requests
    page = requests.get('https://twitter.com/UniteAlbertans/status/899468829151043584')
    tree = html.fromstring(page.content)
    tree.xpath('//div[contains(@class, "permalink-tweet-container")]//p[contains(@class, "tweet-text")]//text()')
    

    结果:

    ['Breaking:\n10 sailors missing, 5 injured after USS John S. McCain collides with merchant vessel near Singapore...\n\n', 'https://www.', 'washingtonpost.com/world/another-', 'us-navy-destroyer-collides-with-a-merchant-ship-rescue-efforts-underway/2017/08/20/c42f15b2-8602-11e7-9ce7-9e175d8953fa_story.html?utm_term=.e3e91fff99ba&wpisrc=al_alert-COMBO-world%252Bnation&wpmk=1', u'\xa0', u'\u2026', 'pic.twitter.com/UiGEZq7Eq6']
    

    【讨论】:

    • 只是为了澄清所使用的 XPath...// - 在任何地方搜索 div[contains(@class, 'permalink-tweet-container')] - 具有类 'permalink-tweet-container' 的 div // - 以及来自 strong[contains(@class, 'fullname')] 的任何地方- 包含类“全名”/ 的强 - 直接从中 text() - 获取文本。
    • 您可以测试您自己的 XPath,例如在 videlibri.sourceforge.net/cgi-bin/xidelcgi
    • 我必须尝试一下,然后会回复您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 2011-08-26
    • 2013-01-30
    • 2012-12-20
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多