我正在嘗試從以下代碼中獲取發布日期和下載次數
<p><i class="no-flip-over">Release date</i> : <span class="no-flip-over">2022-06-02</span></p>
<p><i class="no-flip-over">Downloads</i> : <span class="no-flip-over" data-times-funtouch="">703</span></p>
這是我的刮擦功能
def phone_data(url):
r = requests.get(url)
sp = BeautifulSoup(r.text, 'lxml')
data = {
"Release_Date" : sp.select_one('i.no-flip-over').text.strip().replace('\n', ' '),
"Downloads" : sp.select_one('i.no-flip-over').text.strip().replace('\n', ' '),
}
print(data)
phone_data('https://www.vivo.com/in/support/upgradePackageData?id=132')
這是我的輸出:
{'Release_Date': '', 'Downloads': ''}
我看不到字典中除了鍵之外的值
uj5u.com熱心網友回復:
@QHarr 提供的解決方案實際上我還建議您確切了解要抓取的事實,因此這只是來自其他站點的替代方案,可能更適合問題的標題
只需迭代所有規范并使用鍵值對創建一個字典:
data = dict(e.text.split(' : ',1) for e in sp.select('.msg h1 ~ p:has(i span)'))
.keys()當然,這兩個事實你會刮得更多,但也會對所有可能有錯別字的東西有一個很好的了解,......你可以在后期處理中選擇一個調整。
例子
import requests
from bs4 import BeautifulSoup
def phone_data(url):
r = requests.get(url)
sp = BeautifulSoup(r.text, 'lxml')
data = dict(e.text.split(' : ',1) for e in sp.select('.msg h1 ~ p:has(i span)'))
return data
phone_data('https://www.vivo.com/in/support/upgradePackageData?id=132')
{'Release date': '2022-02-25',
'File size': '1.87M',
'Downloads': '3545',
'Support system': 'Windows'}
uj5u.com熱心網友回復:
除了類之外,我還會使用:-soup-contains目標,并根據需要洗掉跨度作為相鄰元素。您可以使用相鄰的兄弟組合器從最初由類匹配的元素移動 :-soup-contains到相鄰的跨度。
strip()然后,您可以避免兩次重復相同的資訊,并且可以洗掉對和的呼叫replace()。
def phone_data(url):
r = requests.get(url)
sp = BeautifulSoup(r.text, 'lxml')
data = {
"Release_Date" : sp.select_one('.no-flip-over:-soup-contains("Release date") span').text,
"Downloads" : sp.select_one('.no-flip-over:-soup-contains("Downloads") span').text,
}
print(data)
phone_data('https://www.vivo.com/in/support/upgradePackageData?id=132')
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/486865.html
標籤:Python html 网页抓取 美丽的汤 css 选择器
上一篇:從mcqs抓取資料
下一篇:將資料追加到資料框中
