2016-11-29 2 views
0

파이썬 웹 스크래핑에서 특정 문제가 있습니다. 배경은 모든 음식 스크랩을 스크랩하고 싶습니다. http://www.bbc.co.uk/food/recipes/! 자, 다음은 단일 조리법에 내 코드파이썬 웹 스크래핑 오류 10053

def extract_all_information(): 
file_name='links_all_recipes.txt' 
links=read_all_links(file_name) 
count=1 
counter=0 
for link in links: 
    Recipes=open('All_Recipes.txt','a',encoding='utf-8') 
    url='http://'+link 
    single_recipe=recipe.collect_all_information(url) 
    Recipes.write(str(single_recipe)) 
    Recipes.write('\n') 
    counter+=1 
    if counter>20: 
     counter=0 
     time.sleep(2) 
    count+=1 
    Recipes.close() 

(저자처럼) 정보를 추출하는 코드이다 것은 이것이다 :

from bs4 import BeautifulSoup 
import requests 
def extract_author(recipe_url): 
recipe=requests.get(recipe_url) 
rsoup = BeautifulSoup(recipe.text, "lxml") 
result = '' 
for tag in rsoup.find_all(itemprop='author'): 
    result = tag.contents[0] 
return result 

당신은 가정 수 Extract_cooking_time 같은 다른 모든 기능 (() extract_preparation_time() 등등은 위의 함수와 유사합니다.) 결국, collect_all_information()에서 모든 레시피 관련 함수를 호출하여 하나의 레시피와 관련된 모든 것을 추출합니다.이 함수를 호출합니다. 각 Url에 대한 루프의 collect_all_information 함수! 그리고 때마다, 나는 특정 조리법에 관련된 모든 정보를 추출, 나는 지금

Recipes.txt

라는 파일에이 정보를, 나는 데 문제를 추가하고,

ConnectionError 아래의 오류 : ('연결이 중단되었습니다.', ConnectionAbortedError (10053, '호스트 시스템의 소프트웨어에 의해 설정된 연결이 끊어졌습니다', 없음, 10053, 없음)

이 오류는 약 1000 개의 조리법을 다운로드 한 후에 발생합니다 11,000 가지 요리법 중 일부는 스크랩/모두를 다운로드하고 싶습니다. 모든 요리법에 대한 링크가 있으며, 각 요리법에서 요리 시간, 준비 시간, 저자, 재료 등의 정보를 추출합니다. 등등), 나는 이것에 대한 비슷한 대답을 찾았지만, 각각의 대답은이 에러가 다른 이유 때문일 수 있다고 말한다. 여기 내 직감은, 나는이 오류가 어떻게 든 단위 시간 (초과 한도를 의미)에서 폐기 된 데이터의 최대 개수와 관련이 있다고 생각한다. 그리고 나는 그것을 고쳐야한다고 생각한다. (나는 이미 그것을 해체 한 지 2 초 후에 수면을 시도했다. 각각 20 개의 조리법이 있지만 여전히이 오류가 발생 함)!

더 많은 정보를 얻으려면 BeautifulSoup 4와 Python 3, Windows 10을 사용하고 있습니다. 어떤 사람이 친절하게도이 오류가 발생하는 이유를 알려주고이를 해결하기 위해 코드에서 무엇을 수정해야합니까? 당신의 솔루션은 이해하기 쉽고 구현하기가 쉬운 한 무엇이든 될 수 있습니다. 또한 '재시도'패키지를 사용해 보았지만 어떻게 사용해야 하는지를 알 수 없으므로주의해야합니다. 코드! 그래서, 당신은 또한 당신의 대답에 그것을 포함시킬 수 있습니다!

나는 '문제'가 발생하는 곳을 알려주기 위해 'count'라는 변수를 유지하고 있습니다. 텍스트 파일에 레서피를 추가하기 전에 인쇄합니다. (많은 반복 후에이 문제가 발생합니다.) 이 같은 문제가 오는하더라도, 그래서 저는 적어도 나는 몇 가지 요리법을 다운로드해야 내 하드웨어를 저장, 파일에 추가 -

감사

+0

의견 : 질문을 편집하고 질문이 아닌 메모를 추가 할 수 있습니다. – furas

+0

연결에 문제가있어서 서버에 연결하는 코드는 어디에 있습니까? 당신은 당신의 문제에서 쓸데없는 코드를 보여줍니다. 항상 완전한 오류 메시지 (Traceback)를 보여 주면 다른 유용한 정보가있을 수 있습니다. 어느 선이 문제가되는지. – furas

+0

코드를 참조하십시오, 추적에 관해서는, 정말 미안하지만 우연히 결과물을 닫았습니다. 이제 다시 실행해야하고이 오류가 발생하기까지 거의 한 시간 정도 기다려야합니다 ... –

답변

0

이 시도 사전에 시간을위한 부지를 :

def extract_author(recipe_url): 
    recipe = requests.get(recipe_url, headers={"user-agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"}) 
    rsoup = BeautifulSoup(recipe.text, "lxml") 
    meta = rsoup.find("div",{"class":"recipe-leading-info"}) 
    desc = meta.find("p", {"itemprop":"description"}) 
    author = meta.find("a",{"itemprop":"author"}) 
    ingredients = [(list(x.strings)[0], list(x.strings)[1]) for x in rsoup.findAll("li", {"itemprop":"ingredients"})] 


    infodct = dict(Author=author, Description=desc, Ingredients=ingredients) 
    print(infodct) 

extract_author(recipe_url=link) 

"a"태그를 지정하는 것을 잊어 버린 것 같습니다. 이 URL을 테스트에 사용했습니다. "http://www.bbc.co.uk/food/recipes/bananabread_85720"

작성자 목록과 같이 여러 개의 태그가 반환 될 것으로 예상하지 않는 한 모두를 찾을 필요는 없습니다. 또한 모든 추출 기능을 하나로 처리하는 것처럼 일부 처리 시간을 줄일 수도 있습니다. 그렇지 않으면 파서에게 정보의 모든 조각에 대한 요청을하도록 알려줍니다. 하나의 요청을하고 모든 것을 꺼내십시오. 또한 일반적으로 사용자 에이전트 헤더를 설정하는 것이 좋습니다. 나는 보통 이것을 요청 오류의 가장 일반적인 원인으로 만난다.