2012-11-12 4 views
-2
때때로 다음 페이지의 패턴이 될 경우에, 더 많은 페이지 내 코드는 파일의 각 URL에서 단 하나의 페이지가 열립니다

있다 웹 페이지에 추가 페이지가있을 때 스크래퍼를 작동시킬 수 있습니까?

from twill.commands import * 
from bs4 import BeautifulSoup 
from urllib import urlopen 
import urllib2 

with open('urls.txt') as inf: 
    urls = (line.strip() for line in inf) 
    for url in urls: 
     try: 
      urllib2.urlopen(url) 
     except urllib2.HTTPError, e: 
      print e 
     site = urlopen(url) 
     soup = BeautifulSoup(site) 
     for td in soup.find_all('td', {'class': 'subjectCell'}): 
      print td.find('a').text 
& 페이지 = X 여기

i '를 해당 페이지는 m 소리 :

http://www.last.fm/user/TheBladeRunner_/library/tags?tag=long+track http://www.last.fm/user/TheBladeRunner_/library/tags?tag=long+track & 페이지 = 7

+1

질문을 요청 무엇 분명하지 않다 :이 같은 수 있습니다. 네가하려고하는 것이 정확히 무엇인가? 구체적인 예를 들어 줄 수 있습니까? –

+0

글쎄, 나는 포스트를 편집했다. 기본적으로 나는 그 주소가 가진 모든 다음 페이지를 얻으려고한다. – muchacho

답변

1

당신은 next_page 링크에서 HREF 속성을 읽고 (예, 당신이 목록에 튜플을 변경해야합니다) 당신의 URL에 목록을 추가 할 수 있습니다.

from twill.commands import * 
from bs4 import BeautifulSoup 
from urllib import urlopen 
import urllib2 
import urlparse 

with open('urls.txt') as inf: 
    urls = [line.strip() for line in inf] 
    for url in urls: 
     try: 
      urllib2.urlopen(url) 
     except urllib2.HTTPError, e: 
      print e 
     site = urlopen(url) 
     soup = BeautifulSoup(site) 
     for td in soup.find_all('td', {'class': 'subjectCell'}): 
      print td.find('a').text 

     next_page = soup.find_all('a', {'class': 'nextlink'}): 
     if next_page: 
      next_page = next_page[0] 
      urls.append(urlparse.urljoin(url, next_page['href'])) 
+0

나는이 IOError가 나타납니다 : [Errno 2] 시스템이 지정된 경로를 찾을 수 없습니다 : '\\ user \\ Skotopes \\ library \\ tags? tag = rock & page = 2' – muchacho

+0

href는 상대 URL이므로 절대 URL을 추가하려면 기본 URL을 추가해야합니다. 위의 편집을 참조하십시오. – payala

+0

마지막 페이지에 도달했을 때 IndexError : 목록 색인 범위를 벗어남 ... – muchacho

0
당신은 모든 링크를 얻을 무언가를 만들 수

페이지를 따라 다니고 무엇인가 scrapy은 무료입니다

페이지의 모든 링크를 따르는 스파이더를 만들 수 있습니다. 다른 페이지에 페이지 매김 링크가 있다고 가정하면, 스크래퍼가 자동으로 페이지를 따라갑니다.

페이지의 모든 링크를 beautifulsoup로 구문 분석하여 동일한 작업을 수행 할 수 있지만, 치료가 이미 무료 일 때 처리하는 이유는 무엇입니까?

-1

나는 당신의 질문을 이해하고 있는지 모르겠다. 그러나 당신은 '다음'패턴과 일치하는 정규 표현식 (http://www.tutorialspoint.com/python/python_reg_expressions.htm)을 만들고 생각할 것이다. 한 페이지의 발견 된 URL 사이에 있습니다. 사이트 내 링크에 높은 적합성이있는 경우이 접근 방식을 많이 사용합니다.

+0

http://stackoverflow.com/a/1732454/1091116 – d33tah

+0

나는 여러 번 읽었습니다. 소스를 알고있을 때 안전하지 않은 처리 방법이 아님이 밝혀졌습니다. 나는이 방법을 다른 사이트에서 30 번 이상 사용했고 결코 성공을 거둔 적이 한 번도 없었다. 그것은 '올바른 길'인가? 분명히. 작동합니까? 예. 위의 사용법에서는 HTML을 '소비'하지 않지만 정규 표현식에 대해 '정규 텍스트'(HTML 구성 요소는 평가되지 않지만 텍스트는 언어/의미 구성 요소)를 구문 분석합니다. 해야 할 것. 인수는 (위 주어진)이 접근 방식을 사용할 수 있습니다 .... –

+0

http://stackoverflow.com/a/1733489/1191626 –