【问题标题】:How to fix Python requests/BeautifulSoup response from database如何修复来自数据库的 Python 请求/BeautifulSoup 响应
【发布时间】:2019-09-05 22:35:23
【问题描述】:

我是网络抓取/编码的新手,我正在尝试使用 Python 请求/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())

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

【问题讨论】:

  • 您是否尝试阅读此页面的来源?它看起来像您输出的内容吗?答案是肯定的,因为这个网站正在使用某种 dom 操纵器来加载内容,除非你能解释 javascript,否则你将无法从这里删除任何内容
  • 我使用 selenium 通过 javascript 拉出页面或与它们交互。 Selenium 还允许在给定网页上进行点击和其他操作

标签: python web-scraping beautifulsoup python-requests


【解决方案1】:

它存在于其中一个属性中。您可以提取如下(那里有更多信息,但我是物理属性的子集

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)

【讨论】:

  • 工作就像一个魅力!非常感谢。
【解决方案2】:

如果页面在加载后由 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,这样就不用每次都手动和页面交互了

【讨论】:

    猜你喜欢
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 2015-11-09
    • 2020-09-03
    • 1970-01-01
    • 2019-06-08
    相关资源
    最近更新 更多