Scrapy爬蟲入門
一、新建項目
【說明】:
- 關於Python、Scrapy等相關的安裝,在此不再贅述。
- 以Mac平台為例
- 此篇以百度首頁為例
- 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)。有兩種方法。
- 第一種 scrapy genspider [spidername] [domain]
scrapy genspider bd baidu.com
bd(不能寫成baidu,不然會提示和項目名稱baidu一樣,會出錯)就是爬蟲的名字。 http://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 http://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 = [http://baidu.com/] 但是百度的首頁是https://www.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出現以下錯誤怎麼辦?