2016-07-02 12 views
1

In this Link, ich möchte Text aus Span-Tags in r_compare_bars_value Klasse erhalten. Wenn Sie nach dieser Klasse suchen, sehen Sie den Text als 104 (min: 88) fps, ich wollte nur min:88 Teil nehmen. Meine Codes;Erhalten Sie Text aus Span-Tags Ausgabe

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) 

Aber es druckt nichts gerade jetzt, auf andere Klasse viele Saiten gedruckt, nicht min:88 Teil. Ich habe auch versucht div.tx-nbc2fe-pi1 und versuchte ohne span-Tag als auch. Die Codes sind in dieser Website sind wirklich chaotisch. Wo ist mein Fehler und wie kann ich das beheben?

Antwort

0

Es gibt keine Möglichkeit, es zu tun, ohne den Text durch die Spaltung zurück Manipulation, Strippen etc .. r_compare_bars_value ist eigentlich auch innerhalb einer Spanne kein div so soup.select("span.r_compare_bars_value") der richtige Selektor ist.

Dies ist eigentlich ein guter Anwendungsfall für einen regulären Ausdruck:

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()) 

die oben auf ein paar Urls Laufen gibt Ihnen:

(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)