scrapy是很实用的网络爬虫工具,然而由于之前没有对python进行系统的学习,bug很多,进程十分缓慢,将今天的学习过程写下来。
1.安装scrapy
可以直接在目录下pip install scrapy,然而这样有一定可能会报错,找不到关联的包。于是现在我们需要下载安装pywin32这个包,pip似乎无法直接安装这个包,推荐用下面这个地址直接安装
http://www.softpedia.com/get/Programming/Other-Programming-Files/PyWin32.shtml#download
注意 一定要看清python的版本和位数。
2.创建项目
scrapy非常强大,直接到需要放置project的目录,然后使用以下指令
scrapy startproject 项目名
就可以在这个目录下创建出自己的工程,创建后应该有如下几个文件:
其中 scrapy.cfg是项目的配置文件。
3.编写爬虫
这里我们试着爬取一下百度首页的数据
在spiders的文件夹里面创建文件baidu_spider.py 这个文件的代码如下:
import scrapy
from try1.items import DmozItem
class DmozSpider(scrapy.Spider):
name = "baidu"
allowed_domains = ["baidu.com"]
start_urls = [
"http;//baidu.com"
]
def parse(self, response):
filename = response.url.split("/")[-2]
with open(filename, 'wb') as f:
f.write(response.body)
name是爬虫的名字,非常重要,不能重复。
parse()是爬虫的方法,下载完成后,每个初始url下载完成后会返回一个response类型的对象,该方法对response对象进行解析与处理,提取数据以及生成下一步的Requese对象。
start_url是爬虫开始的url。
4.进行爬取:
进入项目的根目录以后,在命令行输入
scrapy crawl baidu(爬虫名)
就可以开始爬取了。crawl baidu 自动爬取baidu.com
得到类似如图输出。
5.在shell中尝试selector选择器
先使用
scrapy shell "http://baidu.com"
这条指令直接打开shell,然后可以使用respons的对象进行各种尝试,尝试如图
6.存储输出
若要存储输出内容,可以使用下面这句指令
scrapy crawl baidu -o words.json
存储为json文件