Scrapy爬蟲框架安裝與demo示例

Scrapy,Python開發的一個快速,高層次的螢幕抓取和web抓取框架,用于抓取web站點並從頁面中提取結構化的數據。Scrapy用途廣泛,下面我們來看一個Scrapy爬蟲框架安裝與demo示例

Scrapy是一個由python語言編寫的通用爬蟲框架,最近專案組的一個兄弟在幫大數據那邊從一些大型電商網站上爬取商口信息,就是使用scrapy來操作的。由于幫其修改了一點該專案的東西,這裏也順便記錄下scray的一些內容,能寫多少是多少吧。scrayp源碼托管在GitHub上,官網(http://scrapy.org)。當前已更新到了1.0.x版本。

一、安裝

scrapy要求python2.7+ 的環境,ubuntu的很久之前就已經是python2.7+了,安裝也比較簡單。centos7.x上默認使用的是python2.7+ 。這裏以這兩個主流發行版爲例說下安裝。

1、ubuntu下

ubuntu下的安裝非常容易 ,直接可以通過apt-get命令搞定(不過默認ubuntu源裏的scrapy版本會有些老舊):

sudo apt-get update && sudo apt-get install scrapy-VERSION
上面VERSION換成你要安裝版本號。

這裏可以導入scrapy的官方源,並導入key和scray.list,如下:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 627220E7
echo 'deb http://archive.scrapy.org/ubuntu scrapy main' | sudo tee /etc/apt/sources.list.d/scrapy.list
當然也可以使用pip進行安裝,命令如下:

pip install scrapy
2、centos7下

由于centos6下需要升級python版本,這裏簡單起見直接使用centos7 ,默認centos7使用的python包管理器是easy_install ---當然也可以通過easy_install安裝pip。所以使用如下命令搞定scrapy的安裝:

easy_install scrapy
不過安裝過程可能不會像上面那麽順利,就爲其還依賴一些rpm包,所以在安裝前需要安裝如下包:

yum install libxslt-devel libffi libffi-devel python-devel gcc openssl openssl-devel
如果不事先安裝以上包,可能會遇到如下的相關報錯和問題

報錯1:

ERROR: /bin/sh: xslt-config: command not found
** make sure the development packages of libxml2 and libxslt are installed **
解決方法yum -y install libxslt-devel 。

報錯2:

Using build configuration of libxslt 1.1.28
Building against libxml2/libxslt in the following directory: /usr/lib64
src/lxml/lxml.etree.c:85:20: fatal error: Python.h: No such file or directory
#include "Python.h"
^
compilation terminated.
Compile failed: command 'gcc' failed with exit status 1
error: Setup script exited with error: command 'gcc' failed with exit status 1
缺少python-devel包,因爲Python.h文件是在python-devel包中的。直接yum安裝該包即可。

報錯3:

removing: _configtest.c _configtest.o
c/_cffi_backend.c:13:17: fatal error: ffi.h: No such file or directory
#include <ffi.h>
^
compilation terminated.
error: Setup script exited with error: command 'gcc' failed with exit status
centos下的報錯示還是很好的,yum list|grep ffi相關的包,發現執行如下安裝yum -y install libffi libffi-devel 。

二、簡單測試

我們先創建一個demo專案,並查看下其目錄結構:

創建demo專案
# scrapy startproject demo
2015-12-26 12:24:09 [scrapy] INFO: Scrapy 1.0.3 started (bot: scrapybot)
2015-12-26 12:24:09 [scrapy] INFO: Optional features available: ssl, http11
2015-12-26 12:24:09 [scrapy] INFO: Overridden settings: {}
New Scrapy project 'demo' created in:
/root/demo
You can start your first spider with:
cd demo
scrapy genspider example example.com
demo專案的目錄結構
# tree demo/
demo/
├── demo
│ ├── __init__.py
│ ├── items.py
│ ├── pipelines.py
│ ├── settings.py
│ └── spiders
│ └── __init__.py
└── scrapy.cfg
2 directories, 6 files
上面創建的這些demo文件作用如下:

scrapy.cfg: 專案的配置文件,一般無需修改。
tutorial/: 該專案的python模塊。之後您將在此加入代碼。
tutorial/items.py: 專案中的item文件,該文件存放的是抓取的類目,類似于dict字典規則。
tutorial/pipelines.py: 專案中的pipelines文件,該文件爲數據抓取後進行數據處理的方法。
tutorial/settings.py: 專案的設置文件,可以設置請求的request header、cookie等
tutorial/spiders/: 放置spider代碼的目錄。
在進行更細的介紹之前,先看一個官方示例:

修改items.py文件,內容如下:

import scrapy
class DmozItem(scrapy.Item):
title = scrapy.Field()
link = scrapy.Field()
desc = scrapy.Field()
該處我們定義了我們要抓取某網站的標題、url、描述三部分信息,後在spider中會調用到。

可以根據上面的提示,使用scrapy genspider example example.com 命令創建一個name名爲example,start_urls爲example.com 的spider,也可以手動在demo/spiders目錄下創建一個文件,按官方示例內容如下:

import scrapy
class DmozSpider(scrapy.Spider):
name = "dmoz"
allowed_domains = ["dmoz.org"]
start_urls = [
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
]
def parse(self, response):
filename = response.url.split("/")[-2]
with open(filename, 'wb') as f:
f.write(response.body)
上面這段代碼非常簡單,定義了一個名字爲dmoz的spider,抓取的起始頁爲二個,沒有指定rules及followe頁面。也未指定特別的回調函數,只編輯了一個默認的處理函數parse,作爲是將上面兩個頁的內容抓取下來,保存到文件。所以連items裏的定義都沒用到。調用該抓取規則的命令如下:

scrapy crawl dmoz
注:在一個專案下spider的name需要是唯一的,絕對不能重複,一個專案下有多少spider可以通過scrapy list查看。

# scrapy list
dmoz
example
而使用items,就要加入選擇器(selectors)將相應的request內容通過xpath(xml 或html 規則)或re模塊規則對頁面對應處理後斌值給items項,並返回。如下:

import scrapy
class DmozSpider(scrapy.Spider):
name = "dmoz"
allowed_domains = ["dmoz.org"]
start_urls = [
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
]
def parse(self, response):
for sel in response.xpath('//ul/li'):
title = sel.xpath('a/text()').extract()
link = sel.xpath([email protected]').extract()
desc = sel.xpath('text()').extract()
print title, link, desc
再執行scrapy crawl dmoz時,會將相應的三項結果輸出到螢幕,也可以將print改爲return,並在scrapy crawl命令後面使用-o參數指定保存到文件,默認支持的文件類型有csv\xml\json等。

Python 爬蟲的工具列表大全


即然提到了爬蟲,就從網上理了一份python爬蟲相關的包。包含與網頁抓取和數據處理的Python庫

網路

通用

urllib -網路庫(stdlib)。

requests -網路庫。

grab – 網路庫(基于pycurl)。

pycurl – 網路庫(綁定libcurl)。

urllib3 – Python HTTP庫,安全連接池、支持文件post、可用性高。

httplib2 – 網路庫。

RoboBrowser – 一個簡單的、極具Python風格的Python庫,無需獨立的浏覽器即可浏覽網頁。

MechanicalSoup -一個與網站自動交互Python庫。

mechanize -有狀態、可編程的Web浏覽庫。

socket – 底層網路接口(stdlib)。

Unirest for Python – Unirest是一套可用于多種語言的輕量級的HTTP庫。

hyper – Python的HTTP/2客戶端。

PySocks – SocksiPy更新並積極維護的版本,包括錯誤修複和一些其他的特征。作爲socket模塊的直接替換。

異步

treq – 類似于requests的API(基于twisted)。

aiohttp – asyncio的HTTP客戶端/伺服器(PEP-3156)。

網路爬蟲框架

功能齊全的爬蟲

grab – 網路爬蟲框架(基于pycurl/multicur)。

scrapy – 網路爬蟲框架(基于twisted),不支持Python3。

pyspider – 一個強大的爬蟲系統。

cola – 一個分布式爬蟲框架。

其他

portia – 基于Scrapy的可視化爬蟲。

restkit – Python的HTTP資源工具包。它可以讓你輕松地訪問HTTP資源,並圍繞它建立的對象。

demiurge – 基于PyQuery的爬蟲微框架。

HTML/XML解析器

通用

lxml – C語言編寫高效HTML/ XML處理庫。支持XPath。

cssselect – 解析DOM樹和CSS選擇器。

pyquery – 解析DOM樹和jQuery選擇器。

BeautifulSoup – 低效HTML/ XML處理庫,純Python實現。

html5lib – 根據WHATWG規範生成HTML/ XML文檔的DOM。該規範被用在現在所有的浏覽器上。

feedparser – 解析RSS/ATOM feeds。

MarkupSafe – 爲XML/HTML/XHTML提供了安全轉義的字符串。

xmltodict – 一個可以讓你在處理XML時感覺像在處理JSON一樣的Python模塊。

xhtml2pdf – 將HTML/CSS轉換爲PDF。

untangle – 輕松實現將XML文件轉換爲Python對象。

清理

Bleach – 清理HTML(需要html5lib)。

sanitize – 爲混亂的數據世界帶來清明。

文本處理

用于解析和操作簡單文本的庫。

通用

difflib – (Python標准庫)幫助進行差異化比較。

Levenshtein – 快速計算Levenshtein距離和字符串相似度。

fuzzywuzzy – 模糊字符串匹配。

esmre – 正則表達式加速器。

ftfy – 自動整理Unicode文本,減少碎片化。

轉換

unidecode – 將Unicode文本轉爲ASCII。

字符編碼

uniout – 列印可讀字符,而不是被轉義的字符串。

chardet – 兼容 Python的2/3的字符編碼器。

xpinyin – 一個將中國漢字轉爲拼音的庫。

pangu.py – 格式化文本中CJK和字母數字的間距。

Slug化

awesome-slugify – 一個可以保留unicode的Python slugify庫。

python-slugify – 一個可以將Unicode轉爲ASCII的Python slugify庫。

unicode-slugify – 一個可以將生成Unicode slugs的工具。

pytils – 處理俄語字符串的簡單工具(包括pytils.translit.slugify)。

通用解析器

PLY – lex和yacc解析工具的Python實現。

pyparsing – 一個通用框架的生成語法分析器。

人的名字

python-nameparser -解析人的名字的組件。

電話號碼

phonenumbers -解析,格式化,存儲和驗證國際電話號碼。

用戶代理字符串

python-user-agents – 浏覽器用戶代理的解析器。

HTTP Agent Parser – Python的HTTP代理分析器。

特定格式文件處理

解析和處理特定文本格式的庫。

通用

tablib – 一個把數據導出爲XLS、CSV、JSON、YAML等格式的模塊。

textract – 從各種文件中提取文本,比如 Word、PowerPoint、PDF等。

messytables – 解析混亂的表格數據的工具。

rows – 一個常用數據接口,支持的格式很多(目前支持CSV,HTML,XLS,TXT – 將來還會提供更多!)。

Office

python-docx – 讀取,查詢和修改的Microsoft Word2007/2008的docx文件。

xlwt / xlrd – 從Excel文件讀取寫入數據和格式信息。

XlsxWriter – 一個創建Excel.xlsx文件的Python模塊。

xlwings – 一個BSD許可的庫,可以很容易地在Excel中調用Python,反之亦然。

openpyxl – 一個用于讀取和寫入的Excel2010 XLSX/ XLSM/ xltx/ XLTM文件的庫。

Marmir – 提取Python數據結構並將其轉換爲電子表格。

PDF

PDFMiner – 一個從PDF文檔中提取信息的工具。

PyPDF2 – 一個能夠分割、合並和轉換PDF頁面的庫。

ReportLab – 允許快速創建豐富的PDF文檔。

pdftables – 直接從PDF文件中提取表格。

Markdown

Python-Markdown – 一個用Python實現的John Gruber的Markdown。

Mistune – 速度最快,功能全面的Markdown純Python解析器。

markdown2 – 一個完全用Python實現的快速的Markdown。

YAML

PyYAML – 一個Python的YAML解析器。

CSS

cssutils – 一個Python的CSS庫。

ATOM/RSS

feedparser – 通用的feed解析器。

SQL

sqlparse – 一個非驗證的SQL語句分析器。

HTTP

HTTP

http-parser – C語言實現的HTTP請求/回應消息解析器。

微格式

opengraph – 一個用來解析Open Graph協定標簽的Python模塊。

可移植的執行體

pefile – 一個多平台的用于解析和處理可移植執行體(即PE)文件的模塊。

PSD

psd-tools – 將Adobe Photoshop PSD(即PE)文件讀取到Python數據結構。

自然語言處理

處理人類語言問題的庫。

NLTK -編寫Python程序來處理人類語言數據的最好平台。

Pattern – Python的網路挖掘模塊。他有自然語言處理工具,機器學習以及其它。

TextBlob – 爲深入自然語言處理任務提供了一致的API。是基于NLTK以及Pattern的巨人之肩上發展的。

jieba – 中文分詞工具。

SnowNLP – 中文文本處理庫。

loso – 另一個中文分詞庫。

genius – 基于條件隨機域的中文分詞。

langid.py – 獨立的語言識別系統。

Korean – 一個韓文形態庫。

pymorphy2 – 俄語形態分析器(詞性標注+詞形變化引擎)。

PyPLN – 用Python編寫的分布式自然語言處理通道。這個專案的目標是創建一種簡單的方法使用NLTK通過網路接口處理大語言庫。

浏覽器自動化與仿真

selenium – 自動化真正的浏覽器(Chrome浏覽器,火狐浏覽器,Opera浏覽器,IE浏覽器)。

Ghost.py – 對PyQt的webkit的封裝(需要PyQT)。

Spynner – 對PyQt的webkit的封裝(需要PyQT)。

Splinter – 通用API浏覽器模擬器(selenium web驅動,Django客戶端,Zope)。

多重處理

threading – Python標准庫的線程運行。對于I/O密集型任務很有效。對于CPU綁定的任務沒用,因爲python GIL。

multiprocessing – 標准的Python庫運行多進程。

celery – 基于分布式消息傳遞的異步任務隊列/作業隊列。

concurrent-futures – concurrent-futures 模塊爲調用異步執行提供了一個高層次的接口。

異步

異步網路編程庫

asyncio – (在Python 3.4 +版本以上的 Python標准庫)異步I/O,時間循環,協同程序和任務。

Twisted – 基于事件驅動的網路引擎框架。

Tornado – 一個網路框架和異步網路庫。

pulsar – Python事件驅動的並發框架。

diesel – Python的基于綠色事件的I/O框架。

gevent – 一個使用greenlet 的基于協程的Python網路庫。

eventlet – 有WSGI支持的異步框架。

Tomorrow – 異步代碼的奇妙的修飾語法。

隊列

celery – 基于分布式消息傳遞的異步任務隊列/作業隊列。

huey – 小型多線程任務隊列。

mrq – Mr. Queue – 使用redis & Gevent 的Python分布式工作任務隊列。

RQ – 基于Redis的輕量級任務隊列管理器。

simpleq – 一個簡單的,可無限擴展,基于Amazon SQS的隊列。

python-gearman – Gearman的Python API。

雲計算

picloud – 雲端執行Python代碼。

dominoup.com – 雲端執行R,Python和matlab代碼。

電子郵件

電子郵件解析庫

flanker – 電子郵件地址和Mime解析庫。

Talon – Mailgun庫用于提取消息的報價和簽名。

網址和網路地址操作

解析/修改網址和網路地址庫。

URL

furl – 一個小的Python庫,使得操縱URL簡單化。

purl – 一個簡單的不可改變的URL以及一個幹淨的用于調試和操作的API。

urllib.parse – 用于打破統一資源定位器(URL)的字符串在組件(尋址方案,網路位置,路徑等)之間的隔斷,爲了結合組件到一個URL字符串,並將“相對URL”轉化爲一個絕對URL,稱之爲“基本URL”。

tldextract – 從URL的注冊域和子域中准確分離TLD,使用公共後綴列表。

網路地址

netaddr – 用于顯示和操縱網路地址的Python庫。

網頁內容提取

提取網頁內容的庫。

HTML頁面的文本和元數據

newspaper – 用Python進行新聞提取、文章提取和內容策展。

html2text – 將HTML轉爲Markdown格式文本。

python-goose – HTML內容/文章提取器。

lassie – 人性化的網頁內容檢索工具

micawber – 一個從網址中提取豐富內容的小庫。

sumy -一個自動彙總文本文件和HTML網頁的模塊

Haul – 一個可擴展的圖像爬蟲。

python-readability – arc90 readability工具的快速Python接口。

scrapely – 從HTML網頁中提取結構化數據的庫。給出了一些Web頁面和數據提取的示例,scrapely爲所有類似的網頁構建一個分析器。

視頻

youtube-dl – 一個從YouTube下載視頻的小命令行程序。

you-get – Python3的YouTube、優酷/ Niconico視頻下載器。

維基

WikiTeam – 下載和保存wikis的工具。

WebSocket

用于WebSocket的庫。

Crossbar – 開源的應用消息傳遞路由器(Python實現的用于Autobahn的WebSocket和WAMP)。

AutobahnPython – 提供了WebSocket協定和WAMP協定的Python實現並且開源。

WebSocket-for-Python – Python 2和3以及PyPy的WebSocket客戶端和伺服器庫。

DNS解析

dnsyo – 在全球超過1500個的DNS伺服器上檢查你的DNS。

pycares – c-ares的接口。c-ares是進行DNS請求和異步名稱決議的C語言庫。

計算機視覺

OpenCV – 開源計算機視覺庫。

SimpleCV – 用于照相機、圖像處理、特征提取、格式轉換的簡介,可讀性強的接口(基于OpenCV)。

mahotas – 快速計算機圖像處理算法(完全使用 C++ 實現),完全基于 numpy 的數組作爲它的數據類型。

代理伺服器

shadowsocks – 一個快速隧道代理,可幫你穿透防火牆(支持TCP和UDP,TFO,多用戶和平滑重啓,目的IP黑名單)。

tproxy – tproxy是一個簡單的TCP路由代理(第7層),基于Gevent,用Python進行配置。

其他Python工具列表

awesome-python

pycrumbs

python-github-projects

python_reference

pythonidae

更多相關文章
  • Phalcon是一款php中國外非常的流程的框架了,但在國內Phalcon框架還不怎麽樣了,小編今天來爲各位介紹Phalcon框架安裝與使用教程,希望下文可以幫助到各位.linux伺服器安裝phalcon框架Phal
  • Semantic UI框架是一款css+js的框架了我們可以使用它來簡化我們在開發中的一些過多的操作了,下面一起來看一篇安裝 Semantic UI框架安裝使用方法的教程.Semantic UI 是一套開源的 CSS
  • Hadoop現在應用在大型網站應用中,Hadoop是一個分布式計算開源框架現在各大型網站都用上了,像yahoo,google都有用,分布式計算開源框架的核心技術是MapReduce和HDFS了,下面我們就來介紹一個H
  • Swoole是一種PHP高級Web開發框架,框架不是爲了提升網站的效能,是爲了提升網站的開發效率.最少的效能損耗,換取最大的開發效率,下面我們來看看Ubuntu14.04中Swoole擴展安裝與使用方法,有需了解的朋友可進入參考.Swoole是國內牛人寫的一個PHP的異步,並行,分步式擴展,是一個P ...
  • 文章介紹了一個關于FCKeditor配置安裝與常用問題解決教程,有需要了解的朋友可以參考一下.FCKeditor資料下載及介紹 官方網站:http://www.fckeditor.net 1.下載FCKeditor *.*.* 2.下載fckeditor-java-*.*.*-bin.zip 3.下 ...
  • Windows7中jdk安裝與環境變量配置圖解
    JDK(Java Development Kit) 是 Java 語言的軟件開發工具包(S
  • Kali Linux是基于Debian的Linux發行版, 設計用于數字取證和滲透測試.由Offensive Security Ltd維護和資助,本文爲各位介紹Kali Linux下Veil安裝與使用的方法,具體細節如下所示.Veil是一款繞過殺毒軟件的payload生成器,今天我將給大家分享如何安
  • Linux下Nagios監控linux+windows的安裝與配置
    下文來爲各位介紹Linux下Nagios監控linux+windows的安裝與配置方法,希望此方法可以幫助到各位朋友的哦.一.Nagios簡介 Nagios是一款開源的電腦系統和網路監視工具,能有效監控Windows.Linux和Unix的主機狀態,交換機路由器等網路設置,印表機等.在系統或服務狀態
一周排行