javascript - 用于 JavaScript 生成的内容的 Python Web 抓取

标签 javascript python web-scraping scrape

我正在尝试使用 python3 返回由 http://www.doi2bib.org/ 生成的 bibtex 引文. url 是可预测的,因此脚本无需与网页交互即可计算出 url。我试过使用 selenium、bs4 等,但无法在框中获取文本。

url = "http://www.doi2bib.org/#/doi/10.1007/s00425-007-0544-9"
import urllib.request
from bs4 import BeautifulSoup
text = BeautifulSoup(urllib.request.urlopen(url).read())
print(text)

谁能建议一种在 python 中将 bibtex 引文作为字符串(或其他)返回的方法?

最佳答案

这里不需要BeautifulSoup。有一个额外的 XHR 请求发送到服务器以填写 bibtex 引用,模拟它,例如,用 requests :

import requests

bibtex_id = '10.1007/s00425-007-0544-9'

url = "http://www.doi2bib.org/#/doi/{id}".format(id=bibtex_id)
xhr_url = 'http://www.doi2bib.org/doi2bib'

with requests.Session() as session:
    session.get(url)

    response = session.get(xhr_url, params={'id': bibtex_id})
    print(response.content)

打印:

@article{Burgert_2007,
    doi = {10.1007/s00425-007-0544-9},
    url = {http://dx.doi.org/10.1007/s00425-007-0544-9},
    year = 2007,
    month = {jun},
    publisher = {Springer Science $\mathplus$ Business Media},
    volume = {226},
    number = {4},
    pages = {981--987},
    author = {Ingo Burgert and Michaela Eder and Notburga Gierlinger and Peter Fratzl},
    title = {Tensile and compressive stresses in tracheids are induced by swelling based on geometrical constraints of the wood cell},
    journal = {Planta}
}

您也可以使用 selenium 解决它。这里的关键技巧是使用 Explicit Wait等待引用to become visible :

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get('http://www.doi2bib.org/#/doi/10.1007/s00425-007-0544-9')

element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//pre[@ng-show="bib"]')))
print(element.text)

driver.close()

打印与上述解决方案相同。

关于javascript - 用于 JavaScript 生成的内容的 Python Web 抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28289699/

相关文章:

javascript - 使用Axios进行API调用,尝试一次抓取9首歌曲,超过Napster API的100首限制

javascript - MVC 4 中使用 JavaScript 清除文本

Python Sympy 打印差异化的用户定义复合函数;如何切换替换

python - 查找两个文档之间的相似句子并计算整个文档中每个部分的相似度得分

python - 在 python 中调用 Firefox webdriver

php - 如果返回 "Failed to Open Steam",如何继续抓取到下一个数组(i)

python - 使用 beautifulSoup 抓取 CSS 信息

javascript - Wicket 口和 JavaScript : any way for Wicket to get notified of an updated text?

javascript - 检查两个字符串的顺序是否相同

python - 将一个数据框中的行中的多个字符串匹配到另一个数据框中的行