2016-07-02 7 views
1

this 링크에서 r_compare_bars_value 클래스의 span 태그에서 텍스트를 가져 오려고합니다. 해당 클래스를 검색하면 104 (min: 88) fps이라는 텍스트가 표시되며 min:88 부분 만 가져 가고 싶습니다. 내 코드;span 태그에서 텍스트 가져 오기

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하지 사업부 그래서 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) 
관련 문제