Python Scrapy 폐기 웹 사이트를 사용하는 방법 및 예제 제공

본문에서 우리는 파이톤Scrapy을 어떻게 사용하는지 배울 것이다.
이번 주에 우리는 에서 Rust notification website 을 예로 들 것이다.만약 당신이 Rust developer 라면, 페이지에서 원하는 부분만 쉽게 추출할 수 있다는 것을 알게 될 것입니다.
그렇지 않으면 당신이 원하는 다른 사이트를 사용하세요.

선결 조건

  • How to install Python
  • How to install pip
  • Scrapy
  • 나는 네가 이미 파이톤의 경험을 가지고 있다고 생각한다.
    몇 시간 동안 Scrapy 문서를 읽는 것이 당신에게 도움이 됩니다.

    카탈로그

  • 파이썬 개발 환경 설정
  • 웹 사이트 보기
  • Python Scrapy 코드 작성
  • 결론
  • 너는 1을 뛰어넘을 수 있다.Scrapy 개발 환경이 준비되어 있는 경우

    1. 파이썬 개발 환경 설정


    pip를 사용하여 Scrapy 개발 환경을 설정하는 것부터 시작하겠습니다.이 명령을 사용하라.
    $python3 -m venv scrapy
    
    이것은 디렉터리 이름의scrapy와 같은 구조를 컴퓨터에 만들 것입니다.
    bin  include  lib  lib64  pyvenv.cfg  share
    
    우리는 다른 사람에게 관심을 가질 필요가 없다. 우리의 관심은virutalenv의bin/activate 파일을 사용하는 데만 있다.파이썬 개발 환경을 활성화해서 사용해야 합니다.
    앞으로 더 많은 자질구레한 프로젝트가 생길 것이다. 알리스를 만들기 위해 시간을 절약할 것이다.이 명령을 사용하라.
    $vim ~/.bashrc
    
    그런 다음 이와 유사한 코드를 포함합니다.
    alias usescrapy="source /home/<youraccount>/Desktop/code/scrapy/bin/activate"
    
    이 명령을 사용하려면/홈/yourcount/Desktop/code/같은 효과 부분을 찾아야 합니다.그리고 $source~/.bashrc, 이 파이톤 개발 환경과 $usescrapy를 언제든지 사용할 수 있습니다.
    $usesprapy와 $pip를 입력하여 ipython scrapy를 설치합니다.Python Scrapy를 사용하는 최소 종속성이 설치됩니다.
    나중에 똑같은 가방을 다시 사용하려면 아래 명령을 사용하십시오.

  • $pip 동결 > 요구 사항입니다.txt에서 목록을 추출합니다.

  • $pip 설치 - r 요구 사항.나중에 설치하십시오.
  • 2. 사이트 찾아보기


    나는 네가 이미 Rust notification website나 네가 인터넷에 접속하고 싶은 다른 사이트를 방문했으면 한다.
    Scrapy Tutorial에서 사용한 절차를 참고하여 폐기하고자 하는 사이트에 적용해 주십시오.
    나는 당신이 어떻게 사용하는지 알고 있고 browser inspector CSS와 HTML에 익숙하다고 가정합니다.
    이번 주'러스트'의 목적은 매주 러스트와 관련된 유용한 링크를 제공하는 것이다.
    홈 페이지에 최근 질문 링크가 있습니다.
    모든 사이트를 방문할 때 블로그 게시물, 쪽지 상자, 전화, 활동, 업무 참여 등의 링크 목록을 볼 수 있다.
    홈 페이지로 돌아가서 브라우저 검사기와 CRTL + Shift + I를 사용하여 html이 어떻게 구성되었는지 찾아보세요.CSS 프레임워크가 있는 간단한 정적 사이트일 뿐이라는 것을 알 수 있다.

    이번 주에 출판물 부품이 녹슬었는지 검사한다.그리고 당신은 유사한 html 라벨을 많이 발견할 수 있습니다.
    <a href="https://this-week-in-rust.org/blog/this-week-in-rust/">This Week in Rust</a>
    
    이 링크들을 수집하는 것이 우리 페이지의 주요 업무가 될 것이다.그것들은 우리가 폐기할 목표 정보 페이지의 입구점이 될 것이다.
    그 중 한 분을 찾아뵙다.작업 부품과 폐기하고 싶은 다른 부품을 검사할 때, 그것들의 구조가 이와 유사하다는 것을 발견할 수 있다.

    우리의 주요 목표는 href입니다. 당신이 그들의 직위와 업무 링크를 찾을 수 있도록 돕는 것입니다.이것은 표시의 일부분으로 리와 부모 요소ul로 감싸집니다.
    l 뒤에 ID가 있는 h1이나 h2 라벨이 있는 것을 볼 수 있습니다.html 표시가 어떻게 우리가 폐기하고 싶은 데이터를 조직하는지 알아보면 다음 부분에서 작성할 폐기 코드를 테스트하는 데 도움이 될 것입니다.

    3. Python Scrapy 코드 작성


    우리는 개발 환경을 설정하고 앞부분과 함께 사용할 정보를 준비했다.나머지는 Scrapy를 위한 파이썬 코드를 작성하는 것입니다.
    그 전에 Scrapy CLI 의 셸 명령을 사용하여 Scrapy 프로그램이 웹 페이지를 어떻게 보는지 테스트합니다.
    $scrapy shell https://this-week-in-rust.org
    
    만약 네가 사이트가 있다면, 네가 폐기하고 싶은 다른 사이트를 사용할 수 있다.그런 다음 콘솔이 Ipython 모드로 바뀌고 이와 유사한 정보가 제공됩니다.
    [s] Available Scrapy objects:
    [s]   scrapy     scrapy module (contains scrapy.Request, scrapy.Selector, etc)
    [s]   crawler    <scrapy.crawler.Crawler object at>
    [s]   item       {}
    [s]   request    <GET https://this-week-in-rust.org>
    [s]   response   <200 https://this-week-in-rust.org>
    [s]   settings   <scrapy.settings.Settings>
    [s]   spider     <DefaultSpider 'default'>
    [s] Useful shortcuts:
    [s]   fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed)
    [s]   fetch(req)                  Fetch a scrapy.Request and update local objects
    [s]   shelp()           Shell help (print this help)
    [s]   view(response)    View response in a browser
    
    우선 $view (response) 를 사용하여 대상 사이트가 Scrapy에서 읽을 수 있는지 확인하십시오.예를 들어, 웹 사이트가 JavaScript로 표시된 경우 웹 사이트가 제대로 작동하지 않을 수 있으므로 이를 수행해야 합니다find more documentation.
    이번 주 녹이 슬면서 아무런 문제가 없을 것이다. 왜냐하면 그것은 일반적인 정적 사이트이기 때문이다.
    요청, 응답 등을 Scrapy 셸 모드로 처리할 수 있습니다. 예를 들어response를 사용합니다.몸, 응답.표제그리고 quit()로 종료하고 Scrapy 프로젝트를 시작하세요.
    $scrapy startproject를 사용하여 녹슨 것을 알립니다.
    이것은 자동으로 녹 자국과 프로젝트 이름 알림이 있는 Scrapy 프로젝트 폴더를 생성하고 컨트롤러에 비슷한 메시지를 표시합니다.
        cd rust
        scrapy genspider example example.com
    
    $scrapy startproject-h를 사용하여 더 많은 정보를 얻을 수 있습니다.
    설명대로 하다.
    그런 다음 $scrapy genspider this week in rust this week in rust와 유사한 명령을 사용합니다.org/.
    그것은 이번 주 안에 거미를 만들어야 했다.니 기계에서그런 다음 spider에 대한 코드를 작성합니다(이번 주 rust.py).
    이렇게 편집해.
    import scrapy
    
    class ThisWeekInRustSpider(scrapy.Spider):
        name = 'this_week_in_rust'
        start_urls = ['https://this-week-in-rust.org/']
    
        # 1.
        def parse(self, response):
    
            # Or test it with $scrapy shell https://this-week-in-rust.org/
            for href in response.css("div.custom-xs-text-left > a::attr(href)").getall():
                # 1.
                # print("page")
                # print(href)
    
                yield response.follow(href, self.parse_jobs)
    
        # 2.
        def parse_jobs(self, response):
            date = ".".join(response.url.split("/")[4:7]).replace(".","-")
    
            # Or test it with $scrapy shell https://this-week-in-rust.org/blog/<date>/<text>
            job_titles = response.css("#rust-jobs ~ p ~  ul > li > a::text").getall()
            job_urls = response.css("#rust-jobs ~ p ~ ul > li > a::attr(href)").getall()
            jobs = { **dict(zip(job_titles, job_urls)) }
            # 2.
            # print("\n")
            # print(date)
            # print(jobs)
            # jobs = { "job": len(job_titles), **dict(zip(job_titles, job_urls)) }
    
            # 3.
            jobs = { "total_jobs": len(job_titles), **dict(zip(job_titles, job_urls)) }
    
            # sorted(list, key = lambda i: i["Posts"], reverse = True)
            yield {
                "date": date,
                **jobs,
            }
    
            # yield {
            #     "date": date,
            #     "jobs": jobs,
            # }
    
    우리는 단지 Scrapy로 이전 부분의 정보를 파이톤 코드로 변환할 뿐이다.
    1. 우리는 CSS Selectors에서 출판물 페이지 링크를 추출합니다.div.custom-xs-text-left는 탭의 href 부분을 선택하는 데 도움을 줍니다.
    우리는 다음 작업을 하기 위해 모든 링크를 추출합니다. 따라서 getall () 을 사용합니다.
    그런 다음 parse post 및 jobs 콜백 함수를 사용하여 처리하는 방법을 정의합니다.
    2. 이것은 모든 과정의 유효한 하중이다.이 정보를 유용하게 사용할 수 있도록 출판 일자, 총 수량, 제목 및 기타 중요한 Rust jobs 데이터를 추출합니다.
    그런 다음 Python API를 사용하여 JSON 형식으로 변환합니다.
    너는 이러한 모델을 볼 수 있다. 즉, id 부분만 있다. 예를 들어 #뉴스 블로그 게시물 #rust jobs는 다르고, 다른 부분은 중복된다.
    만약 당신이 다른 부분을 포기하고 싶다면, 당신은 사이트에서 활동, 참여 호소 등을 쉽게 포함할 수 있다.
    3. 우리는 여기서 사용하고자 하는 데이터를 되돌려줍니다.
    만약 당신이 다른 사이트를 사용한다면, 당신의 코드는 이와 다르지만, 당신이 원하는 것을 찾는 주요 과정은 비슷할 것이다.
  • 유효 부하 웹 페이지에 접근하는 링크를 얻습니다.
  • 페이지마다 원하는 정보를 추출합니다.
  • 이번 주에는 $scrapy craw로 작업 효율을 테스트합니다.json.
    그런 다음 이 구조와 유사한 결과를 확인할 수 있습니다.
    [
      {"date": "", "total_jobs": "", "job_name": "job_link"}
    ]
    
    그것은 아마 날짜에 따라 주문할 수 없을 것이다.따라서 필요하면 파이썬 파일을 이와 유사하게 만들 수 있습니다.
    # sort_json.py
    import os
    import sys
    
    import json
    
    target = sys.argv[1]
    
    with open(target, 'r') as reader:
        json_str = reader.read()
        json_lists = json.loads(json_str) # dict, read
    
        with open(target, 'w+') as writer:
            sorted_list = sorted(json_lists, key = lambda i: i["date"], reverse = True) # only work for list of dicts
            json_sorted_str = json.dumps(sorted_list, indent=4) # write
            writer.write(json_sorted_str)
    
    print(f"Sort {target} by dates.")
    
    $python sort json과 함께 사용합니다.나는 너의 일을 좋아한다.json, 날짜에 따라 json 파일을 구성합니다.
    sort json에 주석을 달거나 삭제해야 합니다.나중에 이 항목을 사용하려면 Scrapy 항목에서py를 제거합니다.

    4. 결론


    이 글에서 우리는 파이톤Scrapy을 어떻게 사용하는지 배웠다.만약 이 글을 잘 이해한다면, 앞으로 해야 할 일은 $scrapy genspider를 사용해서 생성된 Python 파일 (spider) 을 편집하는 것입니다.
    나는 이 글이 매주 Rust에서 이번 주를 기다리는 Rust 개발자와 Python Scrapy를 배우고 싶은 다른 사람들에게 도움이 되기를 바란다.
    If you need to hire a developer, you can contact me.
    고맙습니다.

    좋은 웹페이지 즐겨찾기