【问题标题】:Selecting div with Beautiful Soup用 Beautiful Soup 选择 div
【发布时间】:2020-07-28 21:59:23
【问题描述】:

您好,我有这样一个 html,当我用 Beautiful Soup 解析它时,我无法选择类文本。认为问题在于嵌套标签不被识别为它的孩子。 如何选择 span 标签文本?

谢谢

<div data-component="new_enquiry_form_app" data-props="{"isTelRequired":false,"placement":"top",}">
  <section class="enquiry-form-box__wrapper">
    <div class="enquiry-form-box enquiry-form-box--inverted"> 
      <form class="enquiry-form-box__form" tabindex="-1">
        <fieldset class="enquiry-form-box__wrapper">
          <div class="enquiry-form-box__fields">
            <div class="k-ns">
              <span class="text-gray block mt-3 font-bold text-sm">Property reference: 412</span>
            </div>
          </div>
        </fieldset>
      </form>
    </div>
  </section>

【问题讨论】:

  • 你想要什么文字? Property reference: 412?
  • @MendelG 是 属性参考:412

标签: python html web-scraping beautifulsoup


【解决方案1】:

试试这个:

from bs4 import BeautifulSoup

html = '''<div data-component="new_enquiry_form_app" data-props="{"isTelRequired":false,"placement":"top",}">
  <section class="enquiry-form-box__wrapper">
    <div class="enquiry-form-box enquiry-form-box--inverted"> 
      <form class="enquiry-form-box__form" tabindex="-1">
        <fieldset class="enquiry-form-box__wrapper">
          <div class="enquiry-form-box__fields">
            <div class="k-ns">
              <span class="text-gray block mt-3 font-bold text-sm">Property reference: 412</span>
            </div>
          </div>
        </fieldset>
      </form>
    </div>
  </section>'''
soup = BeautifulSoup(html, 'html.parser')
span = soup.select_one('span.text-gray.block.mt-3.font-bold.text-sm')
print(span.get_text())

打印:

Property reference: 412

那么这是一种方式:

from selenium import webdriver
driver = webdriver.Firefox(executable_path='c:program/geckodriver')
driver.get('https://www.kyero.com/en/property/7689206-villa-for-sale-sant-joan-de-labritja')

span = driver.find_element_by_css_selector('span.text-gray.block.mt-3.font-bold.text-sm')
print(span.text)
driver.close()

打印:

Property reference: 412

注意你需要seleniumgeckodriver,并且在这段代码中,geckodriver设置为从c:/program/geckodriver.exe导入 @Andrej Kesely 的另一个答案更快,所以我给出了一个硒答案。

【讨论】:

  • 感谢您的回答,仅此代码会打印“Property reference: 412”,但不幸的是,当我尝试在整个网页上打印 None 时。
  • 然后给我网址@Arthur
  • 更新了我的答案@Arthur
  • 非常感谢,但我还是很好奇,为什么在这种情况下没有办法只选择 span 或 div,就像在其他情况下一样?
  • 数据是用 JavaScript 加载的,请求不运行 JavaScripts
【解决方案2】:

要打印参考标签,您可以使用此脚本(数据存储在 HTML 文档内的 javascript 变量中):

import re
import json
import requests


url = 'https://www.kyero.com/en/property/7689206-villa-for-sale-sant-joan-de-labritja'
headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0'}
html_text = requests.get(url, headers=headers).text
data = json.loads( re.search(r'window\.initialState = (.*);', html_text).group(1) )

# uncomment this to print all data:
# print(json.dumps(data, indent=4))

print(data['property']['referenceLabel'])

打印:

Property reference: 412

【讨论】:

  • 非常感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 2014-04-23
  • 2016-05-10
  • 2019-09-01
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 2019-12-23
  • 2022-01-11
相关资源
最近更新 更多