2017-04-04 6 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()のような方法の1つを使用してください。

+0

はまだ多分あなたのコンテンツはJavaScriptを介して生成される –

0

あなたはたぶん、あなたの問題は、あなたがお使いのブラウザでJavaScriptを無効にした場合、あなたが簡単にあなたがしたいことspan要素が消えて見ることができますこの修正

+0

まだ働いていない –

+0

@ZeeshanUlHaqを動作していませんか? それで、応答ではそれを見ることができません(jsはレンダリングされないので) –

+0

はい、あなたは正しいです。コンテンツはJavaScriptを使用して生成されます。どのようにしてHTMLコンテンツを入手できますか? –

1

後に消えます応答

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

をデコードする必要がまず第一に。 その要素を得るために、可能な解決策の1つは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で)Webページのソースに深いダウン目的の値を検索し、正規表現を使用して、スパン値を抽出します。

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

関連する問題