使用Python在Twitter中刮掉嵌套的Div和Spans?

时间:2016-01-20 23:49:14

标签: 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?

1 个答案:

答案 0 :(得分:2)

似乎您的GET请求返回有效的HTML但#timeline元素中没有tweet元素。但是,将用户代理添加到请求标头似乎可以解决此问题。

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)