python - 使用 python 抓取推文的问题
问题描述
我正在尝试在特定时间范围内从一个网页上抓取推文。
为此,我正在使用此链接,该链接仅在我指定的时间范围内搜索:
https://twitter.com/search?f=tweets&q=subwaydstats%20since%3A2016-08-22%20until%3A2018-08-22
这是我的代码:
import pandas as pd
import datetime as dt
import urllib.request
from bs4 import BeautifulSoup
url = 'https://twitter.com/search?f=tweets&q=subwaydstats%20since%3A2016-08-22%20until%3A2018-08-22'
thepage = urllib.request.urlopen(url)
soup = BeautifulSoup(driver.page_source,"html.parser")
i = 1
for tweet in soup.find_all('div', {'class': 'js-tweet-text-container'}):
print(tweet.find('p', {'class': 'TweetTextSize'}).text.encode('UTF-8'))
print(i)
i += 1
当我从地铁统计用户的实际 twitter 页面中抓取时,上面的代码有效。
出于这个原因,我不明白为什么它对搜索页面不起作用,即使 html 对我来说似乎是一样的。
我是一个初学者,所以如果这是一个愚蠢的问题,我很抱歉。谢谢!
解决方案
有一个 Twitter API - Twitter Search API 文档:https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets 使用非官方 Python 包装器:https:// /github.com/bear/python-twitter让获取推文变得超级容易。
但是,如果你想抓取 HTML,那就更难了。我正在做类似的事情 - 抓取一个有角度的应用程序,但是,您在屏幕上看到的实际 HTML 实际上是通过“前端 javascript”呈现的。Requests 和 urllib,只获取基本的 HTML,但不运行 javascript。
您可以使用selenium,它基本上是一个可以自动执行任务的浏览器。由于它的行为类似于浏览器,它实际上运行的是前端 javascript,这意味着您将能够抓取网页。
这里有一篇很棒的文章解释了你可以抓取 twitter 的不同方式https://medium.com/@dawran6/twitter-scraper-tutorial-with-python-requests-beautifulsoup-and-selenium-part-2-b38d849b07fe
推荐阅读
- node.js - 与 Kubernetes 连接外部 Oracle 数据库时出现随机错误
- r - 使用管道中的标识符列创建一个具有最大值的新列
- ruby-on-rails - 更改“请匹配请求的格式。” 别的东西?
- python - 我是否需要为 Django 客户端的 JWT 令牌实现刷新系统?
- javascript - 如何发出多个请求并将数据对象保存到新数组中
- python - 我可以将 pyNaCl 密封盒与现有的 openssh 密钥对一起使用吗?
- javascript - 为什么我的 html 代码中的函数没有被调用?
- mysql - 存储国家代码+电话的最佳索引选择
- flutter - 调用 setState 时如何维护随机生成的值?| 扑
- sorting - 通过 Trace 对 Pytorch 张量进行排序