【问题标题】:Parse javascript website with Selenium and BeautifulSoup使用 Selenium 和 BeautifulSoup 解析 javascript 网站
【发布时间】:2020-03-20 04:29:27
【问题描述】:

我正在尝试在本地图书馆的网站上进行一些抓取,特别是搜索结果屏幕。这是我要解析的示例 URL:https://catalog.denverlibrary.org/search/searchresults.aspx?ctx=1.1033.0.0.6&type=Keyword&term=How%20Not%20to%20Die&by=TI&sort=RELEVANCE&limit=TOM=*&query=&page=0&searchid=3

据我所知,该网站需要启用 javascript,但我无法完全启用它来满足我的目的。以下是相关代码:

from bs4 import BeautifulSoup
from selenium import webdriver

driver = webdriver.Firefox()
driver.get('https://catalog.denverlibrary.org/search/searchresults.aspx?ctx=1.1033.0.0.6&type=Keyword&term=How%20Not%20to%20Die&by=TI&sort=RELEVANCE&limit=TOM=*&query=&page=0&searchid=1')
driver.implicitly_wait(1000)

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

当我查看从 Soup 打印的内容时,我看到了文字

JavaScript 已在您的浏览器中被禁用。请启用 JavaScript 为了享受本网站的所有功能。

我觉得我缺少一些关于如何启用 Javascript 的基本知识,但我找不到。有什么帮助吗?

【问题讨论】:

    标签: python selenium beautifulsoup


    【解决方案1】:

    您可以使用 selenium Firefox 的配置文件选项启用 JavaScript。

    profile.set_preference("javascript.enabled", True)
    

    这是怎么做的。

    profile = webdriver.FirefoxProfile()
    profile.set_preference("general.useragent.override", "Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0")
    profile.set_preference("javascript.enabled", True)
    broswer = webdriver.Firefox(profile)
    broswer.get('https://catalog.denverlibrary.org/search/searchresults.aspx?ctx=1.1033.0.0.6&type=Keyword&term=How%20Not%20to%20Die&by=TI&sort=RELEVANCE&limit=TOM=*&query=&page=0&searchid=1')
    driver.implicitly_wait(1000)
    
    soup = BeautifulSoup(driver.page_source,'html.parser')
    print(soup)
    

    【讨论】:

    • 这似乎不起作用。值得注意的是,当 Firefox 由于这段代码而打开时,它会正确呈现所有搜索结果?
    【解决方案2】:

    原来,只是页面的搜索部分还没有完成加载。所以,我添加了这行代码来让它工作

    WebDriverWait(broswer, 10).until(EC.presence_of_element_located( ( By.ID, "searchResultsDIV" ) ))
    

    从this question 的回答中找到它。

    【讨论】:

      猜你喜欢
      • 2018-05-11
      • 1970-01-01
      • 2017-08-21
      • 2012-12-07
      • 2020-03-13
      • 2017-03-08
      • 1970-01-01
      • 2022-01-11
      相关资源
      最近更新 更多