如何修复数据库中的Python请求/ BeautifulSoup响应

时间:2019-04-15 21:54:21

标签: python web-scraping beautifulsoup python-requests

我是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())

当我尝试查找表甚至一行时,它没有输出。有什么我没考虑的吗?任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

如果页面在加载后由JavaScript填充,requestsBeautifulSoup将无法正确处理该页面,这是很常见的。最好的办法是切换到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是否正确时,请单击返回至提示并按ENTERThis 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)