python으로 업데이트 정보를 봉인하여 가져오기

8526 단어 CharlesPython

하고 싶은 일


이벤트 사이트 (;)를 참고하십시오.
봉쇄된 설치와 환경 주위를 기록하다.

모듈


기본적으로 anaconda나 표준 라이브러리에 추가된 다음 내용을 사용합니다.
  • Requests ← http 클라이언트
  • beautifulsoup4←)포사
  • pickle← 대상의 보존(지난번에 얻은 데이터와 비교하고 싶다)
  • 에이전트 도구


    개발 과정에서 고등어에게 여러 차례 요청을 해 미안한 마음에 피하고 싶었다.
    두 가지 방법을 생각해 봤는데 2면 전선을 바꿀 필요가 없어서 먼저 저쪽에 있어요.
  • beautifulsoup은 텍스트 파일이나string 대상을 읽고 해석하기 위해 리퀘스트를 통해 얻은 응답을 로컬로 저장하고 디버깅할 때 이 응답을 읽습니다.
  • Charles를 사용하여 로컬 파일에 매핑합니다.
  • Charles 구성

  • 저장할 기록을 Sequence 탭에서 마우스 오른쪽 버튼으로 클릭하여 Save Response
  • 에 저장
  • Map Local을 다시 마우스 오른쪽 버튼으로 클릭합니다.매핑 대상이 1인 파일을 지정합니다
  • .
  • Tools->Rewrite Settings를 통해 콘텐츠-type 지정
  • Save Response에는 머리 정보가 저장되어 있지 않은 것 같습니다(또는 열어보니 몸의 원시 데이터임).
    브라우저로 접근하면 text 파일로 먼저 지정됩니다.

    덮어쓰다


    크롬 개발 도구와 뷰티풀 수프를 사용했다면 정말 스컬립을 간단하게 진행할 수 있었을 텐데요.
    from urllib.parse import urlparse,urljoin
    from bs4 import BeautifulSoup
    import requests 
    import pickle
    
    def formatPost(event):
        #140文字制限にひっかからないようにイベント名スライス
        return "{0}\n{1}\n{2}".format(event[0],event[1][:140-len(event[0])-len(event[2])],event[2])
    
    def getEvents():
        #晒すとまずそうなので
        url = "hogehoge.jp"
        root = '{uri.scheme}://{uri.netloc}/'.format(uri=urlparse(url))
        #証明書エラーを無視
        r = requests.get(url, verify=False)
        soap = BeautifulSoup(r.text,"lxml")
    
        #Only the following pseudo-classes are implemented: nth-of-type.
        #chromeの開発ツール->copy selectorでcssセレクタをコピってきて実行するとエラーになるので一部要変更
        #こんな感じ li:nth-child(1) -> li:nth-of-type(1)
        #必要な要素だけタプル型(dictとか可変の型はNGっぽい)で抽出して集合に突っ込む
        set_evnets = {(div.select("header > ul > li:nth-of-type(1) > span.c-eventSummary-datetime > time")[0].text,
                       div.select("header > a > h2 > span")[0].text,
                       urljoin(root,div.select("div.c-eventSummary-image.js-eventSummary-image > a:nth-of-type(1)")[0].get("href"))) 
                       for div in soap.select("#eventlist > div > article")}
    
        #前回取得分復元
        try:
            with open('events.pickle', 'rb') as f:  
                set_evnets_old = pickle.load(f)
        except:
            set_evnets_old = set()
    
        #今回取得分で上書き保存
        with open('events.pickle', 'wb') as f:
            pickle.dump(set_evnets, f)
    
        #今回分-前回分のリストをツイートできるように整形して返す
        return list(map(formatPost,set_evnets - set_evnets_old))
    
    if __name__ == "__main__":
        for event in getEvents():
            #tweetしたかったらこんな感じで実装すればおk
            #post(event)
    

    주목점


    이번에 겨냥한 캠페인 사이트는 모집 상황, 개최지, 성별 등에 비춰볼 때 기본적으로 여러 페이지를 넘지 않아 시행되지 않았지만, 실제로 하려면 스크롤해 업데이트 정보를 유출하지 않도록 해야 한다.
    만약 검색 결과가 마지막 페이지로 연결되지 않았다면 (왜 링크가 없는지)
    호출을 할 때 url 매개 변수로 페이지를 전달하고 처음부터 커다란 숫자를 주면 마지막 페이지의 링크가 표시됩니다.어떤 사이트에서는 이렇습니다.

    과제.


    마지막으로 작성된 트위터에 포스트 모듈을 사용해 로컬로 이동하면 좋은 느낌을 받을 수 있기 때문에 Heroku에 대한 deprovice를 진행하고 싶습니다.
    이번 이벤트는픽셀의 이름으로 파일을 저장하고 Heroku를 잘 지목해야 될 것 같아요.부터 시도해 보세요.

    좋은 웹페이지 즐겨찾기