我是Web抓取/编码的新手,我试图使用Python request / BeautifulSoup解析html代码,以获得一些物理和化学特性。
由于某种原因,尽管我已经成功地在其他网站上使用了以下脚本,但是BeautifulSoup仅从页眉和页脚打印了几行,然后打印了没有意义的HTML代码页。这是我一直在使用的代码:
import requests
from bs4 import BeautifulSoup
url='https://comptox.epa.gov/dashboard/dsstoxdb/results?search=ammonia#properties'
response = requests.get(url).text
soup=BeautifulSoup(response,'lxml')
print(soup.prettify())
当我尝试查找表甚至一行时,它没有输出。有什么我没考虑的吗?任何帮助将不胜感激!
答案 0 :(得分:0)
如果页面在加载后由JavaScript填充,requests
和BeautifulSoup
将无法正确处理该页面,这是很常见的。最好的办法是切换到the selenium
module,这将使您的程序可以动态访问页面并与元素进行交互。加载后(可能单击几个元素),您可以将HTML馈送到BeautifulSoup
并按您希望的方式处理它。我建议您开始使用的基本框架如下:
from selenium import webdriver
browser = webdriver.Chrome() # You'll need to download drivers from link above
browser.implicitly_wait(10) # probably unnecessary, just makes sure all pages you visit fully load
browser.get('https://stips.co.il/explore')
while True:
input('Press Enter to print HTML')
HTML = browser.page_source
print(HTML)
只需在浏览器中四处单击,当您想查看HTML是否正确时,请单击返回至提示并按ENTER
。 This is how you would locate elements automatically,因此您不必每次都手动与页面互动
答案 1 :(得分:0)
它出现在属性之一中。您可以提取以下内容(那里有很多信息,但我将其归为物理性质
import requests
from bs4 import BeautifulSoup as bs
import json
url = "https://comptox.epa.gov/dashboard/dsstoxdb/results?search=ammonia#properties"
r = requests.get(url)
soup = bs(r.content, 'lxml')
soup.select_one('[data-result]')['data-result']
data = json.loads(soup.select_one('[data-result]')['data-result'])
properties = data['physprop']
print(properties)