欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Scrapy爬虫框架的安装和使用

程序员文章站 2022-05-07 15:20:39
...

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秒,随机的。