使用Python请求来模拟点击“显示更多”信息。按键

时间:2018-01-09 02:10:54

标签: python web-scraping python-requests

我不确定用于点击“显示更多”按钮的代码。我想得到一份正在做某些话题的大学名单。以下是其中一个网站

http://www.sciencedirect.com/science/article/

你的帮助将得到真正的赞赏

谢谢

3 个答案:

答案 0 :(得分:2)

你不应该用Python模拟一个真实的"点击" "显示更多"按钮来完成网页抓取。

"显示更多"网站中的按钮通常与某些JavaScript相关联,这些JavaScript要么在HTML中显示隐藏元素(请参阅Bootstrap's collapse class以获取典型示例),要么触发对某些Web服务(例如REST API)的请求要插入DOM

的信息

无论哪种方式,您都可以抓取这些数据。对于前者,在DOM中查找隐藏元素(查看页面的源[Ctrl + U]并搜索HTML [Ctrl + F]),并使用典型的网络编写工具。对于后者,请使用像Google Dev Tools这样的东西。单击“#34;显示更多"然后尝试用Python复制该请求。

在您给出的具体示例中,您希望的数据显示为HTML <script>标记作为JSON对象。在HTML中搜索单词&#34; affiliation&#34;。

答案 1 :(得分:1)

您必须选择其他工具才能按下按钮。一种可能的解决方案是Selenium,它可以告诉浏览器按下按钮。以下示例单击显示更多按钮。

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def executeTest():
    global driver
    driver.get('http://www.sciencedirect.com/science/article/pii/S2211926417300024')
    time.sleep(7)
    element = driver.find_element_by_xpath('//*[@id="app"]/div/div/div/section/div/div[2]/article/div[2]/button')
    element.click()
    time.sleep(3)

def startWebDriver():
    global driver
    options = Options()
    options.add_argument("--disable-infobars")
    driver = webdriver.Chrome(chrome_options=options)

if __name__ == "__main__":
    startWebDriver()
    executeTest()
    driver.quit()

答案 2 :(得分:0)

通过阅读上面的迈克尔·克伦肖的回答,我刚遇到一个类似的问题。这是对我有用的东西:

  1. 加载要抓取的页面。
  2. 去检查并选择网络。
  3. 现在单击显示更多按钮。

您现在应该在网络标签中看到发出请求的确切网址。如果您在页面加载之前不打开网络选项卡,这会容易得多。这样,选项卡中的唯一信息就是单击“显示更多信息”时发出的请求。

然后我在代码中添加了几行,如下所示:

page_source = response.text
if "Show More" in page_source:

然后,在此之后,我在其上添加了我的抓取功能,以使其遍历url结构。 https://blog.scrapinghub.com/2016/06/22/scrapy-tips-from-the-pros-june-2016上有一篇很好的文章,介绍了如何在网上抓取。

希望这会有所帮助。