靓汤不饱

2024-10-05 14:26:25 发布

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

美女苏做了些奇怪的事,我不知道为什么。你知道吗

import requests
from bs4 import BeautifulSoup

url = "nsfw"
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
cards = soup.find_all("div", {"class": "card-body"})
cards.pop(0)
cards.pop(0)
cards.pop(0)  # i really like to pop
texte = []
print(soup)
for i, card in enumerate(cards):
    texte.append(card.text)
    if i == len(cards)-1:
        print(card)

现在我希望它做的是获取div并将div的文本放入数组中。它确实有效。9个分区中的前8个分区。第九节非常短。打印结果:

<div class="card-body" id="card_Part_9"><p class="storytext"><span class="brk2_firstwords">“Door’s open,” Brendan shouted.</span></p>
    <p class="storytext">Jeffrey</p></div>    

但就网站本身而言,它并没有到此为止。这里是一个截图:https://i.imgur.com/CmvYzfJ.png

为什么会这样?我能做些什么来防止这种情况?我已经尝试更改解析器,但这不会更改结果。该站点不使用Javascript加载内容。你知道吗

使用浏览器打开时的结构:https://pastebin.com/N2bPYFBD

但当我打印(汤)时,我得到:

<p class="storytext">Jeffrey</p></div></div></div></div></div></div></div></body></html> entered the apartment```

Tags: textimportdivurlhtmlbodycardrequests
2条回答

似乎html.parser把DOM搞砸了。lxml-解析器适合我:

import requests
from bs4 import BeautifulSoup

url = "six-pack-thingy"
r = requests.get(url)
soup = BeautifulSoup(r.text, 'lxml')
cards = soup.find_all("div", {"class": "card-body"})
texte = [card.text for card in cards[3:]]

我想我也可以发表我的涂鸦:

from selenium import webdriver

driver = webdriver.Firefox()
driver.get('six-pack-thingy')
elems = driver.find_elements_by_class_name('card-body')

texte = [t.text for t in elems[3:]]

不过,您需要一些webdriver来运行selenium。你熟悉吗?你知道吗

相关问题 更多 >