• 注册
当前位置:1313e > 默认分类 >正文

scrapy简单知识点分析

# -*- coding: utf-8 -*-
# spider类定义如何爬取某些网站
# 实际上是默认调用request方法
import scrapy
from quotetutorial.items import QuoteItemclass QuotesSpider(scrapy.Spider):name = 'quotes'# # name:必须存在,用来标识spiderallowed_domains = ['quotes.toscrape.com']# allowed_domains:可以不存在,包含允许爬取的域名列表,# 简单说就是每次生成request的时候去看url是否去匹配这个域名,匹配成功就允许爬取start_urls = ['http://quotes.toscrape.com/']# start_urls :当没有指定特定的url时候,spider将从这个列表中开始爬取# custom_settings :对框架中的内容进行覆盖,比如我想覆盖setting中的headers的内容\# ,那么只要将header的内容写入custom_settings中,然后改变headers的值即可,# 当程序再次运行时会覆盖以前setting的headers值,而运行你修改之后的内容# from_crawler: 通过构建from_crawler()方法的设置,来得到全局变量的设置.def parse(self, response):# parse方法生成request或者item,生成item就返回quotes = response.css('.quote')for quote in quotes:    # 操作类似于迭代查询item = QuoteItem()text = quote.css('.text::text').extract_first()# 使用extract()方法,得到里面的文本内容# 之前xpath中我们获取元素是通过.entry-header h1::text,# 如果是属性则用.entry-header a::attr(href)#  pass  # 自动调用pass方法对url进行解析author = quote.css('.author::text').extract_first()# 使用extract_first()得到第一个tags = quote.css('.tags::text').extract()# 区别在于标签是否有一个内容,如果不是一个则用extract()# extract()返回的是列表类型#extract_first()返回的是字符串类型# 可以用控制台命令进行shell操作:进入命令行模式进行操作item['text'] = text   #给item赋值,实例化item['author'] = authoritem['text'] = tagsyield itemnext = response.css('.paper .next a::attr(href)').extract_first()url = response.urljoin(next)yield scrapy.Request(url=url,callback=self.parse,dont_filter=True)# yield request生成下一个request# parse的作用自己回调自己#dont_filter防止自动过滤掉第二页# 数据的保存:“命令行模式:scrapy crawl quote -o quotes.json# scrapy crawl quote -o quotes.jl   保存成1行# scrapy crawl quote -o quotes.csv 保存为csv格式的数据# log(message[,level,component])
# 进行日志的输出

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录