繁体   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