【问题标题】:Scraping elements generated by javascript queries using python使用 python 抓取由 javascript 查询生成的元素
【发布时间】:2018-04-04 13:11:32
【问题描述】:

我正在尝试访问其内容由 javascript 生成的元素中的文本。例如,从this site 获取 Twitter 分享的数量。

我尝试使用 urllib 和 pyqt 来获取页面的 html,但是由于内容需要生成 javascript,因此它的 HTML 不存在于 urllib/pyqt 的响应中。我目前正在使用 selenium 来完成这项任务,但是它花费的时间比我想要的要长。

是否可以在不打开浏览器页面的情况下访问这些数据?

这个问题过去已经被问过,但我发现的结果要么是c# specific,要么提供一个链接到自gone dead以来的解决方案

【问题讨论】:

  • Selenium 通常是最好的选择。除非您可以隔离获取数据的特定 javascript 请求

标签: javascript python html web-scraping


【解决方案1】:

工作示例:

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 参数替换为您想要获取推特计数的页面的网址。

【讨论】:

  • 非常感谢。我可以确认这有效。您能否提供更多有关您如何找到请求的信息?我想做同样的事情,但对于 cmets 的数量,即获取 cmets 的数量。我正在使用 chrome 并试图通过网络选项卡查找请求。是否有任何技巧可以帮助识别所需的请求?
  • 你可以过滤“javascript”、“XHR”和“WS” 我刚刚打开“response”选项卡,滚动浏览请求,直到找到“twitter”
  • cmet的数量,你应该检查disqus
  • 另外,在上一页:daphnecaruanagalizia.com你可以看到每篇文章的cmets数量,它不是javascript,所以很容易得到。检查BeautifulSoup
【解决方案2】:

在启动 Selenium 网络浏览器后,您可以执行类似以下操作,然后将 driver.page_source 传递给 BeautifulSoup 库(不幸的是,在使用防火墙的情况下无法对其进行测试):

soup = BeautifulSoup(driver.page_source, 'html.parser')

shares = soup.find('span', {'class': 'st_twitter_hcount'}).find('span', {'class': 'stBubble_hcount'})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 2012-04-20
    • 2015-04-14
    • 2020-07-01
    • 2020-12-17
    • 1970-01-01
    相关资源
    最近更新 更多