Scrapy爬蟲入門

一、新建項目

【說明】:

  1. 關於Python、Scrapy等相關的安裝,在此不再贅述。
  2. 以Mac平台為例
  3. 此篇以百度首頁為例

  4. Scrapy的相關內容會在後續篇章中持續更新

第一步: 打開mac終端,輸入 scrapy startproject [projectname]

scrapy startproject baidu

此時文件的結構

baidu # 這個文件夾就是【第一步中新建的baidu】 |____scrapy.cfg # 項目的配置文件 |____baidu # 項目的Python模塊 之後就在這裡【添加代碼】【注意兩個baidu】 | |____init__.py | |____pycache__ | |____items.py # 項目中的item文件 | |____middlewares.py | |____pipelines.py # 項目中的pipeline文件 | |____settings.py # 項目的設置文件 | |____spiders # 放置spider代碼的目錄 | | |______init__.py | | |______pycache__

第二步: cd [projectname]

cd baidu

從上面可以看到項目文件夾為baidu ,但是baidu 文件夾下還有一個 baidu 。此處 cd baidu 是進入到項目文件夾,也就是第一個baidu

第三步:新建一個爬蟲(Spider)。有兩種方法。

  1. 第一種 scrapy genspider [spidername] [domain]

scrapy genspider bd baidu.com

bd(不能寫成baidu,不然會提示和項目名稱baidu一樣,會出錯)就是爬蟲的名字。 baidu.com 就是允許爬蟲爬取的域名,指只要在這個域名下都可以爬取

執行這個命令之後,會在【spiders】文件夾下新增一個【bd.py】文件:

# -*- coding: utf-8 -*-import scrapyclass BdSpider(scrapy.Spider): name = "bd" allowed_domains = ["baidu.com"] start_urls = [http://baidu.com/] def parse(self, response): pass# 可以看到類名為 BdSpider # name = "bd"# allowed_domains = ["baidu.com"]# start_urls = [http://baidu.com]# 上面這四個都和 Scrapy genspider bd baidu.com 中的bd 和 baidu.com有關

至此,新建項目就完成了。總結一下就三個命令:

1.scrapy startproject baidu

2.cd baidu

3.scrapy genspider bd baidu.com

二、編寫爬蟲

第一步:修改bd.py

# -*- coding: utf-8 -*-import scrapyclass BdSpider(scrapy.Spider): name = "bd" allowed_domains = ["baidu.com"] start_urls = [http://baidu.com/] def parse(self, response): pass

可以看到start_urls = [baidu.com/] 但是百度的首頁是baidu.com. 可以改為後面的地址,但是這個不改也可以。

主要修改parse 函數:

# -*- coding: utf-8 -*-import scrapyclass BdSpider(scrapy.Spider): name = "bd" allowed_domains = ["baidu.com"] start_urls = [http://baidu.com/] def parse(self, response): print(response.css("title::text").extract())

response.css("title::text") 獲取百度首頁的<title>標籤里的文本

執行代碼:

scrapy crawl bd

結果如下:

DEBUG: Crawled (200) <GET http://baidu.com/robots.txt> (referer: None)DEBUG: Forbidden by robots.txt: <GET http://baidu.com/>

可以看出在請求設定的URL之前,先向伺服器請求了一個robots.txt。因為Scrapy默認是遵守robot協議,所以爬取不成功,需要將Scrapy設置成不遵循robot協議。

在settings.py 文件中找到

# Obey robots.txt rulesROBOTSTXT_OBEY = True

將True 改為 False。 然後再次運行

scrapy crawl bd

輸出結果為:

DEBUG: Crawled (200) http://baidu.com/> (referer: None)[百度一下,你就知道]

可以看出此次就不會先請求robot.txt文件,並且列印出了[百度一下,你就知道]的<title>文字。

三、總結

1.新建項目

scrapy startproject [name]

cd [name]

scrapy genspider [spidername] [allow_domain]

2.修改spider

後面會增加更多的代碼

3.修改settings.py

ROBOTSTXT_OBEY = True 改為 False

備註:

1.此篇教程只是介紹了Scrapy最基礎的部分 :爬取網頁。但不涉及瀏覽器的偽裝、數據存儲、圖片下載等。

2. 後續會繼續和大家分享相關知識

Scrapy爬蟲入門github源代碼


推薦閱讀:

【記錄】Scrapy模擬登錄cookie失效問題
基於Scrapy如何寫一個爬蟲抓取藝龍、攜程等網站的機票價格進行分析並做機票價格預測?
為什麼覺得Scrapy很難?
Python網頁信息採集:使用PhantomJS採集某貓寶商品內容
Python安裝Scrapy出現以下錯誤怎麼辦?

TAG:scrapy | 爬蟲 | 網頁爬蟲 |