zoukankan      html  css  js  c++  java
  • Scrapy爬虫框架的安装和使用

    Scrapy是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖的库有Twisted 14.0、lxml 3.4和pyOpenSSL 0.14。在不同的平台环境下,它所依赖的库也各不相同,所以在安装之前,最好确保把一些基本库安装好。
    官方网站:https://scrapy.org
    官方文档:https://docs.scrapy.org
    PyPI:https://pypi.python.org/pypi/Scrapy
    GitHub:https://github.com/scrapy/scrapy
    中文文档:http://scrapy-chs.readthedocs.io

    一、安装Scrapy

    如果你的Python是使用Anaconda安装的

    conda install Scrapy

    Windows下的安装
    下载安装pyOpenSSL https://pypi.python.org/pypi/pyOpenSSL#downloads
    下载安装Twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
    下载安装PyWin32 https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/
    pip3 install Scrapy

    CentOS和Red Hat

    sudo yum groupinstall -y development tools
    sudo yum install -y epel-release libxslt-devel libxml2-devel openssl-devel
    pip3 install Scrapy

    Ubuntu、Debian和Deepin

    sudo apt-get install build-essential python3-dev libssl-dev libffi-dev libxml2 libxml2-dev libxslt1-dev zlib1g-dev
    pip3 install Scrapy
    

     二、scrapy 的使用

    1、’创建项目
    下面的命令可以创建一个Scrapy爬虫项目,它为我们规定了标准的项目格式。

    scrapy startproject myproject [project_dir] #可以直接添加路径,也可以去你的工作目录省略路径选项

    创建后用ide工具打开,项目结构:spiders模块中放置所有爬虫,scrapy.cfg是项目的全局配置文件,其余文件是Scrapy的组件。

    2、创建爬虫
    使用下面的命令可以创建一个爬虫,爬虫会放置在spider模块中。

    scrapy genspider mydomain mydomain.com #需要进入项目目录,后面是爬虫名字和起始页面

    下面代码是生成的爬虫具有基本的结构,我们也可以自己在此基础上编写代码。

    # -*- coding: utf-8 -*-
    import scrapy
    
    class MydomainSpider(scrapy.Spider):
        name = "mydomain"
        allowed_domains = ["mydomain.com"]
        start_urls = ['http://mydomain.com/'] 
    
        def parse(self, response):
            pass
    

    爬虫起启动后会将start_urls中的网址交给一个start-requests的函数执行,然后返回一个response给parse函数,接下来就是自己写了。

    如果起始页面是有多个,可以直接写到start_urls中,还可以重写start-requests函数,自己将网址写好后requests提交一个response交给parse,比如很多的网站的多个栏目页面的网址是固定的,就可以少请求一次,少分析一次网页。

     3、IDE默认没有scrapy项目,为了方便调试,我们需要新建一个脚本来执行scrapy项目,在项目的目录下新建一个xxx.py的文件,一般我们取名main,或者run,里面写上下面代码,我们的项目就可以在Ide调试了。

    from scrapy.cmdline import execute
    execute(['scrapy', 'crawl', 'mydomain']) #mydomain是爬虫的名字

     4、防反爬虫,你懂得。不管网站有没有反爬,这一步最好都做,特别是需要长期爬的网站,也是对网站基本的尊重。这里主要是user-agent,和代理ip和cookie。

    user-agent:可以自己写一个列表循环随机取,也可以安装一个包pip3 install fake-useragent,middlewares.py添加

    from fake_useragent import UserAgent #这是一个随机UserAgent的包,里面有很多UserAgent
    class RandomUserAgentMiddleware(object):
        def process_request(self, request, spider):
            ua = UserAgent()
            request.headers.setdefault('User-Agent', ua.random) #这样就是实现了User-Agent的随即变换

    settings.py的DOWNLOADER_MIDDLEWARES添加两条

    DOWNLOADER_MIDDLEWARES = {
       'lianjia.middlewares.RandomUserAgentMiddleware': 543,
       'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware':None, #这里要设置原来的scrapy的useragent为None,否者会被覆盖掉
    }
    

    代理ip,很重要,可以用免费的,可以买,也可以自建,middlewares.py添加

    class RandomProxyMiddleware(object):
        '''动态设置ip代理'''
        def process_request(self,request,spider):
            get_ip = ip #ip为你的代理ip
            request.meta["proxy"] = "http://" + get_ip + ':端口' #你的代理方式,ip地址和端口

    settings.py的DOWNLOADER_MIDDLEWARES添加一条

    DOWNLOADER_MIDDLEWARES = {
       'lianjia.middlewares.RandomProxyMiddleware': 542, #代理ip
    }

    cookie:如果需要使用的,请使用cookie池,如果不需要就关了,settings.py里面

    COOKIES_ENABLED = False
    

    还有一点就是爬取过程中的sleep时间最好不要是固定的,比如0-5秒,随机的。

  • 相关阅读:
    phpcms 短信替换
    phpcms 搭建宣传网站首页
    JDK 8
    MySQL 5.6 date 与 string 的转换和比较
    Illustration of Git branching and merge
    Anti-pattern(反模式)
    Design Patterns笔记
    MyBatis小抄
    MyBatis MapperScannerConfigurer
    MyBatis 批量插入数据对插入记录数的限制
  • 原文地址:https://www.cnblogs.com/xuyingzhong/p/9345612.html
Copyright © 2011-2022 走看看