2013-04-17 2 views
4

정기적으로 특정 웹 페이지를 긁어 내고 싶습니다 (예 : 매시간). 이것은 파이썬과 관련이 있습니다. 스크래핑 된 결과는 SQLite 테이블에 삽입되어야합니다. 새로운 정보는 긁히지 만 파이썬 스크립트가 매시간 실행되기 때문에 '오래된'정보가 다시 긁힐 것입니다.파이썬과 sqlite로 웹 스크래핑하기. 긁힌 데이터를 효과적으로 저장하는 방법은 무엇입니까?

더 정확하게 말하면 경기 결과가 나오는 페이지와 일치하는 결과가 점점 더 많이 나오는 스포츠 결과 페이지를 긁어 내고 싶습니다. 따라서 새 스크래핑을 할 때마다 SQLite 테이블에 새 결과를 입력해야합니다. 오래된 테이블은 이미 한 시간 전에 (또는 이전에) 긁어서 (테이블에 삽입 한 상태이기 때문에) 필요합니다.

동일한 결과가 두 번 긁 히면 두 번 삽입하지 않으려합니다. 따라서 하나의 결과가 이미 제거되었는지 확인하는 메커니즘이 있어야합니다. SQL 수준에서이 작업을 수행 할 수 있습니까? 따라서 전체 페이지를 긁어서 각 결과에 대해 INSERT 문을 작성하지만 그 전에는 INSERT 문만 성공적으로 실행되어 데이터베이스에 없었습니다. 나는 UNIQUE 키워드 또는 이렇게 생각하고있다.

성능에 대해 너무 많이 생각하고 있습니다. 나중에 스크래핑을 시작하기 전에 DROP TABLE을 수행하여이 문제를 해결해야합니다. 그런 다음 다시 처음부터 모든 것을 다 긁습니다. 나는 정말로 많은 데이터에 관해서 이야기하지 않는다. 1 토너먼트와 약 50 토너먼트에 약 100 개의 레코드 (= 매치)가 있습니다.

기본적으로 나는 일종의 모범 사례 접근에 관심이 있습니다.

+0

이 방법으로 내용을 수집 할 수있는 사이트인지 확인하십시오. 많은 사이트에는이를 금지하는 정책이 있습니다. – Ren

+0

감사합니다. 내가 확인합니다. – beta

답변

2

데이터가 없으면 삽입하려는 것 같습니다. 아마도 같은 : 그것은

  • 업데이트는 않는 경우 항목을하지 않는 경우

    1. 점검 항목은
    2. 데이터 삽입이 존재하는 경우?

    당신은 다음 UPDATE에게/

    를 삽입 선택 별도의 SQL 문을 발행 할 수 있습니다 또는 당신은 독특한 설정할 수 있습니다 (당신은 업데이트 할 않음) 내가 sqllite는 IntegrityError

    try: 
        # your insert here 
        pass 
    except sqlite.IntegrityError: 
        # data is duplicate insert 
        pass 
    
  • 3

    을 올릴 것이다 beileve 무엇 당신은 upsert (업데이 트 또는 삽입 존재하지 않는 경우)하고 싶지 않아요. sqlite에서 수행하는 방법을 보려면 여기를 확인하십시오. SQLite UPSERT - ON DUPLICATE KEY UPDATE

    관련 문제