我通過抓取網站獲得了字串串列。如果它們中包含“L”,我希望代碼列印該串列中的 HTML 元素。我設法撰寫了一個在“普通串列”上運行良好的代碼,我手動將其寫入代碼(下面的示例 1),但是一旦我嘗試使用該代碼過濾 HTML 元素串列,它只會列印空“[ ]" 即使我知道應該有多個值。
這是有效的代碼:
import urllib.request
from bs4 import BeautifulSoup
url = 'https://kouluruoka.fi/menu/kouvola_koulujenruokalista'
request = urllib.request.Request(url)
content = urllib.request.urlopen(request)
parse = BeautifulSoup(content, 'html.parser')
span_elements = parse.find_all('span')
#a list like this works just fine
lst = ['HOLA','BONJOUR','HELLO','KONNICHIWA','SALVE','GUTEN DAG']
filtered_list = list(filter(lambda k: 'L' in k, lst))
print(filtered_list)
>>>['HOLA','HELLO','SALVE']
但是,一旦我使用我的網路抓取串列(span_elements)而不是 hellos 串列,它就會列印空白:
import urllib.request
from bs4 import BeautifulSoup
url = 'https://kouluruoka.fi/menu/kouvola_koulujenruokalista'
request = urllib.request.Request(url)
content = urllib.request.urlopen(request)
parse = BeautifulSoup(content, 'html.parser')
span_elements = parse.find_all('span')
#a list of HTML elements doesnt work
lst = span_elements
filtered_list = list(filter(lambda k: 'L' in k, lst))
print(filtered_list)
>>>[]
我已經嘗試了幾個小時但一無所獲,感謝您的幫助!謝謝!
uj5u.com熱心網友回復:
filters_list 中的元素不是字串,而是 bs4 元素物件。str如果您在使用之前更改過濾器以將其轉換為in,則代碼有效:
filtered_list = list(filter(lambda k: 'L' in str(k), lst))
如果您只想要內部<span>使用.text:
lst = [ x.text for x in span_elements ]
filtered_list = list(filter(lambda k: 'L' in k, lst))
我從未使用過 bs4,但線索在于列印原始串列:
print(lst)
輸出:
[<span>KOULURUOKA.FI</span>, <span></span>, <span>T?m?<!-- --> viikko</span>, ...
這不是字串串列,'看不到。
uj5u.com熱心網友回復:
您需要一個對每個 span 元素的 text 屬性的參考串列:
import requests
from bs4 import BeautifulSoup as BS
(r := requests.get('https://kouluruoka.fi/menu/kouvola_koulujenruokalista')).raise_for_status()
soup = BS(r.text, 'lxml')
span = soup.find_all('span')
print(list(filter(lambda k: 'L' in k, [s.text for s in span])))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/415142.html
標籤:
上一篇:根據SQL中的條件創建另一列
