簡體   English   中英

BS4僅打印網頁的某些部分時出現問題

[英]Problem with BS4 printing only certain parts of the web page

我遇到的問題是bs4只能在html中找到一些東西。 特別是當我嘗試打印span.nav2__menu-link-main-text時,它選擇它並打印它沒有問題,但當我嘗試選擇頁面的其他部分時,它可能會選擇它,但它不想打印出來。 這是打印的代碼和不打印的代碼:

嘗試使用除lxml之外的其他解析器,但沒有工作。

#This one prints

from bs4 import BeautifulSoup
import requests
import lxml

url = 'https://osu.ppy.sh/users/12008062'
res = requests.get(url)
soup = BeautifulSoup(res.text, 'lxml')

for i in soup.select('span.nav2__menu-link-main-text'):
    print(i.text)

#This one does not print

from bs4 import BeautifulSoup
import requests
import lxml

url = 'https://osu.ppy.sh/users/12008062'
res = requests.get(url)
soup = BeautifulSoup(res.text, 'lxml')

for i in soup.select('div.value-dispaly__value'):
    print(i.text)

我希望這個程序可以打印div.value-dispaly__value的當前值,但是當我啟動程序時,它甚至沒有打印任何東西,當我檢查頁面時,我可以看到值為4000。

看來您願意獲得的代碼是通過javascript動態添加到網頁的。 為了更新web js部分,你必須使用requests render()函數。

網站頁面是javascript請求呈現以獲取數據,因此您需要使用像selenium這樣的自動化庫。 根據您的瀏覽器要求下載selenium web驅動程序。

下載Chrome瀏覽器的selenium web驅動程序:

http://chromedriver.chromium.org/downloads

為Chrome瀏覽器安裝Web驅動程序:

https://christopher.su/2015/selenium-chromedriver-ubuntu/

Selenium教程:

https://selenium-python.readthedocs.io/

將您的代碼替換為:

from selenium import webdriver
from bs4 import BeautifulSoup
import time

driver = webdriver.Chrome('/usr/bin/chromedriver')
driver.get('https://osu.ppy.sh/users/12008062')
time.sleep(3)

soup = BeautifulSoup(driver.page_source, 'lxml')

for i in soup.find_all('div',{"class":"value-display__value"}):
    print(i.get_text())

O / P:

#47,514
#108
11d 19h 49m
44
4,000
11d 19h 49m
44
4,000
#47,514
#108
0
0

暫無
暫無

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

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