scrapy框架

scrapy框架流程

创建项目

scrapy startproject Tencent    (Tencent项目名)

py文件类别

 

创建爬虫文件模板

到项目路径下  D:\scrapy\Tencent>scrapy genspider tancent tancent.com

运行   scrapy genspider tancent tancent.com   (tancent.com对应的域名)

启动项目在对应的文件夹下

第一种输入:scrapy crawl name        (name是项目的名字)

第二种启动:创建run.py

 在run中输入

from scrapy import cmdline

cmdline.execute('scrapy crawl baidu'.split())

流程图

 

 

Scrapy 选择器

选择器提供 2 个方法来提取标签
xpath() 基于 xpath 的语法规则
css() 基于 css 选择器的语法规则

快捷方式

response.xpath()
response.css()
它们返回的选择器列表

提取文本:

selector.extract() 返回文本列表
selector.extract_first() 返回第一个 selector 的文本,没有返回
None
selector.get()
selector.getall()

嵌套选择器

有时候我们获取标签需要多次调用选择方法( .xpath() .css()
response.css('img').xpath('@src')
Selector 还有一个 .re() 方法使用正则表达式提取数据的方法。
它返回字符串。
它一般使用在 xpath() css() 方法之后,用来过滤文本数据。
re_first() 用来返回第一个匹配的字符串。

日志器

日志文件配置
LOG_FILE 日志输出文件,如果为 None ,就打印在控制台
LOG_ENABLED 是否启用日志,默认 True
LOG_ENCODING 日志编码,默认 utf-8
LOG_LEVEL 日志等级,默认 debug
LOG_FORMAT 日志格式
%(levelno)s 打印日志级别的数值
%(levelname)s 打印日志级别名称
%(pathname)s 打印当前执行程序的路径,其实就是 sys.argv[0]
%(filename)s 打印当前执行程序名
%(funcName)s 打印日志的当前函数
%(lineno)d 打印日志的当前行号
%(asctime)s 打印日志的记录时间
%(thread)d 打印线程 ID
%(threadName)s 打印线程的名称
%(process)d 打印进程的 ID
%(message)s 打印日志的信息
LOG_DATEFORMAT 日志日期格式
LOG_STDOUT 日志标准输出,默认 False ,如果 True 所有标准输
出都将写入日志中
LOG_SHORT_NAMES 短日志名,默认为 False ,如果 True 将不输出
组件名
项目中一般设置:
LOG_FILE = 'logfile_name'
LOG_LEVEL = 'INFO'

次级页面提取

Scrapy.http.Request 类是 scrapy 框架中 request 的基类。它的参数如
下:    from scrapy . http import Request , FormRequest
Request
 def parse(self, response):
        # 在parse 中我们只需要关注怎么解析就行,因为response这个对象就有xpath属性
        node_list = response.xpath('//div[@class="info"]')
        if node_list:
            for i in node_list:
                # 标题
                movie_title = i.xpath('./div/a/span/text()').get()
                # 导演
                director = i.xpath('./div/p/text()').get().strip().replace(' ', ' ')
                # 分数
                score = i.xpath('.//span[@class="rating_num"]/text()').get()

                tong = {}
                tong['movie_title'] = movie_title
                tong['director'] = director
                tong['score'] = score

                # 电影详情页
                detail_url = i.xpath('./div/a/@href').get()
                yield scrapy.Request(detail_url, callback=self.get_detail, meta={"info":tong})
                # {"info":{"movie_title":"肖生克的救赎",'director':'导演的信息','score':'9.7'}}
            self.page+=1
            page_url = 'https://movie.douban.com/top250?start={}&filter='.format(self.page*25)
            yield scrapy.Request(page_url,callback=self.parse)
        else:
            return

    # 专门负责解析详情页的内容(次级页面解析函数)
    def get_detail(self, response):
        item = MySpiderItem()
        info = response.meta.get("info")
        item.update(info)
        desc = response.xpath('//span[@property="v:summary"]/text()').get().strip()
        item['desc'] = desc

        yield item
url (字符串) - 此请求的 URL
callback callable - 回调函数
method string - 此请求的 HTTP 方法。默认为 'GET'
meta dict - Request.meta 属性的初始值。
body str unicode - 请求体。如果没有传参,默认为空字符
串。
headers dict - 此请求的请求头。
cookies (dict / [dict])- 请求 cookie
encoding (字符串) - 此请求的编码(默认为 'utf-8' )此编码将用
于对 URL 进行编码并将 body 转换为 bytes (如果给定 unicode )。
priority int - 此请求的优先级(默认为 0 , 数字越大优先级越
高。
dont_filter boolean - 表示调度程序不应过滤此请求。
errback callable - 在处理请求时引发任何异常时将调用的函
数。
flags list - 发送给请求的标志,可用于日志记录或类似目的
cb_kwargs (dict) - 回调函数的参数值
---------------------------------------------------------------------------=
FormRequest
get 请求和 post 请求是最常见的请求。 scrapy 框架内置了一个
FormRequest
它扩展了基类 Request ,具有处理 HTML 表单的功能。
在使用 scrapy 发动 POST 请求的时候 , 常使用此方法 , 能较方便的发送请
. 具体的使用 ,
url (字符串) - 此响应的 URL
status (整数) - 响应的 HTTP 状态。默认为 200
headers dict - 此响应的响应头。 dict 值可以是字符串(对于单值
标头)或列表(对于多值标头)。
body (字节) - 响应主体。要将解码后的文本作为 str Python 2 中的
unicode )访问,您可以使用 response.text 来自编码感知的
Response 子类,例如 TextResponse
flags (列表) - 是包含 Response.flags 属性初始值的列表 。如果给
定,列表将被浅层复制。
request Requestobject - Response.request 属性的初始值。这表
Request 生成此响应的内容。
属性和方法
url 包含此请求的 URL 的字符串。该属性是只读的。更改请求使用的
URL replace()
method 表示请求中的 HTTP 方法的字符串。
headers 类似字典的对象,包含请求头。
body 包含请求正文的 str 。该属性是只读的。更改请求使用的 URL
replace()
meta 包含此请求的任意元数据的字典。
copy() 返回一个新的请求,该请求是此请求的副本。
replace [ URL method headers body cookies meta , encoding, dont_filter callback errback] ) 返回一个更新对的 request

分布式爬蟲

方法1(正常寫)

管道配置

(记得不管存在哪都要return item) 

 开启管道

配置settings

 方法2(red_key方法)

继承redis的类

 

存入kes启动爬虫 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值