scrapy基礎用法

本次爬蟲用來爬取http://www.xbiquge.la中的小說json

scrapy startproject biquge(項目名)    建立一個爬蟲項目併發

目錄結構:dom

  ./biquge/scrapy

  |____ scrapy.cfg  用以記錄當前項目的基礎設置,settings的位置,,調度,項目名等ide

  |____ biquge函數

    |____ __init__.py  必須有網站

    |____ items.py  寫存儲字段url

    |____ middlewares.py  spa

    |____ pipelines.py  管道文件.net

    |____ settings.py  爬蟲設置文件

    |____ spiders

      |____ __init__.py

Scrapy中啓用IP:https://blog.csdn.net/qq_34798152/article/details/79944682

./biquge/biquge/settings.py字段:

  BOT_NMAE:爬蟲名

  SPIDER_MOUDLES(NEWSPIDER_MOUDLE):爬蟲位置

  ROBOTSTXT_OBEY:是否遵循網站的robots.txt協議

  DOWNLOAD_DELAY:爬蟲延時

  CONCURRENT_REQUESTS:爬蟲併發量(默認爲16)

  CONCURRENT_REQUESTS_PER_DOMAIN:若是目標域名較少,會提供併發請求數目的進一步限制

  CONCURRENT_REQUESTS_PER_IP:若是設置了本屬性,CURRENT_REQUESTS_PER_DOMAIN會被忽略,這時的限制會是針對IP的。

  可把CONCURRENT_REQUESTS_PER_IP保持爲默認值(0),金庸對每一個IP的限制,再將CONCURRENT_REQUESTS+PER_DOMAIN設置爲一個很大的值(10000)。這樣設置實際上就僅用了這些限制,這樣下載器的併發請求數目就只有CONCURRENT_REQUESTS來控制。

  COOKIES_ENABLED:是否啓用Cookie

  TELNETCONSOLE_ENABLED:是否禁用Telent控制檯

  DEFAULT_REQUEST_HEADERS:默認請求標頭

  SPIDER_MIDDLEWARES:spider中間件設置

  DOWNLOADER_MIDDLEWARES:下載器中間件設置

  EXTENSIONS:擴展程序設置

  ITEM_PIPELINES:項目管道設置

  AUTOTHROTTLE_ENABLED:AutoThrottle擴展

  AUTOTHROTTLE_START_DELAY:初始下載延遲

  AUTOTHROTTLE_MAX_DELAY:高延遲狀況下設置的最大延遲

  更詳細字段:https://blog.csdn.net/u011781521/article/details/70188171

 

在./biquge/biquge/items.py中寫須要爬取的字段結構(這裏只演示獲取title與對應URL):

1 import scrapy
2 
3 class UrlItem(scrapy.Item):
4     title = scrapy.Field()
5     url = scrapy.Field()

 

./biquge目錄下,scrapy genspider Scrn "www.xbiquge.la"  建立一個名爲"Scrn"的爬蟲,指定爬取範圍爲www.xbiquge.la

  ./biquge/biquge/spiders

  |____ __init__.py

  |____ Scrn.py  寫爬蟲邏輯的主要文件

./biquge/biquge/spiders/Scrn.py中字段:

  

 1 import scrapy
 2 from biquge.items import UrlItem    #引入存儲字段結構的Item類
 3 
 4 class ScrnSpider(scrapy.Spider):
 5     name = 'Scrn'   #爬蟲名,再命令行用scrapy crawl 爬蟲名來執行爬蟲
 6     allowed_domains = ['http://www.xbiquge.la']     #爬蟲的活動域
 7     start_urls = ['http://www.xbiquge.la/10/10489/']    #爬蟲的起始網址,通常爲想要爬取的網頁地址
 8 
 9     def parse(self,response):   #默認的爬蟲解析函數
10                 for each in response.xpath("//div[@id='list']/dl/dd"):  #使用xpath解析獲取須要的字段
11             item = UrlItem()
12             item['title'] = each.xpath("./a/text()").extract_first()   #將解析的字段存入item 
13             item['url'] = each.xpath("./a/@href").extract_first()
14 
15             yield item  #將item拋出給管道文件處理(Pipelines.py),須要在settings文件中設置

 

在./biquge/biquge/pipelines.py中編寫處理item的邏輯:

 1 import json
 2 
 3 class UrlPipeline(object):
 4     def __init__(self):
 5         self.filename = open("Url.json","wb")   #在初始化函數中打開存儲數據的文件
 6     def process_item(self, item, spider):   #用於接收並處理item的方法
 7         jsontext = json.dumps(dict(item),ensure_ascii=False)+"\n"   #將傳入的item用字典加載,再轉爲json,ensure_ascii=False用於輸出中文
 8         self.filename.write(jsontext.encode("utf-8"))   #將轉爲json的字段寫入文件
 9         return item
10     def close_spider(self,spider):  #關閉爬蟲時執行
11         self.filename.close()   #關閉文件

在./biquge/biquge/settings.py中啓用管道文件:

1 ITEM_PIPELINES = {
2     'biquge.pipelines.UrlPipeline': 300,
3 }

 

整體來說:

  ./biquge/biquge/items.py文件中定義字段結構

  ./biquge/biquge/pipelines.py文件中編寫存儲邏輯

  ./biquge/biquge/spiders/Scrn.py文件中編寫爬取邏輯,並存儲到item中,再拋出(from biquge.items import UrlItem)

  ./biquge/biquge/settings.py文件中設置Scrn.py與pipelines.py文件的鏈接(item)

相關文章
相關標籤/搜索