一、初步使用scrapy
網上教程很多,不重複介紹了;
一些基本的scrapy命令
scrapy startproject preoject_name // 創造一個scrapy 項目
然後進入目錄preoject_name(你剛創建的項目):
scrapy genspider Lushan "www.ym94.cn"
// 如果沒有修改模板 就是使用默認的模板,自動生成
scrapy list //檢查當前scrapy 下的爬蟲
PS:在Pycharm 下編寫代碼 和最後cmd需要注意:
Pycharm 是總的目錄作爲你的根路徑,而cmd 是當前目錄作爲根路勁,所以爲了同步在Pycharm 中設置如下信息
找到剛纔建立的項目,設置爲當前根目錄。
直接運行會出現no module named ×××.items
解決:
1,找到你的scrapy項目上右鍵
2.然後點擊make_directory as
3.最後點擊sources root
4.看到文件夾編程藍色就成功了
二、初步瞭解Scrap
下面這個圖解釋了全過程。
首先有Spiders 告訴Scheduler(任務調度)需要爬取的網址,然後requests請求,從網上獲得請求,然後返回給Spider
Spider數據初步處理後交給pipelines保存或者輸出等。(只是大概說了下流程,詳細的過程還請各位百度)
下面是我的一個小爬蟲項目
Spiders/Demo.py 就是Spider
其中這個函數就是頁面初始處理的函數,可以把獲得的url 重新入隊,等待再次爬起(深度爬取也可以設置)
class LushanSpider(scrapy.Spider):
name = 'LuShan' # 必需
allowed_domains = ['www.hnuc.edu.cn'] # 必需
url = 'http://www.****.***.cn/column/36/list_' # 學術預告
# 起始URL
# offset = 1
start_urls = ["http://****/column/36/index.shtml"] # 開始爬取的頁面
def parse(self, response):
.....
# 通過Response對象可以直接訪問的屬性有
# {headers,status, request, meta,meta
# 即是屬性也是方法, url, body,以上可以直接獲取內容,
# 還有一些方法比如text(),css(),xpath()
.....
# item 就是處理好的數據 使用這個會傳到piplines 再次處理
item["link"] = str(response.url) # item存數據 取數據一樣
yield item
.....
# 下面這個是將請求再次入隊,交給nextparse 這個函數處理,
# nextparse這個函數的參數和parse一樣
yield scrapy.Request(str(link), callback=self.nextparse)
pass
items:這個文件是用來數據處理的模型(數據轉變成items的類型,然後交給處理函數)
class ScdemoItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# 公告發布的信息
luname = scrapy.Field()
# 詳細鏈接
link = scrapy.Field()
# 發佈時間
lutime = scrapy.Field()
# 主講人
man = scrapy.Field()
# 講座時間
time = scrapy.Field()
# 講座地點
place = scrapy.Field()
def process_item(self, item, spider):
# 參數裏面的item 就是在parse 裏面yield item的item
# 一定要返回
return item
最後要setting 中設置,這樣纔會把item生成的數據傳到pipeline:
ITEM_PIPELINES = {
'ScDemo.pipelines.ScdemoPipeline': 300,
# 前面是你項目路徑.piplines.你剛纔創建的pipelines類名:後面的數字代表優先級,越小優先級越高
}
setting.py 還有一些設置介紹:
ROBOTSTXT_OBEY :是否遵守協議,有些網址並不想讓別人爬取 , False:這種不推薦(非萬不得已),強行爬蟲容易封ip
報錯信息:
Error:
URLWarning: allowed_domains accepts only domains, not URLs.
爬蟲裏面的allowed_domains設置有問題,僅僅報錯,只需要設置域名範圍就好了
這是我接觸爬蟲的第一個框架(可能以前爬取的數據都不多,最多也就2W個份,while 10min跑完也沒感覺多大)
然後保存到數據庫,但是問題也來了,如何異步到存儲數據,請看下篇博客:https://blog.csdn.net/qq_40590018/article/details/103473216