【发布时间】:2017-08-04 19:17:26
【问题描述】:
我正在开发一个 python 网络爬虫,试图为我正在做的项目获取信息。我在 twitter atm 上使用它,因为我发现 twitter api 不会抓取超过一周的信息。我使用的代码是:
import urllib
import urllib.request
from bs4 import BeautifulSoup as soup
my_url = 'https://twitter.com/search?q=australian%20megafauna&src=typd&lang=en'
page_html = urllib.request.urlopen(my_url)
page_soup = soup(page_html, "html.parser")
print(page_soup.title.text)
for tweet in page_soup.findAll('p', {'class': 'TweetTextSize'}, lang='en'):
print(tweet.text)
据我了解,findAll 的属性部分可以使用冒号作为 LIKE 函数,这似乎可以正常工作。我正在使用“findAll”查看的 HTML 的特定部分是:
<p class="TweetTextSize js-tweet-text tweet-text" lang="en" data-aria-
label-part="0"></p>
现在我浏览了其他推文,它们似乎都在使用这个类,但是我无法弄清楚为什么它只会返回 1 条推文。奇怪的是,它甚至不是第一条推文(而是第二条)。
如果有人能指出我正确的方向,那就太好了。谢谢。
PS:我还想问一下是否有办法抓取所有推文。在浏览 HTML 时,我发现有一个名为“stream-container”的类,它有一个元素“data-min-position”,当您向下滚动并打开新推文时,该元素会发生变化。我在想,即使我的代码确实有效,它也可能无法看到所有搜索结果,只能从初始页面抓取。谢谢。
编辑:注意到我的代码使用了一个带有 lang='en' 的 url,所以有点多余,但它似乎根本不影响它
【问题讨论】:
-
尝试改用
tweet-text类,看看会发生什么。 -
还是一样。我也尝试输入
count,但似乎不起作用 -
当你向下滚动时加载推特内容,你为什么不使用
selenium -
试试
printing你的page_html和page_soup变量,看看它们是否能得到你预期的结果。只是为了确定。 -
@Mekicha 你是对的,我的 page_html 只给了我这两条推文。我该如何解决?
标签: python html web-scraping beautifulsoup