目錄python
什麼是Scrapy?併發
Linux:app
pip3 install scrapy
Windows:框架
注意: 按順序依次所有安裝 a. pip3 install wheel b. 下載twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted c. 進入下載目錄,執行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl d. pip3 install pywin32 e. pip3 install scrapy
項目結構:dom
project_name/ scrapy.cfg: project_name/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py scrapy.cfg 項目的主配置信息。(真正爬蟲相關的配置信息在settings.py文件中) items.py 設置數據存儲模板,用於結構化數據,如:Django的Model pipelines 數據持久化處理 settings.py 配置文件,如:遞歸的層數、併發數,延遲下載等 spiders 爬蟲目錄,如:建立文件,編寫爬蟲解析規則
cd project_name(進入項目目錄)異步
scrapy genspider 應用名稱 爬取網頁的起始url (例如:scrapy genspider qiubai www.qiushibaike.com)scrapy
在步驟2執行完畢後,會在項目的spiders中生成一個應用名的py爬蟲文件,文件源碼以下分佈式
# -*- coding: utf-8 -*- import scrapy class QiubaiSpider(scrapy.Spider): name = 'qiubai' #應用名稱 #容許爬取的域名(若是遇到非該域名的url則爬取不到數據) allowed_domains = ['https://www.qiushibaike.com/'] #起始爬取的url start_urls = ['https://www.qiushibaike.com/'] #訪問起始URL並獲取結果後的回調函數,該函數的response參數就是向起始的url發送請求後,獲取的響應對象.該函數返回值必須爲可迭代對象或者NUll def parse(self, response): print(response.text) #獲取字符串類型的響應內容 print(response.body)#獲取字節類型的相應內容
修改內容及其結果以下: 19行:USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' #假裝請求載體身份 22行:ROBOTSTXT_OBEY = False #能夠忽略或者不遵照robots協議
# -*- coding: utf-8 -*- import scrapy class QiubaiSpider(scrapy.Spider): name = 'qiubai' allowed_domains = ['https://www.qiushibaike.com/'] start_urls = ['https://www.qiushibaike.com/'] def parse(self, response): #xpath爲response中的方法,能夠將xpath表達式直接做用於該函數中 odiv = response.xpath('//div[@id="content-left"]/div') content_list = [] #用於存儲解析到的數據 for div in odiv: #xpath函數返回的爲列表,列表中存放的數據爲Selector類型的數據。咱們解析到的內容被封裝在了Selector對象中,須要調用extract()函數將解析的內容從Selecor中取出。 author = div.xpath('.//div[@class="author clearfix"]/a/h2/text()')[0].extract() content=div.xpath('.//div[@class="content"]/span/text()')[0].extract() #將解析到的內容封裝到字典中 dic={ '做者':author, '內容':content } #將數據存儲到content_list這個列表中 content_list.append(dic) return content_list
執行爬蟲程序:ide
scrapy crawl 爬蟲名稱 :該種執行形式會顯示執行的日誌信息 scrapy crawl 爬蟲名稱 --nolog:該種執行形式不會顯示執行的日誌信息