簡體   English   中英

Python,如何從 URL 中解析 HTML?

[英]Python, How to parse HTML from URL?

我有 Python 代碼,可以解析來自包含 HTML 代碼的字符串變量的數據。

我想要從 URL 獲取 HTML 然后解析這些數據的代碼。

工作代碼(解析 HTML):

from bs4 import BeautifulSoup

data = '''\
<html>
  <head>
    <meta name="generator"
     content="HTML Tidy for HTML5 (experimental) for Windows https://github.com/w3c/tidy- 
      html5/tree/c63cc39" />
    <title></title>
   </head>
 <body>
<div class="Eqh F6l Jea k1A zI7 iyn Hsu">
  <div class="Shl zI7 iyn Hsu">
    <a data-test-id="search-guide" href="" title="Search for &quot;living room colors&quot;">
      <div class="Jea Lfz XiG fZz gjz qDf zI7 iyn Hsu" style="white-space: nowrap; background-color: 
         rgb(162, 152, 139);">
        <div class="tBJ dyH iFc MF7 erh tg7 IZT mWe">Living</div>
       </div>
      </a>
     </div>
    </div>
  </body>
 </html>
 '''
soup = BeautifulSoup(data, 'html.parser')
a = soup.select('div.Eqh.F6l.Jea.k1A.zI7.iyn.Hsu a')[0]
print(a['title'])

這是我嘗試過但不起作用的方法(從 URL 獲取 HTML 然后解析):

import requests
from bs4 import BeautifulSoup

vgm_url = 'https://www.pinterest.com/search/pins/?q=skin%20care'
html_text = requests.get(vgm_url).text
soup = BeautifulSoup(html_text, 'html.parser')
a = soup.select('div.Eqh.F6l.Jea.k1A.zI7.iyn.Hsu a')
for a in soup.select('div.Eqh.F6l.Jea.k1A.zI7.iyn.Hsu a'):
    print(a['title'])

我沒有收到任何錯誤,它不打印任何東西。 我感謝您的幫助。

然后在調試過程中使用print(html_text)看看你得到了什么;)。

當您打印它時,您會看到它與頁面源不同(在 Chrome 或其他網絡瀏覽器中查看它,並在 url 中查看 go)。 當您在瀏覽器中對它進行 go 時,您還可以看到該頁面正在加載一段時間。

因此,您需要等待它加載Selenium 之類的東西。

為了演示一點 Selenium,我加載了您的頁面並單擊了帶有定義的 class 的內容,該定義在一段時間后加載:

# you will have to install (Chrome), or another browser driver
from selenium.webdriver import Chrome

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

driver = Chrome(r'C:\Program Files\chromedriver.exe')  # I have (Chrome) installed here

driver.get("https://www.pinterest.com/search/pins/?q=skin%20care")
feeling_lucky_btn = WebDriverWait(driver, 3).until(  # waiting for loading
    EC.presence_of_element_located(
    (By.CLASS_NAME, 'GrowthUnauthPinImage__Image')))  # identifiing element by class name
feeling_lucky_btn.click()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM