這里寫一下爬蟲大概的步驟,主要是自己鞏固一下知識,順便復習一下。
一,網絡爬蟲的步驟
1,創建一個工程
scrapy startproject 工程名稱
創建好工程后,目錄結構大概如下:
其中:
scrapy.cfg:項目的主配置信息(真正爬蟲相關的配置信息在settings.py文件中)
items.py:設置數據存儲模板,用於結構化數據,如:Django的Model
pipelines:數據持久化處理
settings.py:配置文件,如:遞歸的層數,並發數,延遲下載等
spiders:爬蟲目錄,如:創建文件,編寫爬蟲解析規則
2,在工程目錄下創建一個爬蟲文件
1, cd 工程 2,scrapy genspider example example.com 其中: example:表示爬蟲文件的名稱 example.com 表示起始的url(這個url可以隨意寫,最后在文件中修改即可)
3,對應的文件中編寫爬蟲程序來完成爬蟲的相關操作
打開first.py,然后進入編寫:
4,配置文件的編寫
進入settings.py 中修改2個地方:
1,在大概19行中:對請求載體的身份進行偽裝 我們可以去谷歌中找一個User-Agent的值 復制進去。效果如下: USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36' 2,在大概22行中,修改robots協議 robots協議是君子協議,大概爬蟲的話,我們可以不遵照這個協議,哈哈哈哈 ROBOTSTXT_OBEY = False
5,執行
scrapy crwal 爬蟲文件的名稱 --nolog(組織日志信息的輸出) # 輸出打印信息 scrapy crawl first # 不輸出打印信息 scrapy crawl first --nolog
效果如下:
【爬取的是楊子晚報,這里就以此為例,創建scrapy爬蟲 網址:http://www.yangtse.com/】
第一步:安裝scrapy框架
(這里不做詳細介紹了,要是安裝遇到問題的朋友們,可以參考下面鏈接
http://www.cnblogs.com/wj-1314/p/7856695.html)
第二步:創建scrapy爬蟲文件
格式:scrapy startproject + 項目名稱
scrapy startproject yangzi
第三步:進入爬蟲文件
格式:cd 項目名稱
cd yangzi
第四步:創建爬蟲項目
格式:scrapy genspider -t basic 項目名稱 網址
具體用法如下:
scrapy genspider -t basic yz http://www.yangtse.com/
創建好了,如下圖:
解釋一下文件:
- scrapy.cfg:項目的配置文件
- yangzi:該項目的python模塊。之后您將在此加入代碼。
- yangzi/items.py:項目中的item文件。
- yangzi/pipelines.py:項目中的pipelines文件。
- yangzi/yz/:放置spider代碼的目錄。
第五步:進入爬蟲項目中,先寫items
寫這個的目的就是告訴項目,你要爬去什么東西,比如標題,鏈接,作者等.
Item是保存爬取到的數據的容器:其使用方法和python字典類似,並且提供了額外保護機制來避免拼寫錯誤導致的未定義字段錯誤。
類似在ORM中做的一樣,你可以通過創建一個scrapy.Item
類,並且定義類型為scrapy.Field
的類屬性來定義一個Item。
首先根據需要從dmoz.org獲取到的數據對item進行建模。我們需要從dmoz中獲取名字,url,以及網站的描述。對此,在item中定義相應的字段。
以我寫的為例,我想爬取標題,鏈接,內容,如下:
class YangziItem(scrapy.Item): # define the fields for your item here like: #標題 title = scrapy.Field() #鏈接 link = scrapy.Field() #內容 text = scrapy.Field()
第六步:進入pipelines,設置相應程序
分析爬去的網站,依次爬取的東西,因為pipelines是進行后續處理的,比如把數據寫入MySQL,或者寫入本地文檔啊等等,就在pipelies里面寫。這里直接輸出,不做數據庫的導入處理
class YangziPipeline(object): def process_item(self, item, spider): print(item["title"]) print(item["link"]) return item
第七步:再寫自己創建的爬蟲
(其實,爬蟲和pipelines和settings前后順序可以顛倒,這個不重要,但是一定要先寫items)
Spider是用戶編寫用於從單個網站(或者一些網站)爬取數據的類。
其包含了一個用於下載的初始url,如何跟進網頁中的鏈接以及如何分析頁面中的內容,提取生成item的方法。
為了創建一個Spider,您必須繼承scrapy.Spider
類,且定義以下三個屬性:
name
:用於區別Spider。改名字必須是唯一的,您不可以為不同的Spider設定相同的名字。start_urls
:包含了Spider在啟動時進行爬取的url列表。因此,第一個被獲取的頁面給將是其中之一。后續的URL則從初始的URL獲取到的數據中提取。-
parse()
:是spider的一個方法。被調用時,每個初始url完成下載后生成的Response
對象將會作為唯一的參數傳遞給該函數。該方法負責解析返回的數據(response data),提取數據(生成item)以及生成需要進一步處理的URL的Request
對象。
進入爬蟲后,先導入items,接下來需要創建一個ITEM容器,
it = YangziItem()
然后寫自己的要爬去的內容,分析網頁后,利用xpath寫
def parse(self, response): it = YangziItem() it["title"] = response.xpath('//div[@class="box-text-title]/text()').extract() it["link"] = response.xpath('//a[@target="_blank"]/@href').extract() #it["text"] = response.xpath().extract() yield it
第八步:設置settings
在settings中配置pipelines(ctrl+f 找到pipelines,然后解除那三行的注釋,大約在64-68行之間),如下圖
第九步:運行爬蟲文件
scrapy crawl yz
scrapy crawl yz --nolog #不想顯示日志文件