Python爬蟲之scrapy從入門到忘記

一、初窺scrapy

scrapy中文文檔

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

其最初是為了 頁面抓取 (更確切來說, 網路抓取 )所設計的, 也可以應用在獲取API所返回的數據(例如 Amazon Associates Web Services ) 或者通用的網路爬蟲

scrapy是一個很好的爬蟲框架,集爬取、處理、存儲為一體,為無數爬蟲愛好者所熱捧,但個人認為對初學者並不友好,建議初學者打好基礎再來看scrapy。

二、昨夜西風凋碧樹,獨上高樓,望盡天涯路(安裝庫)

本以為自己安裝Python庫已經有一定的理解和方法了,結果還是栽在了安裝scrapy庫上,本人是win7系統+Python3.5的環境。先給大家丟個安裝Python庫的網站:Python安裝庫

1 lxml庫的安裝 通過網站下載安裝(具體安裝方法見後面視頻)

2 zope.interface庫安裝 pip3 install zope.interface

3 twisted庫安裝 通過網站下載安裝

4 pyOpenSSL庫安裝 pip3 install pyOpenSSL

5 pywin32庫安裝 通過網站下載安裝

6 pip3 install scrapy

你以為這樣就結束了,天真,我在運行程序的時候說沒有pywin32的DLL,當時我一臉懵逼,用黑窗口導入pywin32結果報錯,還好在好友的幫助下解決了

錯誤圖

解決方法1

解決方法2

把圖三的文件拷貝到C:WindowsSystem32

三、衣帶漸寬終不悔,為伊消得人憔悴(各種出錯)

創建scrapy項目:

scrapy startproject xiaozhu #今天還是爬取小豬短租數據

scrapy項目文件結構:

xiaozhu/ scrapy.cfg #配置文件 xiaozhu/ __init__.py items.py #定義需要抓取並需要後期處理的數據 pipelines.py #用於後期數據處理的功能 settings.py #文件配置scrapy spiders/ __init__.py ...

1 錯誤一

錯誤圖

出錯原因

解決方案代碼見下

2 錯誤二

無法導出為csv,看了向右奔跑的導出csv代碼,在我本地電腦無法導出,然來去scrapy文檔看了下,對settings.py進行了修改如下:

FEED_URI = file:C://Users/Administrator/Desktop/xiaozhu.csvFEED_FORMAT = csv #csv小寫

四、縱里尋他千百度,驀然回首,那人卻在燈火闌珊處(代碼運行成功)

1 items.py代碼

from scrapy.item import Item,Fieldclass XiaozhuItem(Item): address = Field() price = Field() lease_type = Field() bed_amount = Field() suggestion = Field() comment_star = Field() comment_amount = Field()

2 新建xiaozhuspider.py

import scrapyimport syssys.path.append("..") #解決問題1from scrapy.spiders import CrawlSpiderfrom scrapy.selector import Selectorfrom scrapy.http import Requestfrom xiaozhu.items import XiaozhuItemclass xiaozhu(CrawlSpider): name = xiaozhu start_urls = [http://bj.xiaozhu.com/search-duanzufang-p1-0/] def parse(self, response): item = XiaozhuItem() selector = Selector(response) commoditys = selector.xpath(//ul[@class="pic_list clearfix"]/li) for commodity in commoditys: address = commodity.xpath(div[2]/div/a/span/text()).extract()[0] price = commodity.xpath(div[2]/span[1]/i/text()).extract()[0] lease_type = commodity.xpath(div[2]/div/em/text()).extract()[0].split(/)[0].strip() bed_amount = commodity.xpath(div[2]/div/em/text()).extract()[0].split(/)[1].strip() suggestion = commodity.xpath(div[2]/div/em/text()).extract()[0].split(/)[2].strip() infos = commodity.xpath(div[2]/div/em/span/text()).extract()[0].strip() comment_star = infos.split(/)[0] if / in infos else 無 comment_amount = infos.split(/)[1] if / in infos else infos item[address] = address item[price] = price item[lease_type] = lease_type item[bed_amount] = bed_amount item[suggestion] = suggestion item[comment_star] = comment_star item[comment_amount] = comment_amount yield item urls = [http://bj.xiaozhu.com/search-duanzufang-p{}-0/.format(str(i)) for i in range(1, 14)] for url in urls: yield Request(url, callback=self.parse)

3 新建main.py(運行main.py就可以運行爬蟲了)

from scrapy import cmdlinecmdline.execute("scrapy crawl xiaozhu".split())

結果

五、視頻

自己錄製的視頻

第一次錄製視頻,見笑,大爺們覺得好可以賞二個銅板哦!!!

作者:羅羅攀 Python愛好者社區專欄作者,請勿轉載,謝謝。

簡書主頁:羅羅攀 - 簡書

博客專欄:羅羅攀的博客

配套視頻教程:Python3爬蟲三大案例實戰分享:貓眼電影、今日頭條街拍美圖、淘寶美食 Python3爬蟲三大案例實戰分享

公眾號:Python愛好者社區(微信ID:python_shequ),關注,查看更多連載內容。

推薦閱讀:

Python小工具: 發個周報郵件給老闆
【小林的OpenCV基礎課 2】Hello World!
如何優雅而高效地使用Matplotlib實現數據可視化
有哪些應用場景適合用python的gevent來完成?
使用anaconda以後再要使用不在conda環境中的包,要怎麼安裝?

TAG:Python | Python入门 | Python库 |