scrapy異步的爬蟲框架
異步的爬蟲框架
-
高性能的數據解析,持久化存儲,全棧數據的爬取,中間件,分布式
-
框架:就是一個集成好了各種功能且具有很強通用性的一個項目模板。
-
環境安裝:
Linux:
pip3 install scrapy
Windows:
1. pip3 install wheel
2. 下載twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
3. 進入下載目錄,執行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl
4. pip3 install pywin32
5. pip3 install scrapy
-
基本使用
-
新建一個工程:
前提需要將
Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl
這個文件放在項目目錄下# 在終端中執行下面這個命令 scrapy startporject + “項目名”
- settings.py:當前工程的配置文件
- spiders:爬蟲包,必須要存放一個或者多個爬蟲文件(.py)
-
進入項目
# 在終端中執行 cd + 項目名
-
創建一個爬蟲文件:
# 在終端中執行: scrapy genspider spiderName www.xxx.com # 命令解析: scrapy genspider 爬蟲文件名 url # 這個url是必寫的,不寫無法創建文件,可以隨意些,最后在文件中修改
-
執行工程:
# 在終端中執行下面的命令: scrapy crawl spiderName # 執行命令scrapy crawl 加爬蟲文件名
-
在
sttings
文件中需要配置的:settings.py: - 不遵從robots協議 如果選擇不遵循robots協議的就修改文件中的 ROBOTSTXT_OBEY = False # 將True改為False - UA偽裝 將UA偽裝的數據加載文件中 - 指定日志輸出的類型: 將 LOG_LEVEL = 'ERROR' 添加到配置文件中
-
爬蟲文件中:
# -*- coding: utf-8 -*- import scrapy class SecondSpidersSpider(scrapy.Spider): name = 'second_spiders' #允許的域名 allowed_domains = ['www.123.com'] #起始的url列表:列表元素只可以是url #作用:列表元素表示的url就會被進行請求發送 start_urls = ['http://duanziwang.com/category/%E7%BB%8F%E5%85%B8%E6%AE%B5%E5%AD%90/'] def parse(self, response): all_data = [] article_list = response.xpath('/html/body/section/div/div/main/article') for article in article_list: # xpath在進行數據提取時,返回的不再是字符串而是一個Selector對象,想要的數據被包含在了該對象的data參數中 title = article.xpath('./div[1]/h1/a/text()').extract_first() content = article.xpath('./div[2]//text()').extract() content = ''.join(content) dic = { 'title': title, 'content': content } all_data.append(dic) return all_data # 將解析到的數據進行了返回
-
數據解析:
- 1.response.xpath('xpath表達式')
- 2.scrapy中的xpath解析,在進行數據提取的時候,xpath方法返回的列表中存儲的不再是字符串,
而是存儲的Selector對象,相關的字符串數據是存儲在Selector對象的data參數中,我們必須使用
extract()/extract_first()進行字符串數據的提取 - extract():可以作用到列表中的每一個列表元素中,返回的依然是一個列表
- extract_first():只可以作用到列表中的第一個列表元素中,返回的是字符串
-
持久化存儲
- 基於終端指令的持久化存儲
- 只可以將parse方法的返回值存儲到指定后綴的文本文件中。
- scrapy crawl spiderName -o ./duanzi.csv
- 基於管道的持久化存儲
- 基於終端指令的持久化存儲