scrapy startproject yourprojectname
建立scrapy專案
開始爬蟲
scrapy crawl spidername
開始執行爬蟲
以上仿麻煩
根目錄新建執行檔案
from scrapy.cmdline import execute
execute(['scrapy', 'crawl', 'dingdian'])
頂點為spider的name
定義爬取的字段
就比如說爬**
欄位有 **作者,**內容等
item檔案下定義
class
dingdianitem
(scrapy.item):
author = scrapy.field
() content = scrapy.field
()
如上,定義一定要繼承item
然後欄位皆為field(), 沒有其他型別
比django要方便的多
開始寫核心spider部分
spider以start_requests為初始函式,該函式必須yield乙個可迭代物件
比如request(url, call_back, meta)
引數說明url,即需要request.get 的內容,call_back是乙個parse函式,該函式可接受乙個由剛才的get獲取的response, meta是由上乙個request往這傳的時候可以帶上的引數
parse 最終要yield 或 return 乙個或多個 item,來進行後續處理
這裡有個巨大的response盡量一次處理,不要在多個parse之間執行,因為所有的url,但凡被request過,不會被二次請求,簡單來說,url通常不能為response.url,如果你跟我一樣踩到這個坑,注意這個解決方法
scrapy的官方文件:item被收集完成後,進入pipeline,request函式在文件中的定義:
在這兒, request的 dont_filter 設定為true就可以了
這裡就進行最後的處理了,可以將item的內容提取出來,進行資料庫等的儲存
模板:
class
dingdianpipeline
(object):
defprocess_item
(self, item, spider):
# defertothread(self._process_item, item, spider
if isinstance(item, dcontentitem):
url = item['chapterurl']
name_id = item['id_name']
num_id = item['num']
xs_chaptername = item['chaptername']
xs_content = item['chaptercontent']
sql.insert_novel(name, content, name_id, num_id, url)
print('**儲存完畢')
return item
def process_item(self, item, spider):該方法必須重寫,且return item此外,此函式通常功能即為去重後儲存
以上為此次學習內容,差點一下午完成,踩坑踩兩天
初窺AOP(學習筆記)
aop為 aspect oriend programming的縮寫,意思為面向切面程式設計,是通過預編譯方式和執行期動態 實現程式功能的統一維護的一種技術。aop是oop的延續,是軟體開發中的乙個熱點,也是spring框架中的乙個重要內容,是函式式程式設計的一種衍生范型。利用aop可以對業務邏輯的各...
深度學習 初窺門徑筆記
深度學習的最終目的是獲取乙個多層的複雜函式,這個函式可以對輸入的值做出相對正確的輸出。比如 輸入乙個小貓的,函式經過運算輸出 這是乙隻貓 輸入乙個小狗的,函式經過運算輸出 這是乙隻狗 但是,用單個簡單函式很難得到這樣的效果,那麼聰明的人類就想到了 人的大腦神經網路不是簡單構成複雜的例項嗎?人的大腦神...
初窺Shell 指令碼
1 shell是什麼 shell指令碼就是利用shell的命令解釋的功能,對乙個純文字的檔案進行解析,然後執行這些功能,也可以說shell指令碼就是一系列命令的合集。shell可以直接使用在win unix linux上面,並且可以呼叫大量系統內部的功能來解釋執行程式,如果熟練使用並掌握shell指...