2014-11-24 16 views
0

나는 최근에 thenewboston을 보았습니다 python을 사용하여 웹 크롤러를 작성하는 것에 관한 비디오. 웬일인지, 나는 SSLError를 얻고있다. 코드 6 행으로 해결했지만 행운은 없었습니다. 왜 그것이 오류를 던지고 있는지 어떤 생각? 코드는 축 어적입니다 thenewborston입니다.Python 웹 크롤러 fromewboston

import requests 
from bs4 import BeautifulSoup 

def creepy_crawly(max_pages): 
    page = 1 
    #requests.get('https://www.thenewboston.com/', verify = True) 
    while page <= max_pages: 

     url = "https://www.thenewboston.com/trade/search.php?pages=" + str(page) 
     source_code = requests.get(url) 
     plain_text = source_code.text 
     soup = BeautifulSoup(plain_text) 

     for link in soup.findAll('a', {'class' : 'item-name'}): 
      href = "https://www.thenewboston.com" + link.get('href') 
      print(href) 

     page += 1 

creepy_crawly(1) 
+1

SSL 오류가 때문입니다 웹 인증서. 크롤링하려는 URL이'https '이기 때문에 아마 일어날 것입니다. http 만 사용하여 다른 사이트를 사용해보십시오. – Craicerjack

+0

가능한 복제본 http://stackoverflow.com/q/10667960/783219 – Prusse

+0

감사합니다. Craicerjack! 나는 "http"가없는 웹 사이트에서 그것을 시도했고 효과가있었습니다! 그러나 "https"가있는 도메인에서 웹 크롤러를 실행하려면 어떻게해야합니까? – Steven

답변

0

내가, 더 빨리 할 수 ​​있습니다 URLLIB을 사용하여 웹 크롤러를 수행하고 HTTPS 페이지에 액세스 아무런 문제가없는 한, 한 가지 생각이 서버 인증서의 유효성을 검사하지 않는다는 것입니다,이는 빠르지 만 더 위험하게 (mitm 공격에 취약합니다). 우는 그 LIB의 사용 예제가있다 :

link = 'https://www.stackoverflow.com'  
html = urllib.urlopen(link).read() 
print(html) 

3 선을 한 페이지에서 HTML을 잡기 위해 필요한 모든 것입니다 간단하지가?

URLLIB에 대해 자세히 : https://docs.python.org/2/library/urllib.html

나는 또한 당신이 (재 라이브러리 사용) 다른 링크, 그것에 대한 예를 잡기 위해 HTML에 정규식을 사용하는 것이 좋습니다

은 다음과 같습니다

for url in re.findall(r'<a[^>]+href=["\'](.[^"\']+)["\']', html, re.I): # Searches the HTML for other URLs 
     link = url.split("#", 1)[0] \ 
     if url.startswith("http") \ 
     else '{uri.scheme}://{uri.netloc}'.format(uri=urlparse.urlparse(origLink)) + url.split("#", 1)[0] # Checks if the HTML is valid and format it 
+0

정규식을 사용하여 HTML을 구문 분석하면 안된다는 일반적인 규칙이 아닙니까? – Steven

+0

Regex는 많은 언어에서 느린 것으로 간주되지만 파이썬은 그럴 듯하지 않습니다. 제 웹 크롤러는 초당 10 개의 링크를 처리 할 수 ​​있습니다. 정확한. – ArthurG