2
나는 파이썬의 웹 크롤러를 makin에 게시하면 this tutorial을 팔로우하고 있습니다. 난 내 코드를 얻을 수 있었지만 내가 가지고있는 문제는 위의 비디오에서 발생하지 않는다. 코드의 끝 부분 인 print scraper(url,7)
을 8 또는 그 이상으로 증가시킬 때 나는 발생한다. '쉘에서 다음과 같은 오류를 받고 있어요 :Python 웹 크롤러, 심도 문제
Traceback (most recent call last):
File "<pyshell#30>", line 1, in <module>
execfile("threads/mechanizex.py")
File "threads/mechanizex.py", line 85, in <module>
print scraper(url,7)
File "threads/mechanizex.py", line 21, in scraper
for u in step_url:
TypeError: 'NoneType' object is not iterable
그리고 나는 비디오에서 저자와 완전히 동일한 코드를 가지고 있기 때문에 내 문제가 무엇인지 모른다, 그는 13에 자신의 번호를 증가시키고 그 결과 링크를 얻을 수 나는 그것을 7 이상으로 늘릴 수는 없지만 내 전체 코드는 다음과 같습니다.
import urllib
import re
import time
from threading import Thread
import MySQLdb
import mechanize
import readability
from bs4 import BeautifulSoup
from readability.readability import Document
import urlparse
url = "http://adbnews.com/area51"
def scraper(root,steps):
urls = [root]
visited = [root]
counter = 0
while counter < steps:
step_url = scrapeStep(urls)
urls = []
for u in step_url:
if u not in visited:
urls.append(u)
visited.append(u)
counter +=1
return visited
def scrapeStep(root):
result_urls = []
br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Firefox')]
for url in root:
try:
br.open(url)
for link in br.links():
newurl = urlparse.urljoin(link.base_url, link.url)
result_urls.append(newurl)
except:
print "error"
return result_urls
d = {}
threadlist = []
def getReadableArticle(url):
br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Firefox')]
html = br.open(url).read()
readable_article = Document(html).summary()
readable_title = Document(html).short_title()
soup = BeautifulSoup(readable_article)
final_article = soup.text
links = soup.findAll('img', src=True)
return readable_title
return final_article
def dungalo(urls):
article_text = getReadableArticle(urls)[0]
d[urls] = article_text
def getMultiHtml(urlsList):
for urlsl in urlsList:
try:
t = Thread(target=dungalo, args=(urls1,))
threadlist.append(t)
t.start()
except:
nnn = True
for g in threadlist:
g.join()
return d
print scraper(url,7)
도움이 될만한 사람이 있습니까?
그래, 그게 내가 의도 한 오류를 전혀 눈치 채지 못했다는 걸 .... 고마워! :) – dzordz