首頁 >後端開發 >Python教學 >Python爬蟲框架Scrapy的使用教學課程

Python爬蟲框架Scrapy的使用教學課程

不言
不言轉載
2018-10-19 16:02:172618瀏覽

這篇文章帶給大家的內容是關於Python爬蟲框架Scrapy的使用教程,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

大家好,這篇文章我們來看看強大的Python爬蟲框架Scrapy。 Scrapy是一個使用簡單,強大的非同步爬蟲框架,我們先來看看他的安裝。

Scrapy的安裝

Scrapy的安裝是很麻煩的,對於一些想使用Scrapy的人來說,它的安裝常常讓很多人死在半路。在此我將我的安裝過程和網路上整理的安裝方法,分享給大家,希望大家能夠安裝順利。

Windows安裝

開始之前,我們要確定自己安裝了Python,本篇文章我們以Python3.5為例。 Scrapy有很多依賴的套件,我們來一一安裝。

首先,使用pip -v,查看pip是否安裝正常,如果正常,那麼我們進行下一步;

pip install wheel這個包我們之前的文章介紹過,安裝好他我們就可以安裝一些wheel件;

lxml安裝,之前的文章說過他的安裝,那我們這裡在重新整理一下。 whl文件地址:here。找到自己對應版本的文件,下載好後,找到文件位置,右鍵點選檔案屬性,點選安全標籤,複製他的所在路徑。開啟管理員工具(cmd),pip install <貼上whl路徑>;

PyOpenssl 的whl檔案位址:here。點擊下載,whl檔案安裝方式同上;

Twisted框架這個框架是一個非同步網路函式庫,是Scrapy的核心。 whl檔案位址:here;

Pywin32這是一個Pywin32相容的函式庫,下載位址:here,選好版本進行下載;

如果上面的函式庫全都安裝好了,那麼我們就可以安裝我們的Scrapy了,pip install 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的中文文件位址:here

Scrapy是一個為了爬取網站數據,提取結構性數據而寫的應用程式框架。可以應用在包括資料挖掘,資訊處理或儲存歷史資料等一系列的程序中。

他的基本項目流程為:

建立一個Scrapy項目

定義提取的Item

#寫一個爬取網站的spider並提取Item

寫Item Pipeline來儲存提取到的Item(即資料)

而一般我們的爬蟲流程為:

抓取索引頁:請求索引頁的URL並且得到來源程式碼,進行下一步分析;

獲取內容和下一頁鏈接:分析源代碼,提取索引頁數據,並且獲取下一頁鏈接,進行下一步抓取;

##翻頁爬取:請求下一頁信息,分析內容並請求在下一頁鏈接;

保存爬取結果:將爬取結果保存為特定格式和文本,或者保存數據庫。

我們一步一步來看看如何使用。

建立專案

在開始爬取之前,您必須建立一個新的Scrapy專案。進入您打算儲存程式碼的目錄中,執行下列指令(以知乎日報為例):

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: 專案中的item檔.zhihurb/pipelines.py: 專案中的pipelines檔案.zhihurb/settings.py: 專案的設定檔.zhihurb/spiders/: 放置spider程式碼的目錄.

定義Item

這一步是定義我們需要獲取到的數據信息,例如我們需要獲得網站裡的一些url,網站文章的內容,文章的作者等。這一步定義的地方就在我們的items.py檔。

import scrapy

class ZhihuItem(scrapy.Item):

name = scrapy.Field()

article = scrapy.Field()
寫Spider

這一步就是寫我們最熟悉的爬蟲了,而我們的Scrapy框架可以讓我們不需要去考慮實作的方法,只要寫出爬取的邏輯就可以了。

首先我們需要在 spiders/ 資料夾下建立我們的爬蟲文件,例如就叫spider.py。寫爬蟲前,我們需要先定義一些內容。我們以知乎日報為例: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刪除

相關文章

看更多