美文网首页
scrapy 框架

scrapy 框架

作者: 会会_3a05 | 来源:发表于2018-11-05 20:54 被阅读0次

    class RandomProxiesDownloadmidderware(object):

        def __init__(self, proxies):

            self.proxies= proxies

    @classmethod

        def from_crawler(cls, crawler):

            proxies= crawler.sittings['PROXIES']

            return cls(proxies)

        def process_request(self, spider, request):

            dict_proxy = random.choice(self.proxies)

    REQUEST

    url: 就是需要请求,并进行下一步处理的url

    callback: 指定该请求返回的Response,由那个函数来处理。

    method: 请求一般不需要指定,默认GET方法,可设置为"GET", "POST", "PUT"等,且保证字符串大写

    headers: 请求时,包含的头文件。一般不需要。内容一般如下:# 自己写过爬虫的肯定知道Host:media.readthedocs.orgUser-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0Accept: text/css,/;q=0.1Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateReferer:http://scrapy-chs.readthedocs.org/zh_CN/0.24/Cookie: _ga=GA1.2.1612165614.1415584110;Connection: keep-aliveIf-Modified-Since: Mon, 25 Aug 2014 21:59:35 GMTCache-Control: max-age=0

    meta: 比较常用,在不同的请求之间传递数据使用的。字典dict型

      request_with_cookies = Request(

          url="http://www.example.com",

          cookies={'currency': 'USD', 'country': 'UY'},

          meta={'dont_merge_cookies': True}

      )

    encoding: 使用默认的 'utf-8' 就行。

    dont_filter: 表明该请求不由调度器过滤。这是当你想使用多次执行相同的请求,忽略重复的过滤器。默认为False。

    errback: 指定错误处理函数

    RESPONSE

    status: 响应码

    _set_body(body): 响应体

    _set_url(url):响应url

    self.request= request (request对象)

    self.headers= Headers (响应头)

    scrapy框架

    Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

    Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

    Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

    Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),

    Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.

    Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。

    Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

    安装方式  sudo pip3 install scrapy

    新建项目

              scrapy startproject 爬虫项目名称

             进入项目,再次进入项目文件夹,在进入spdeers执行以下命令

                       scrapy genspider 爬虫文件名称 域名

          使用pycharm打开,配置 虚拟环境,配置需要的settings,在爬虫文件中爬取所需要的数据,以及起始的url,在items中定义字段

         yield 的作用就是把一个函数变成一个 generator(生成器),带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个      generator,带有yeild的函数遇到yeild的时候就返回一个迭代值,下次迭代时,代码从 yield 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。

    scrapy crawl 项目名称启动项目

    数据持久化,也就是将爬取到的数据存放到数据库中,一般有mysql mongod redis, 想要存放数据,首先要激活管道文件,在settings中items打开

    # 将数据存储在mongodb中

        def __init__(self,host,port,dbname,sheetname):

            # 创建MONGODB数据库链接

            client = pymongo.MongoClient(host=host, port=port)

            # 指定数据库

            mydb = client[dbname]

            # 存放数据的数据库表名

            self.mysheet = mydb[sheetname]

        @classmethod

        def from_crawler(cls, crawler):

            host = crawler.settings["MONGODB_HOST"]

            port = crawler.settings["MONGODB_PORT"]

            dbname = crawler.settings["MONGODB_DBNAME"]

            sheetname = crawler.settings["MONGODB_SHEETNAME"]

            return cls(host,port,dbname,sheetname)

        def process_item(self,item,spider):

            data = dict(item)

            # mongodb数据插入语句,使用save保存数据的效率会很慢,因为它需要循环便利,操作费时

            self.mysheet.insert(data)

            return item

    通用爬虫

    scrapy genspider -t crawl 爬虫文件 域名

    rules

    CrawlSpider使用rules属性来决定爬虫的爬取规则,并将匹配后的url请求提交给引擎,完成后续的爬取工作。

    link_extractor:是一个Link Extractor对象,用于定义需要提取的链接。

    callback: 从link_extractor中每获取到链接得到Responses时,会调用参数所指定的值作为回调函数,该回调函数接收一个response作为其一个参数。

    follow:是一个布尔(boolean)值,指定了根据该规则从response提取的链接是否需要跟进。如果callback为None,follow 默认设置为True ,否则默认为False。

    process_links:指定spider中哪个的函数将会被调用,从link_extractor中获取到链接列表时将会调用该函数。该方法主要用来过滤。

    process_request:指定处理函数,根据该Rule提取到的每个Request时,该函数将会被调用,可以对Request进行处理,该函数必须返回Request或者None

    主要参数:

    allow:满足括号中“正则表达式”的URL会被提取,如果为空,则全部匹配。

    deny:满足括号中“正则表达式”的URL一定不提取(优先级高于allow)。

    allow_domains:会提取的链接的domains。

    deny_domains:一定不会被提取链接的domains。

    restrict_xpaths:使用xpath表达式,和allow共同作用过滤链接。

    第一步:根据要爬取的网页确定需要保存的字段

    第二步:编写爬虫类

    LinkExtractor实例对象

    LinkExtractor方法中的常用的参数

    allow : LinkExtractor对象最重要的参数之一,这是一个正则表达式,必须要匹配这个正则表达式(或正则表达式列表)的URL才会被提取,如果没有给出(或为空), 它会匹配所有的链接。

    deny : 用法同allow,只不过与这个正则表达式匹配的URL不会被提取)。它的优先级高于 - allow 的参数,如果没有给出(或None), 将不排除任何链接。

    allow_domains:包含了spider允许爬取的域名(domain)列表(list)

    deny_domains=():包含了spider不允许爬取的域名(domain)列表(list)

    通用爬虫的起始url不会获得响应,如果需要,需要重现def parse_start_url(self, response):方法

    相关文章

      网友评论

          本文标题:scrapy 框架

          本文链接:https://www.haomeiwen.com/subject/kkifxqtx.html