参考这里
这里也同样介绍了items.py,pipelines.py,settings.py的作用,值得参考一下!!!
python版本:python3.6
安装scrapy,安装后位于:D:\Python36\Scripts\scrapy.exe
1)、首先创建一个startproject:
d:\Python36\Scripts\scrapy.exe startproject myscrapy
注意:
在spiders文件夹下新建一个python文件,命名随意,这个文件里面定义了爬虫的名称。此处我的文件名叫做:get_appstore_request.py,爬虫名称是:"yybspider"
代码如下:
# -*- coding:utf-8 -*-
#引入scrapy框架
import scrapy
#创建一个爬虫类
class Myapp_Spider(scrapy.Spider):
name = 'yybspider'#爬虫命名,每个爬虫的名字必须是唯一的
#首页
#创建一个请求函数
def start_requests(self):
urls = ['http://sj.qq.com/myapp/']
for url in urls:
yield scrapy.Request(url = url,callback=self.parse_category)
#应用分类
#创建一个请求函数(网址比上面深一层)同时可以接受和解析返回的数据
def parse_category(self,response):
#遍历网址,并获得返回的数据
for cg_url in response.xpath("//dl[@class='clearfix']/dd/a/@href"):#用@href获取指定超链接的url
cg_url = response.urljoin(cg_url.extract())#用urljoin()函数拼接出完整网址
yield scrapy.Request(url = cg_url,callback=self.parse_apps)#接收和解析返回的数据,并用yield迭代返回
#应用
#创建一个请求函数(网址比上面深一层)同时可以接受和解析返回的数据
def parse_apps(self,response):
#遍历网址,并获得返回的数据
for app in response.xpath("//ul[@class='app-list clearfix']/li/div/div/a[@class='name ofh']/@href"):#加条件[@class='name ofh']过滤掉无用数据
app = response.urljoin(app.extract())
yield scrapy.Request(url = app,callback=self.parse_app_message)
#应用信息
##创建一个请求函数(网址比上面深一层)同时可以接受和解析返回的数据
def parse_app_message(self,response):
iden = []#用来存储遍历出来的数据
#因为是两个相同类相同标签的不同数据,所以需要遍历一下
for identical in response.xpath("//div[@class='det-othinfo-data']/text()").extract():#这里用extract()提取有用数据
iden.append(identical)
#因为每个页面只展示一个应用的应用信息,所以不需要遍历
yield {
'Title': response.xpath("//div[@class='det-name-int']/text()").extract_first(),
'Amount of Downloads': response.xpath("//div[@class='det-ins-num']/text()").extract_first(),
'Score': response.xpath("//div[@class='com-blue-star-num']/text()").extract_first(),
'Version': iden[0],
'Developers': iden[1],
#'Version': response.xpath("//div[@class='det-othinfo-data']/text()").extract_first(),
#'Developers': response.xpath("//div[@class='det-othinfo-data']/text()").extract_first(),
'Information': response.xpath("//div[@class='det-app-data-info']/text()").extract_first()
}
在spiders文件夹下执行如下命令,用于启动爬虫:
d:\Python36\Scripts\scrapy.exe crawl yybspider -o file.csv
最后爬到的信息写入到了file.csv中,暂时scrapy示例算成功了。
或者新建一个文件:main.py
from scrapy.cmdline import execute
execute(['scrapy', 'crawl', 'yybspider'])
这样就可以在IDE内调试了。
以前写爬虫都是直接暴力的用requests和beautifulsoup4处理,用requests获取接口或链接的内容,然后使用beautifulsoup4解析html文件,现在感觉scrapy还不错!
需要继续学习的地方:
如何设置scrapy爬取的时间间隔,避免被爬网站负载过高。
如何将爬取的信息存入数据库中
分布式爬虫???