scrapy实践爬取app信息

 参考这里

这里也同样介绍了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爬取的时间间隔,避免被爬网站负载过高。

如何将爬取的信息存入数据库中

分布式爬虫???