Scrapy爬蟲從入門到例項精講(上)

2021-08-15 01:13:54 字數 2400 閱讀 9249

最近幾天一直在學習scrapy這個框架,打算用幾篇文章來總結一下自己這段時間學習的知識。

首先我們需要簡單介紹一下scrapy是個什麼東西。先來看一張圖,是從官網上弄下來的。

scrapy是乙個框架,這個框架是用來爬取**資料的,並且該框架為我們提供了各種介面,包括爬蟲介面,管道介面,資料

儲存介面以及資料庫訪問介面等等。

上圖中綠色的箭頭表示資料的流向,從scheduler開始發起請求,返回資料後使用spider來抓取我們想要的資料,之後把

資料交給相應的資料庫,如果返回的資料中包含鏈結,則scheduler再次發起請求,直到所有請求傳送完畢。

那麼就先從乙個最簡單的例子開始,當然開始之前還是要進行相應的準備工作。

pip install scrapy
安裝好scrapy後,就可以進行資料爬取了。今天我們先用乙個單一的py檔案來爬取網路資料,明天我們再使用乙個工程去爬取。

這個程式是要爬取乙個**所有人員的發言,爬取後儲存為乙個.csv檔案並且儲存到本地。

# -*- coding:utf-8 -*-

import io

import sys

import scrapy

class jokespider(scrapy.spider):

"""docstring for julyeduspider"""

name = 'jokespider'

start_urls = ['']

def parse(self, response):

for joke in response.xpath('//div[@class="quote"]'):

print(joke.xpath('span[1]/text()').extract_first())

print(joke.xpath('span[2]/small/text()').extract_first())

# print(joke.xpath('a/p[@class="course-info-tip info-time"][1]/text()').extract_first())

yield

next_page = response.xpath('//li[@class="next"]/a/@href').extract_first()

if next_page is not none:

next_page = response.urljoin(next_page)

yield scrapy.request(next_page, callback = self.parse)

用這個例子來簡單說明一下scrapy是如何使用的。

**開始還是解決中文編碼的問題,之後定義了乙個類jokespider,當然這個名字可以自己起。在class裡有兩個變數,name和start_urls,這兩個名字是並不可少,乙個是給這個爬蟲乙個名字,另乙個告訴scrapy爬蟲的起始網頁位址,從哪個**開始爬取。

得到資料後,定義了解析資料的函式parse。這裡採用xpath的處理辦法,當然你也可以使用selenium webdriver或者beautifulsoup,或者其他你擅長的方法進行爬取。框架就是有這個好處,這些東西框架都已經整合好了,你用哪個都可以。

相應的資料得到後,就是返回資料了。這裡使用了yield這個關鍵字,用迭代的方法返回資料,減少記憶體的開銷。其實python中的yield關鍵字挺不好理解的,建議大家花點時間好好研究一下,有些公司在面試時就愛問這個東西。推薦大家看看廖雪峰的一篇文章,裡面介紹的很詳細。

這裡使用了框架提供的urljoin函式,通過

next_page = response.xpath('//li[@class="next"]/a/@href').extract_first()
得到的網頁「

上述**完成後就需要在命令列中執行scrapy,找到自己的該py檔案的路徑,然後執行下面的語句

我給該檔案起名為「scrapyspider2.py」,執行上面這個命令。runspider命令是執行乙個單一的py檔案,今後我們還會說到更多scrapy的命令。後面的-o是輸出的意思,意思是將scrapyspider.py的輸出結果儲存在該目錄下的乙個叫scrapyspider2.csv檔案,當然你也可以輸出xml或者json檔案等等,這些檔案格式scrapy都是支援的,主要取決於你後台資料庫的型別。

下面就是我執行之後結果的截圖,僅供參考

這是使用scrapy最簡單的一種情況,今後幾天還會更新有關scrapy更多的內容。

與您共勉!

scrapy 爬蟲框架從了解到執行

引擎從排程器中取出乙個url,用於接下來的抓取。爬蟲解析response。若解析出實體 item 則交給實體管道進行進一步的處理。若解析出的是url,則把url交給scheduler等待抓取。首先我們建立乙個scrapy專案,目錄結構如下所示。cnblog scrapy.cfg 專案的配置檔案 cn...

scrapy爬蟲例項 1

預先設定好items import scrapy class superspideritem scrapy.item title scrapy.field date scrapy.field content scrapy.field 爬取範圍和start url class spider1spide...

Python爬蟲從入門到框架

目錄001 第一篇 爬蟲基本原理 002 第二篇 請求庫之requests,selenium 003 第三篇 解析庫之re beautifulsoup pyquery 004001 第四篇 儲存庫簡單版之mongodb,redis,mysql 004002 第四篇 儲存庫詳細版之mongodb,re...