Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python과 Scrapy를 사용한 웹 스크래핑?

<시간/>

크롤러 개발을 위한 최고의 프레임워크 중 하나는 스크래피입니다. Scrapy는 웹사이트를 쉽게 스크래핑할 수 있도록 고급 기능을 활용하는 인기 있는 웹 스크래핑 및 크롤링 프레임워크입니다.

설치

Windows에 scrapy를 설치하는 것은 쉽습니다. pip 또는 conda(콘다가 있는 경우)를 사용할 수 있습니다. Scrapy는 python 2 및 3 버전 모두에서 실행됩니다.

pip install Scrapy

또는

conda install –c conda-forge scrapy

Scrapy가 올바르게 설치되면 이제 터미널에서 scrapy 명령을 사용할 수 있습니다 -

C:\Users\rajesh>scrapyScrapy 1.6.0 - 활성 프로젝트 없음Usage:scrapy  [options] [args]사용 가능한 명령:bench 빠른 벤치마크 testfetch 실행 Scrapy downloadergenspider를 사용하여 URL 가져오기 사전을 사용하여 새 스파이더 생성 정의된 템플릿runspider 자체 포함된 스파이더 실행(프로젝트를 생성하지 않고)settings 설정 값 가져오기 쉘 대화형 스크래핑 콘솔startproject 새 프로젝트 생성 버전 인쇄 Scrapy 버전 보기 브라우저에서 URL 열기 command> -h" 명령에 대한 자세한 정보를 보려면

프로젝트 시작

이제 Scrapy가 설치되었으므로 startproject를 실행할 수 있습니다. 첫 번째 Scrapy 프로젝트의 기본 구조를 생성하는 명령입니다.

이렇게 하려면 터미널을 열고 Scrapy 프로젝트를 저장할 디렉터리로 이동한 다음 scrapy startproject 을 실행합니다. . 아래에서 프로젝트 이름에 대해 scrapy_example을 사용하고 있습니다 -

C:\Users\rajesh>scrapy startproject scrapy_exampleNew Scrapy 프로젝트 'scrapy_example', 템플릿 디렉토리 'c:\python\python361\lib\site-packages\scrapy\templates\project' 사용, C:\Users에 생성 \rajesh\scrapy_example다음으로 첫 스파이더를 시작할 수 있습니다.cd scrapy_examplescrapy genspider example example.comC:\Users\rajesh>cd scrapy_exampleC:\Users\rajesh\scrapy_example>tree /FFolder PATH 목록볼륨 일련 번호는 8CD6-8D39C:.│ scrapy입니다. cfg│└───scrapy_example │ items.py │ middlewares.py │ pipelines.py │ settings.py │ __init__.py │ ├───spiders │ │ __init__.py │ │ │ └───__pycache__ └──── __파이캐시__

또 다른 방법은 아래와 같이 스크래피 쉘을 실행하고 웹 스크래핑을 수행하는 것입니다. -

[18]에서:fetch("https://www.wsj.com/india")019-02-04 22:38:53 [scrapy.core.engine] DEBUG:크롤링(200) " rel="nofollow noopener noreferrer" target="_blank">https://www.wsj.com/india> (참조자:없음) 

스크래피 크롤러는 다운로드한 정보가 포함된 "응답" 개체를 반환합니다. 위의 크롤러에 무엇이 포함되어 있는지 확인해 보겠습니다. −

In [19]:보기(response)Out[19]:True

기본 브라우저에서 웹 링크가 열리고 다음과 같은 내용이 표시됩니다. -

Python과 Scrapy를 사용한 웹 스크래핑?

좋습니다. 저희 웹페이지와 다소 비슷해 보이기 때문에 크롤러가 전체 웹페이지를 성공적으로 다운로드했습니다.

이제 크롤러에 포함된 내용을 살펴보겠습니다. -

[22]에서:print(response.text)  월스트리트 저널 및 속보, 비즈니스, 금융 및 경제 뉴스, 세계 뉴스 및 비디오    <메타 이름 ="viewport" 내용 ="초기 스케일 =1.0001, 최소 스케일 =1.0001, 최대 스케일 =1.0001, user-scalable =no" data-reactid =".2316x0ul96e.0.3"/>   <메타 이름 ="page.site" 콘텐츠 ="wsj" data-reactid =".2316x0ul96e.0.7"/> <메타 이름 =" page.site.product" 콘텐츠 ="WSJ" 데이터 반응 ID =".2316x0ul96e.0.8"/> <메타 이름 ="stack.name" 콘텐츠 ="dj01:vir:prod-sections" 데이터 반응 ID =".2316x0ul96e .0.9"/> <메타 이름 ="리퍼러" 콘텐츠 ="항상" data-reactid =".2316x0ul96e.0.a"/>  <메타 이름 속성 ="og:url" 콘텐츠 ="https://www.wsj.com/india/" 데이터 반응 ID =".2316x0ul96e .0.c:$0"/>    <메타 이름 속성 ="og:site_name" 콘텐츠 ="월스트리트 저널" data-reactid =".2316x0ul96e.0.c:$4"/> <메타 이름 속성 =" og:image" 콘텐츠 ="https://s.wsj.net/img/meta/wsj-social-share.png" data-reactid =".2316x0ul96e.0.c:$5"/> <메타 이름 =" twitter:site" content ="@wsj" data-reactid =".2316x0ul96e.0.c:$6"/> <메타 이름 ="twitter:app:name:iphone" content ="월스트리트 저널" data-reactid =".2316x0ul96e.0.c:$7"/> …&훨씬 더: 

이 웹페이지에서 몇 가지 중요한 정보를 추출해 보겠습니다. −

웹페이지의 정확한 제목 -

Scrapy는 class, id 등과 같은 CSS 선택기를 기반으로 HTML에서 정보를 추출하는 방법을 제공합니다. 웹페이지 제목의 CSS 선택기를 찾으려면 아래와 같이 마우스 오른쪽 버튼을 클릭하고 검사를 클릭하기만 하면 됩니다.

Python과 Scrapy를 사용한 웹 스크래핑?

그러면 브라우저 창에서 개발자 도구가 열립니다 -

Python과 Scrapy를 사용한 웹 스크래핑?

보시다시피 css 클래스 "wsj-headline-link"는 제목이 있는 모든 anchor() 태그에 적용됩니다. 이 정보를 사용하여 응답 개체의 나머지 내용에서 모든 제목을 찾으려고 시도합니다. -

Python과 Scrapy를 사용한 웹 스크래핑?

response.css()는 전달된 CSS 선택기를 기반으로 콘텐츠를 추출하는 함수입니다(위의 앵커 태그처럼). response.css 함수의 몇 가지 예를 더 살펴보겠습니다.

In [24]:response.css(".wsj-headline-link::text").extract_first()Out[24]:'중국, 1월 급등 이후 주식에 대한 두려움'

그리고

In [25]:response.css(".wsj-headline-link").extract_first()Out[25]:'중국 공포 1월 급등 이후 주식을 살펴보세요
'

웹페이지에서 모든 링크를 얻으려면 -

링크 =response.css('a::attr(href)').extract()

출력

['https://www.google.com/intl/en_us/chrome/browser/desktop/index.html','https://support.apple.com/downloads/','https:// www.mozilla.org/en-US/firefox/new/','https://windows.microsoft.com/en-us/internet-explorer/download-ie','https://www.barrons.com ','https://bigcharts.marketwatch.com','https://www.wsj.com/public/page/wsj-x-marketing.html','https://www.dowjones.com/' ,'https://global.factiva.com/factivalogin/login.asp?productname=global','https://www.fnlondon.com/','https://www.mansionglobal.com/',' https://www.marketwatch.com','https://newsplus.wsj.com','https://privatemarkets.dowjones.com','https://djlogin.dowjones.com/login.asp? productname=rnc','https://www.wsj.com/conferences','https://www.wsj.com/pro/centralbanking','https://www.wsj.com/video/', 'https://www.wsj.com','https://www.bigdecisions.com/','https://www.businessspectator.com.au/','https://www.checkout51.com /?utm_source=wsj&utm_medium=digitalhousead&utm_campaign=wsjspotlight','https://www.harpercollins.com/','https://housing. com/','https://www.makaan.com/','https://nypost.com/','https://www.newsamerica.com/','https://www.proptiger. com','https://www.rea-group.com/',…………

wsj(wall street journel) 웹페이지에서 댓글 수를 얻으려면 -

[38]에서:response.css(".wsj-comment-count::text").extract()Out[38]:['71', '59']

위는 Scrapy를 통한 웹 스크래핑에 대한 소개일 뿐이며, Scrapy로 더 많은 작업을 수행할 수 있습니다.