這篇文章帶給大家的內容是關於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 scrapyclass ZhihuItem(scrapy.Item):
name = scrapy.Field() article = scrapy.Field()寫Spider這一步就是寫我們最熟悉的爬蟲了,而我們的Scrapy框架可以讓我們不需要去考慮實作的方法,只要寫出爬取的邏輯就可以了。 首先我們需要在 spiders/ 資料夾下建立我們的爬蟲文件,例如就叫spider.py。寫爬蟲前,我們需要先定義一些內容。我們以知乎日報為例:https://daily.zhihu.com/from scrapy import Spiderclass 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中文網其他相關文章!