Scrapy爬蟲案例01——翻頁爬取

創建工程

  我是用的是pycharm開發,打開pycharm,然後在下面的“Terminal”中輸入命令“scrapy startproject freebuf”。這句話是在你的工作空間中創建一個叫“freebuf”的scrapy工程。如下圖:

上圖中,因爲我的工作空間中已經存在“freebuf”所以第一次創建失敗,這裏我創建的名字爲"freebuf2",創建成功。freebuf2的目錄及說明如下:

編寫爬蟲

freebuf2Spider.py

  選中“spiders”文件夾,右鍵“NEW”->"Python File",輸入文件名“freebuf2Spider”,添加代碼。如下圖所示。

複製代碼

#coding:utf-8
import scrapy
from freebuf2.items import Freebuf2Item
import time
from scrapy.crawler import CrawlerProcess

class freebuf2Spider(scrapy.Spider):
    name ='freebuf2'
    allowed_domains = []

    start_urls = ["http://www.freebuf.com/"]

    def parse(self, response):

        for link in response.xpath("//div[contains(@class, 'news_inner news-list')]/div/a/@href").extract():


            yield scrapy.Request(link, callback=self.parse_next)#這裏不好理解的朋友,先去看看yield的用法。我是按協程(就是中斷執行)理解的,感覺容易理解。



        next_url = response.xpath("//div[@class='news-more']/a/@href").extract()#找到下一個鏈接,也就是翻頁。



        if next_url:

            yield scrapy.Request(next_url[0],callback=self.parse)

    def parse_next(self,response):
        item = Freebuf2Item()
        item['title'] = response.xpath("//h2/text()").extract()
        item['url'] = response.url
        item['date'] = response.xpath("//div[@class='property']/span[@class='time']/text()").extract()
        item['tags'] = response.xpath("//span[@class='tags']/a/text()").extract()

        yield item

複製代碼


item.py

  itmes對象是種簡單的容器,你可以理解爲dict,保存了爬取到得數據。代碼如下:

 

複製代碼

import scrapy


class Freebuf2Item(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()

    date = scrapy.Field()
    url = scrapy.Field()
    tags = scrapy.Field()

複製代碼

 

學做優雅的爬蟲

  上面代碼已經完成了一個簡單的翻頁爬蟲,但是爲了做一個優雅的爬蟲。我們還需要對其設置訪問間隔時間,在settings.py中添加“DOWNLOAD_DELAY = 3”。意思是,每3秒請求一次。

 

好了,大功告成。在pycharm中的“Terminal”(cmd也可以哈),切換倒freebuf2工程目錄下(就是第一個freebuf2文件夾),輸入命令“scrapy crawl freebuf2 -o freebuf2.csv”。就可以運行了。如果想停止,直接輸入“shutdown”就可以了。最後看看數據吧。

 

數據:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章