2016-07-02 10 views
1

​​リンクでは、r_compare_bars_valueクラスのspanタグからテキストを取得したいとします。そのクラスを検索すると、104 (min: 88) fpsというテキストが表示され、min:88部分のみを取得したかったのです。私のコード;スパンタグからテキストを取得する

from bs4 import BeautifulSoup 
import urllib.request,requests 
r = urllib.request.urlopen('http://www.notebookcheck.net/Computer-Games-on-Laptop-Graphics-Cards.13849.0.html').read() 
soup = BeautifulSoup(r) 

links = [a['href'] for a in soup.select(".gpugames_header_games > a")] 

for url in links: 
    if url != "": 
     print (url) 
     rr = requests.get(url).content 
     soup = BeautifulSoup(rr,"html.parser") 

     for aa in soup.select("div.r_compare_bars_value span"): 
      print (aa) 
      if "min:" in aa.text: 
       print (aa.text) 

しかし、それはないmin:88一部、印刷された文字列の他のクラスの多くで、今は何も出力しません。私もdiv.tx-nbc2fe-pi1を試して、スパンタグなしで試しました。そのウェブサイトのコードは本当に混乱しています。私のミスはどこにありますか?これをどのように修正できますか?

答えて

0

など、ストリッピング、分割によって返されたテキストを操作することなく、それを行うための方法はありません。.. r_compare_bars_valueはないのdivがそうsoup.select("span.r_compare_bars_value")が正しい選択であるスパン内でも実際にあります。

これは実際には正規表現のために良いユースケースである:いくつかのURLに上記を実行する

from bs4 import BeautifulSoup 
import requests 
import re 
mn = re.compile("\(min:.*?\)") 

r = requests.get('http://www.notebookcheck.net/Computer-Games-on-Laptop-Graphics-Cards.13849.0.html').content 
soup = BeautifulSoup(r, "lxml") 

links = (a["href"] for a in soup.select(".gpugames_header_games > a")) 


for url in links: 
    if url: 
     rr = requests.get(url).content 
     soup = BeautifulSoup(rr, "html.parser") 
     for aa in soup.select("span.r_compare_bars_value"): 
      m = mn.search(aa.text) 
      if m: 
       print(m.group()) 

あなたが得られます。

(min: 88) 
(min: 164) 
(min: 251) 
(min: 281) 
(min: 283) 
(min: 291) 
(min: 75) 
(min: 129) 
(min: 202) 
(min: 64) 
(min: 94) 
(min: 178) 
(min: 53) 
(min: 97) 
(min: 154) 
(min: 199) 
(min: 289) 
(min: 296) 
(min: 55) 
(min: 78) 
(min: 39) 
(min: 57) 
(min: 109) 
(min: 153) 
(min: 200) 
(min: 216) 
(min: 39) 
(min: 59) 
(min: 110) 
関連する問題