2017-04-04 59 views
1

我想提取這是在給定的快照一個特定區間的文本。我無法通過它的類屬性找到跨度。我已附加了要提取的數據的html源(快照)。 有什麼建議嗎?按類查找範圍並提取其內容

import bs4 as bs 
import urllib 
sourceUrl='https://www.pakwheels.com/forums/t/planing-a-trip-from-karachi-to-lahore-by-road-in-feb-2017/414115/2' 
source=urllib.request.urlopen(sourceUrl).read() 
soup=bs.BeautifulSoup(source, 'html.parser') 

count=soup.find('span',{'class':'number'}) 
print(len(count)) 

看到圖像:

See the image

回答

0

如果你知道如何使用CSS選擇你可以使用:

mySpan = soup.select("span.number") 

它會返回這些都是節點列表對此選擇器有效。 因此mySpan[0]可能包含您需要的東西。然後使用諸如get_text()之類的方法來獲得你所需要的。

+0

仍然沒有工作 –

0

所有你需要解碼響應首先

source=urllib.request.urlopen(sourceUrl).read().decode() 

也許你的問題將消失後,這種修復

+0

仍然沒有工作 –

+0

@ZeeshanUlHaq也許是通過JavaScript產生的內容? 所以作爲迴應你看不到它(因爲js沒有呈現) –

+0

是的,你是對的。內容是通過JavaScript生成的。我如何獲得HTML內容? –

1

如果你在瀏覽器中禁用JavaScript的,你可以很容易地看到你想要正在消失跨度元素。 爲了獲得該元素,可能的解決方案之一可以使用Selenium瀏覽器。

from selenium import webdriver 

driver = webdriver.Chrome() 
driver.get('https://www.pakwheels.com/forums/t/planing-a-trip-from-karachi-to-lahore-by-road-in-feb-2017/414115/2') 
span = driver.find_element_by_xpath('//li[3]/span') 
print(span.text) 
driver.close() 

輸出: enter image description here

另一種解決方案 - 找到所需的值在網頁源深處(在Chrome瀏覽器按下Ctrl + U)和使用正則表達式提取跨度值。

import re 
import requests 
r = requests.get(
    'https://www.pakwheels.com/forums/t/planing-a-trip-from-karachi-to-lahore-by-road-in-feb-2017/414115/2') 
span = re.search('\"posts_count\":(\d+)', r.text) 
print(span.group(1)) 

輸出: enter image description here