>  기사  >  백엔드 개발  >  Python 크롤러 프레임워크 Scrapy 사용에 대한 튜토리얼

Python 크롤러 프레임워크 Scrapy 사용에 대한 튜토리얼

不言
不言앞으로
2018-10-19 16:02:172586검색

이 기사는 Python 크롤러 프레임워크인 Scrapy 사용에 대한 튜토리얼을 제공합니다. 이는 특정 참조 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

안녕하세요 여러분, 이 글에서는 강력한 Python 크롤러 프레임워크인 Scrapy를 살펴보겠습니다. Scrapy는 사용이 간편하고 강력한 비동기 크롤러 프레임워크입니다. 먼저 설치를 살펴보겠습니다.

Scrapy 설치

Scrapy 설치는 매우 번거로운 일입니다. Scrapy를 사용하려는 일부 사람들에게는 설치로 인해 많은 사람들이 중간에 죽는 경우가 많습니다. 여기에서는 제가 설치하는 과정과 인터넷에 정리된 설치 방법을 여러분과 공유하겠습니다. 모두가 원활하게 설치할 수 있기를 바랍니다.

Windows 설치

시작하기 전에 Python이 설치되어 있는지 확인해야 합니다. 이 문서에서는 Python3.5를 예로 들어 보겠습니다. Scrapy에는 종속 패키지가 많이 있으므로 하나씩 설치해 보겠습니다.

먼저 pip -v를 사용하여 pip가 정상적으로 설치되었는지 확인합니다. 정상이면 다음 단계로 진행합니다.

pip install 휠 이 패키지는 설치 후 수행할 수 있습니다. 휠 소프트웨어 설치

lxml 설치, 이전 기사에서 설치에 대해 언급했으므로 여기서 다시 정리하겠습니다. whl 파일 주소: 여기. 해당 버전의 파일을 찾으세요. 다운로드 후 파일 위치를 찾아 파일 속성을 마우스 오른쪽 버튼으로 클릭하고 보안 라벨을 클릭한 후 해당 경로를 복사하세요. 관리자 도구(cmd)를 열고 pip install ;

PyOpenssl whl 파일 주소: 여기. 다운로드하려면 클릭하세요. whl 파일 설치 방법은 위와 동일합니다.

Twisted Framework 이 프레임워크는 비동기 네트워크 라이브러리이며 Scrapy의 핵심입니다. whl 파일 주소: 여기;

Pywin32 이것은 Pywin32 호환 라이브러리입니다. 다운로드 주소: 여기에서 다운로드할 버전을 선택하세요.

위 라이브러리가 모두 설치되어 있으면 Scrapy를 설치할 수 있습니다. pip 설치가 번거롭나요? scrapy

귀찮게 하고 싶지 않다면 Windows에서도 매우 편리하게 설치할 수 있습니다. 그런 다음 앞서 언급한 Anaconda를 사용해야 합니다. 특정 설치를 직접 찾거나 이전 기사에서 찾을 수 있습니다. 그런 다음 Scrapy를 설치하려면 한 줄만 있으면 됩니다.

conda install scrapy

Linux 설치

Linux 시스템 설치가 더 간단합니다.

sudo apt-get install build-essential python3-dev libssl-dev libffi-dev libxml2 libxml2 -dev libxslt1-dev zlib1g-dev

Mac OS 설치

먼저 일부 C++ 종속 라이브러리를 설치해야 합니다. xcode-select --install

명령줄 개발 도구를 설치해야 합니다. 클릭하여 설치합니다. 설치가 완료되면 종속 라이브러리도 설치됩니다.

그런 다음 pip를 직접 사용하여 pip install scrapy를 설치합니다

위에서 Scrapy 라이브러리 설치는 기본적으로 해결되었습니다.

Scrapy의 기본 사용

Scrapy의 중국어 문서 주소: 여기

Scrapy는 웹사이트 데이터를 크롤링하고 구조적 데이터를 추출하기 위해 작성된 애플리케이션 프레임워크입니다. 데이터 마이닝, 정보 처리 또는 기록 데이터 저장을 포함한 일련의 프로그램에서 사용할 수 있습니다.

그의 기본 프로젝트 프로세스는 다음과 같습니다.

Scrapy 프로젝트 만들기

추출된 항목 정의

웹 사이트를 크롤링하고 항목을 추출하는 스파이더 작성

추출된 항목(예: 데이터)을 저장하는 항목 파이프라인 작성

일반적으로 우리의 크롤러 프로세스는 다음과 같습니다.

색인 페이지 잡기: 색인 페이지의 URL을 요청하고 소스 코드를 얻은 후 다음 분석 단계를 수행합니다.

콘텐츠 및 다음 페이지 링크 가져오기: 소스 코드를 분석합니다. , 색인 페이지 데이터 추출 및 다음 크롤링 단계를 위한 다음 페이지 링크 획득

페이지 넘기기 크롤링: 다음 페이지 정보 요청, 콘텐츠 분석 및 다음 페이지 링크 요청

크롤링 결과 저장; 크롤링 결과를 특정 형식과 텍스트로 변환하거나 데이터베이스를 저장합니다.

사용 방법을 단계별로 살펴보겠습니다.

Create Project

스크래핑을 시작하기 전에 새로운 Scrapy 프로젝트를 생성해야 합니다. 코드를 저장할 디렉터리를 입력하고 다음 명령을 실행합니다(예: Zhihu Daily):

scrapy startproject zhihurb

이 명령은 다음 콘텐츠를 포함하는 zhihu 디렉터리를 생성합니다:

zhihurb/

scrapy.cfg

zhihurb/

    __init__.py

    items.py

    pipelines.py

    settings.py

    spiders/

        __init__.py

        ...

이 파일들은 각각 다음과 같습니다:

scrapy.cfg: 프로젝트의 구성 파일 zhihurb/: 프로젝트의 Python 모듈. 나중에 여기에 코드를 추가할 것입니다. zhihurb/items.py: 프로젝트의 아이템 파일.zhihurb/pipelines.py: 프로젝트의 파이프라인 파일.zhihurb/settings.py: 프로젝트의 설정 파일.zhihurb/spiders/: 스파이더 코드가 있는 디렉터리

항목 정의

이 단계는 우리가 획득해야 하는 데이터 정보를 정의하는 것입니다. 예를 들어 웹사이트의 일부 URL, 웹사이트 기사의 내용, 기사 작성자 등을 얻어야 합니다. 이 단계가 정의된 위치는 items.py 파일에 있습니다.

import scrapy

class ZhihuItem(scrapy.Item):

name = scrapy.Field()

article = scrapy.Field()

Writing Spider

이 단계는 우리에게 가장 친숙한 크롤러를 작성하는 것이며, Scrapy 프레임워크를 사용하면 구현 방법을 생각할 필요 없이 그냥 Just 크롤링 논리를 작성합니다.

먼저 spiders/ 폴더에 spider.py라는 크롤러 파일을 만들어야 합니다. 크롤러를 작성하기 전에 먼저 일부 콘텐츠를 정의해야 합니다. Zhihu Daily를 예로 들어보겠습니다: https://daily.zhihu.com/

from scrapy import Spider

class ZhihuSpider(Spider):

name = "zhihu"

allowed_domains = ["zhihu.com"]

start_urls = ['https://daily.zhihu.com/']

这里我们定义了什么呢?首先我们导入了Scrapy的Spider组件。然后创建一个爬虫类,在类里我们定义了我们的爬虫名称:zhihu(注意:爬虫名称独一无二的,是不可以和别的爬虫重复的)。还定义了一个网址范围,和一个起始 url 列表,说明起始 url 可以是多个。

然后我们定义一个解析函数:

def parse(self, response):

print(response.text)

我们直接打印一下,看看这个解析函数是什么。

运行爬虫

scrapy crawl zhihu

由于Scrapy是不支持在IDE中执行,所以我们必须在命令行里执行命令,我们要确定是不是cd到爬虫目录下。然后执行,这里的命令顾名思义,crawl是蜘蛛的意思,zhihu就是我们定义的爬虫名称了。

查看输出,我们先看到的是一些爬虫类的输出,可以看到输出的log中包含定义在 start_urls 的初始URL,并且与spider中是一一对应的。我们接着可以看到打印出了网页源代码。可是我们似乎并没有做什么,就得到了网页的源码,这是Scrapy比较方便的一点。

提取数据

接着就可以使用解析工具解析源码,拿到数据了。

由于Scrapy内置了CSS和xpath选择器,而我们虽然可以使用Beautifulsoup,但是BeautifulSoup的缺点就是慢,这不符合我们Scrapy的风格,所有我还是建议大家使用CSS或者Xpath。

由于之前我并没有写过关于Xpath或者CSS选择器的用法,那么首先这个并不难,而且熟悉浏览器的用法,可以很简单的掌握他们。

我们以提取知乎日报里的文章url为例:

from scrapy import Request

def parse(self, response):

urls = response.xpath('//p[@class="box"]/a/@href').extract()

for url in urls:

    yield Request(url, callback=self.parse_url)

这里我们使用xpath解析出所有的url(extract()是获得所有URL集合,extract_first()是获得第一个)。然后将url利用yield语法糖,回调函数给下一个解析url的函数。

使用item

后面详细的组件使用留在下一章讲解,这里假如我们解析出了文章内容和标题,我们要将提取的数据保存到item容器。

Item对象相当于是自定义的python字典。 您可以使用标准的字典语法来获取到其每个字段的值。(字段即是我们之前用Field赋值的属性)。

假如我们下一个解析函数解析出了数据

def parse_url(self, response):

# name = xxxx

# article = xxxx

# 保存

item = DmozItem()

item['name'] = name

item['article'] = article

# 返回item

yield item

保存爬取到的数据

这里我们需要在管道文件pipelines.py里去操作数据,比如我们要将这些数据的文章标题只保留 5 个字,然后保存在文本里。或者我们要将数据保存到数据库里,这些都是在管道文件里面操作。我们后面在详细讲解。

那么最简单的存储方法是使用命令行命令:

scrapy crawl zhihu -o items.json

这条命令就会完成我们的数据保存在根目录的json文件里,我们还可以将他格式保存为msv,pickle等。改变命令后面的格式就可以了。

위 내용은 Python 크롤러 프레임워크 Scrapy 사용에 대한 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제