我正在尝试访问其内容由javascript生成的元素中的文本。例如,从this site获取推特份额的数量。
我尝试使用urllib和pyqt来获取页面的html,但是由于内容需要生成javascript,因此urllib / pyqt的响应中不存在HTML。我目前正在使用硒来完成这项任务,但它的使用时间比我想要的要长。
是否可以在不在浏览器中打开页面的情况下访问此数据?
过去已经提出过这个问题,但我找到的结果是c# specific或提供了自gone dead
之后的解决方案的链接答案 0 :(得分:2)
工作示例:
import urllib
import requests
import json
url = "https://daphnecaruanagalizia.com/2017/10/crook-schembri-court-today-pleading-not-crook/"
encoded = urllib.parse.quote_plus(url)
# encoded = urllib.quote_plus(url) # for python 2 replace previous line by this
j = requests.get('https://count-server.sharethis.com/v2.0/get_counts?url=%s' % encoded).text
obj = json.loads(j)
print(obj['clicks']['twitter'] + obj['shares']['twitter'])
# => 5008
说明:
检查网页,您可以看到它对此发出了请求:
https://count-server.sharethis.com/v2.0/get_counts?url=https%3A%2F%2Fdaphnecaruanagalizia.com%2F2017%2F10%2Fcrook-schembri-court-today-pleading-not-crook%2F&cb=stButtons.processCB&wd=true
如果您将其粘贴到浏览器中,您将获得所有答案。然后用url玩一下,你可以看到删除额外的参数会给你一个不错的json。
正如您所看到的,您只需将请求的url
参数替换为您想要获取Twitter计数的页面的网址。
答案 1 :(得分:1)
在启动Selenium Web浏览器之后,您可以执行类似以下的操作,然后将driver.page_source传递给BeautifulSoup库(遗憾的是,无法在防火墙处于适当位置时对其进行测试):
soup = BeautifulSoup(driver.page_source, 'html.parser')
shares = soup.find('span', {'class': 'st_twitter_hcount'}).find('span', {'class': 'stBubble_hcount'})