python - 使用 Python 在 Twitter 中抓取嵌套的 Div 和 Span?

标签 python html twitter web-scraping beautifulsoup

我正在尝试从 Twitter 搜索结果中抓取点赞和转发。

运行下面的 Python 后,我得到一个空列表,[]。我没有使用 Twitter API,因为它不会查看很久以前的主题标签推文。

我使用的代码是:

from bs4 import BeautifulSoup
import requests

url = 'https://twitter.com/search?q=%23bangkokbombing%20since%3A2015-08-10%20until%3A2015-09-30&src=typd&lang=en'
r  = requests.get(url)
data = r.text
soup = BeautifulSoup(data, "lxml")
all_likes = soup.find_all('span', class_='ProfileTweet-actionCountForPresentation')
print(all_likes)

我可以使用这段代码成功地将 html 保存到文件中。当我搜索文本时丢失了大量信息,例如我要查找的类名......

所以(部分)问题显然在于准确访问源代码。

 filename = 'newfile2.txt'
 with open(filename, 'w') as handle:
      handle.writelines(str(data))

此屏幕截图显示了我正在尝试抓取的跨度。

Screenshot of exactly the span and content I am trying to scrape.

我看过这个问题,其他人也喜欢它,但我还没有完全理解。
How can I use BeautifulSoup to get deeply nested div values?

最佳答案

您的 GET 请求似乎返回了有效的 HTML,但 #timeline 元素中没有推文元素。但是,向请求 header 添加用户代理似乎可以解决这个问题。

from bs4 import BeautifulSoup
import requests

url = 'https://twitter.com/search?q=%23bangkokbombing%20since%3A2015-08-10%20until%3A2015-09-30&src=typd&lang=en'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'}
r = requests.get(url, headers=headers)
data = r.text
soup = BeautifulSoup(data, "lxml")
all_likes = soup.find_all('span', class_='ProfileTweet-actionCountForPresentation')
print(all_likes)

关于python - 使用 Python 在 Twitter 中抓取嵌套的 Div 和 Span?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34912889/

相关文章:

查找两个推特用户关系的算法

python - 在 Python twisted 中创建受控的 TLS 对话并将其存储以用作测试数据

python - 有没有办法杀死一个线程?

html - 在 HTML5 视频中获得 >24 fps 的帧率?

asp.net 超越 CSS 菜单控件

json - 如何从 Web 应用程序访问仅限身份验证的 Twitter API 方法

python - 如何将“添加到python中的字符串

java - 在 android 上安装 python 包

javascript - 固定元素动画在顶部滚动主体

twitter - 按国家/地区获取顶级推特趋势