
TJ O'Connor의 저서 "Violent Python"의 소스 코드입니다. 코드는 Python 3으로 완전히 변환되었으며, PEP8 표준을 준수하도록 재구성되었고, 더 이상 사용되지 않는(deprecated) 라이브러리 구현과 관련된 의존성 문제를 해결하기 위해 리팩터링되었습니다.
TJ O'Connor의 "Violent Python" 책의 소스 코드입니다. 이 코드는 Python 3로 완전히 변환되었고, PEP8 표준을 준수하도록 재포맷되었으며, 더 이상 사용되지 않는 라이브러리 구현과 관련된 의존성 문제를 제거하기 위해 리팩토링되었습니다.
이와 유사한 변환 작업을 제가 Justin Seitz의 "Black Hat Python" 책의 소스 코드에 대해 공개한 바 있습니다. 아직 확인하지 않았다면 여기에서 확인해 보세요.
프로젝트를 위한 새 디렉터리(DIR)를 만들고, 새 가상 환경 또는 venv를 생성한 다음(권장), git clone을 사용하여 이 저장소를 클론하고 pip install을 사용하여 요구 사항을 설치하기만 하면 됩니다.
user@host:~/DIR$ git clone https://github.com/EONRaider/violent-python3
user@host:~/DIR$ python3 -m venv venv
user@host:~/DIR$ source venv/bin/activate
(venv) user@host:~/DIR$ pip install -r requirements.txt
optparse 라이브러리는 전체 소스 코드에서 argparse로
대체되었습니다. 모든 인수 파싱은 이제 각 파일의 __main__ 실행 범위
안에 포함되어 있습니다. 스크립트 실행에 필수적이었지만 원래 코드에서는
선택 사항으로 처리되었던 모든 CLI 인수는 이제 위치 인수(positional)로
구현됩니다. 이제 usage 프롬프트는 argparse를 사용하는 모든
스크립트에 대해 -h 인자를 CLI에 제공하면 사용할 수 있습니다.
경계(boundary)와 컨트롤러(controller) 객체의 책임을 CLI 파서에
맡기는 것은 소프트웨어 아키텍처 측면에서 결코 최선의 선택은 아니지만,
원래 코더의 의도에 부합해야 한다는 필요성 때문에
그대로 두었습니다.PEP 8: E722 do not use bare except 위반 사항은 모두 더 구체적인 예외
절로 리팩토링되었습니다.close() 메서드를 호출하는 대신,
이런
이유로 모든 파일 및 데이터베이스 조작 인스턴스는 컨텍스트 관리자를
사용하여 리팩토링되었습니다.# -*- coding: utf-8 -*-)은 Python 3의 기본 인코딩으로 UTF-8이
표준화됨에 따라(Python 2의 ASCII를 대체)
제거되었습니다.chapter05/__init__.py 및 chapter06/__init__.py는
각각 chapter05/dup.py와 chapter06/anon_browser.py에서
모듈을 가져올 수 있도록 추가되었습니다.chapter06/anon_proxy.py는 MechanicalSoup
Python 3 라이브러리로 재구현되었으며, 다음 파일에 필요한 수정 사항을 통합합니다:
proxy_test.py, useragent_test.py 및 print_cookies.py.chapter06/anon_browser.py도 MechanicalSoup로 재구현되었으며
코드에 몇 가지 수정이 적용되었습니다. cookielib 라이브러리는
AnonBrowser 클래스의 생성자 메서드에서 http.cookiejar로 교체되었고,
user_agents 매개변수는 이제 튜플 대신 문자열 목록을
받습니다.chapter06/link_parser.py는 re와 bs4의 구현을 처리하는
새로운 방식을 사용하여 리팩토링되었습니다.다른 언어로 된 기여는 여기에서 확인할 수 있습니다:
상식적으로, 먼저 이 저장소에 적용하려는 변경 사항을 이슈(issue)를 통해 논의하십시오.