Scrapy框架-scrapy框架快速入門
阿新 • • 發佈:2019-02-24
屬性 運行 erb als erro 系統 sse 令行 The
1.安裝和文檔
- 安裝:通過pip install scrapy即可安裝。
- Scrapy官方文檔:http://doc.scrapy.org/en/latest
- Scrapy中文文檔:http://scrapy-chs.readthedocs.io/zh_CN/latest/index.html
- 註意事項:
在ubuntu上安裝scrapy之前,需要先安裝以下依賴: sudo apt-get install python3-dev build-essential python3-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev,然後再通過pip install scrapy安裝。 如果在windows系統下,提示這個錯誤ModuleNotFoundError: No module named 'win32api',那麽使用以下命令可以解決:pip install pypiwin32。
2.快速入門
2.1 創建項目
要使用Scrapy框架創建項目,需要通過命令來創建。首先進入到你想把這個項目存放的目錄。
然後使用以下命令創建:scrapy startproject [項目名稱]
2.2 目錄結構介紹
# 創建一個項目步驟
# 2.1.1 在D盤創建一個文件夾`spiders_code`
# 2.1.2 打開cmd終端,cd到剛才創建的文件夾`spiders_code`
# 2.1.3 執行命令`D:\spiders_code> scrapy startproject qsbk`創建項目
以下介紹下主要文件的作用:
- items.py:用來存放爬蟲爬取下來數據的模型。
- middlewares.py:用來存放各種中間件的文件。
- pipelines.py:用來將items的模型存儲到本地磁盤中。
- settings.py:本爬蟲的一些配置信息(比如請求頭、多久發送一次請求、ip代理池等)。
- scrapy.cfg:項目的配置文件。
- spiders包:以後所有的爬蟲,都是存放到這個裏面
3.使用Scrapy框架爬取糗事百科段子
3.1 使用命令創建一個爬蟲
scrapy gensipder qsbk "qiushibaike.com"
創建了一個名字叫做qsbk的爬蟲,並且能爬取的網頁只會限制在qiushibaike.com這個域名下。
3.2爬蟲代碼解析
import scrapy
class QsbkSpider(scrapy.Spider):
name = 'qsbk'
allowed_domains = ['qiushibaike.com']
start_urls = ['http://qiushibaike.com/']
def parse(self, response):
pass
其實這些代碼我們完全可以自己手動去寫,而不用命令。只不過是不用命令,自己寫這些代碼比較麻煩。
要創建一個Spider,那麽必須自定義一個類,繼承自scrapy.Spider,然後在這個類中定義三個屬性和一個方法。
- name:這個爬蟲的名字,名字必須是唯一的。
- allow_domains:允許的域名。爬蟲只會爬取這個域名下的網頁,其他不是這個域名下的網頁會被自動忽略。
- start_urls:爬蟲從這個變量中的url開始。
- parse:引擎會把下載器下載回來的數據扔給爬蟲解析,爬蟲再把數據傳給這個parse方法。這個是個固定的寫法。這個方法的作用有兩個,第一個是提取想要的數據。第二個是生成下一個請求的url。
3.3 修改settings.py代碼
在做一個爬蟲之前,一定要記得修改setttings.py中的設置。兩個地方是強烈建議設置的。
- ROBOTSTXT_OBEY設置為False。默認是True。即遵守機器協議,那麽在爬蟲的時候,scrapy首先去找robots.txt文件,如果沒有找到。則直接停止爬取。
- DEFAULT_REQUEST_HEADERS添加User-Agent。這個也是告訴服務器,我這個請求是一個正常的請求,不是一個爬蟲。
3.4 完成的爬蟲代碼
# 3.4.1 爬蟲部分代碼
import scrapy
from abcspider.items import QsbkItem
class QsbkSpider(scrapy.Spider):
name = 'qsbk'
allowed_domains = ['qiushibaike.com']
start_urls = ['https://www.qiushibaike.com/text/']
def parse(self, response):
outerbox = response.xpath("//div[@id='content-left']/div")
items = []
for box in outerbox:
author = box.xpath(".//div[contains(@class,'author')]//h2/text()").extract_first().strip()
content = box.xpath(".//div[@class='content']/span/text()").extract_first().strip()
item = QsbkItem()
item["author"] = author
item["content"] = content
items.append(item)
return items
# 3.4.2 items.py部分代碼
import scrapy
class QsbkItem(scrapy.Item):
author = scrapy.Field()
content = scrapy.Field()
# 3.4.3 pipeline部分代碼
import json
class AbcspiderPipeline(object):
def __init__(self):
self.items = []
def process_item(self, item, spider):
self.items.append(dict(item))
print("="*40)
return item
def close_spider(self,spider):
with open('qsbk.json','w',encoding='utf-8') as fp:
json.dump(self.items,fp,ensure_ascii=False)
3.5 運行scrapy項目
運行scrapy項目。需要在終端,進入項目所在的路徑,然後scrapy crawl [爬蟲名字]即可運行指定的爬蟲。如果不想每次都在命令行中運行,那麽可以把這個命令寫在一個文件中。以後就在pycharm中執行運行這個文件就可以了。
比如現在新創建一個文件叫做start.py,然後在這個文件中填入以下代碼:
from scrapy import cmdline
cmdline.execute("scrapy crawl qsbk".split())
Scrapy框架-scrapy框架快速入門