麻烦先学会安装Scrapy不会请百度或留言
以爬取笔趣阁小说列表为例
- 创建一个scrapy项目
scrapy startproject test1
- 创建该项目下的一个spider爬虫
#注意你要进入项目目录才能创建爬虫
#scrapy genspider 爬虫名 爬虫爬取的网站域名
scrapy genspider testspider www.xbiquge.la
- 编辑spider爬虫代码
先要明白以下定义字段的含义
name:是每个项目唯一的名字区分不同的spider
allowed_domains:是允许爬取的域名,如果初始或后续的请求链接不是这个域名下的,则请求链接会被过滤掉
start_urls :包含了spider在启动时爬取的url列表,初始请求是由它来定义的
parse方法: 是spider的一个方法。默认情况下,被调用时start_urls里面的链接构成的请求完成下载执行后,返回的响应response就会作为唯一的参数传递给这个函数。该方法负责解析返回的响应,提取数据或者进一步生成要处理的请求
我们在parse()方法中对返回的response进行处理
rom test1.items import Test1Item
class TestspiderSpider(scrapy.Spider):
name = 'testspider'#创建时定义好了
allowed_domains = ['www.xbiquge.la']#创建时定义好了
start_urls = ['http://www.xbiquge.la/xiaoshuodaquan/']#需要修改地方
def parse(self, response):
item = Test1Item()
lists = response.xpath("//div[@class='novellist']//li")
#是在Item文件中定义的一个类,后续会讲
for i in lists:
item['name']=i.xpath(".//a//text()").extract()[0]
item['url']=i.xpath('.//a//@href').extract()[0]
yield item
#yield会将item字段传给pipeline文件稍后会将这个pipeline
#至于yield为何物,麻烦请好好学学python
- 使用item文件
在获取到数据的时候,使用不同item来存放不同的数据
class ExampeItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
name=scrapy.Field()
url=scrapy.Field()
#使用时要创建类的实例并且为字典类型(见上方的操作)
- pipelines文件 处理数据
我们先要在setting文件中启动对应的pipeline
ITEM_PIPELINES = {
'test1.pipelines.Test1Pipeline': 300,
}
其次在pipeline文件中对我们数据要做的具体操作:
class Test1Pipeline(object):
def open_spider(self,spider):
# 在爬虫开启的时候执行,仅执行一次
print("*"*10)
def process_item(self, item, spider):
# 不return的情况下,另一个权重较低的pipeline就不会获得item 这个会一直执行
print(item)
#return
def close_spider(self,spider):
#在爬虫关闭的时候执行,仅执行一次
print("*"*10)
#注意这里我们只输出我们访问到的所有数据,如果要存储到文件中请自行修改
- 启动爬虫
温馨建议:必要时可以修改setting文件的LOG_LEVEL=“WARNING” 这样启动爬虫不会跳出一大堆 默认为debug级别log信息 具体什么是log百度吧。也可以尝试一下看看修改后有什么不同
scrapy crawl testspider
以上我们一个简易Scrapy项目已经完成了,更多的细节以及操作今后慢慢细讲