scrapy框架簡介和基礎應用
阿新 • • 發佈:2019-01-14
一.什麼是Scrapy?
Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架,非常出名,非常強悍。所謂的框架就是一個已經被集成了各種功能(高效能非同步下載,佇列,分散式,解析,持久化等)的具有很強通用性的專案模板。對於框架的學習,重點是要學習其框架的特性、各個功能的用法即可。
二.安裝
Linux:
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
三.基礎使用
1.建立專案:scrapy startproject 專案名稱
專案結構:
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 爬蟲目錄,如:建立檔案,編寫爬蟲解析規則
2.建立爬蟲應用程式:
cd project_name(進入專案目錄)
scrapy genspider 應用名稱 爬取網頁的起始url (例如:scrapy genspider qiubai www.qiushibaike.com)
3.編寫爬蟲檔案:在步驟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)#獲取位元組型別的相應內容
4.設定修改settings.py配置檔案相關配置:
修改內容及其結果如下:
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協議
5.執行爬蟲程式:scrapy crawl 應用名稱
四.小試牛刀:將糗百首頁中段子的內容和標題進行爬取
# -*- 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
執行爬蟲程式:
scrapy crawl 爬蟲名稱 :該種執行形式會顯示執行的日誌資訊
scrapy crawl 爬蟲名稱 --nolog:該種執行形式不會顯示執行的日誌資訊