BS4仅打印web页的某些部分时出现问题

2024-06-28 15:18:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,bs4只找到一些东西在html。具体地说,当我尝试打印span.nav2\u 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\u value的当前值 但是当我启动程序时,它不会打印任何东西,即使很难,我可以看到值是4000,当我检查页面时


Tags: textimporturlvaluelinkresrequestslxml
2条回答

Website页是获取数据的javascript请求呈现,因此需要使用自动化库,如selenium。根据浏览器要求下载selenium web驱动程序

为chrome浏览器下载selenium web驱动程序:

http://chromedriver.chromium.org/downloads

为chrome浏览器安装web驱动程序:

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

硒教程:

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

订单号:

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

似乎您希望获得的代码是通过javascript动态添加到web页面的。 为了更新web js部件,必须使用requestsrender()函数

相关问题 更多 >