2014-11-24 4 views
0

Я недавно наблюдал за thenewboston видео при записи веб-искателя с использованием python. По какой-то причине я получаю SSLError. Я попытался установить его с помощью строки 6 кода, но не повезло. Любая идея, почему она бросает ошибки? Код вербально от thenewboston.Python Web Crawler from thenewboston

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 страниц, одна вещь, хотя в том, что он не проверяет сертификат сервера, это сделать его быстрее, но более опасным (уязвимы для мит-атак). пыльник есть пример использования этого 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 считается медленным на многих языках, но python, похоже, не так, мой веб-искатель способен обрабатывать 10 ссылок в секунду, если вы не хотите что-то быстрее, чем это регулярное выражение должно служить вам в порядке, разумеется, регулярное выражение очень точный. – ArthurG