美文网首页
crawl spider /spider

crawl spider /spider

作者: 仙灵儿 | 来源:发表于2018-08-03 21:09 被阅读21次

    一:Scrap Shell

    运行在终端的工具,用来调试scrapy。可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式。

    简单使用—糗事百科

    scrapy shell  “http://www.baidu.com/

    scrapy shell -s USER_AGENT='Mozilla/5.0'

    fetch(‘url’)

    A-response对象

    属性

    text:字符串格式的html

    body:二进制格式的html

    url:所请求的url

    status:响应的状态码

    方法:

    xpath(): 根据xpath路径获取符合的路径所有selector对象

    (是scrapy内部封装的一个类的对象)的列表

                  例:获取糗事百科用户名

        response.xpath('//div[@class="author clearfix"]//img/@alt')

    css():获取符合要求的所有selector对象的列表

    获取内容

    name_list=response.css('#content-left a > h2::text')

    获取属性 

    css_list=response.css('#content-left a > img::attr(src)')

    接着extract()即可一般不使用,

    因为中间scrapy会将这个选择器给翻译成xpath再去解析

    selector对象

    xpath('./'): 从当前节点向下开始查找 

    css(): 和上面的response的方式一样

    extract(): 将对象转化为unicode字符串

    extract_first(): 如果xpath没有获取到内容,

    extract_first()会返回None,extract()会报错

    B-item对象

    类字典对象,用法和字典一模一样

    将这个对象转化为字典  stu = dict(stu)

    二: yield item和请求

    yield 示例-1

    2-校花网  http://www.xiaohuar.com/hua/ 

    【温馨提示】写好pipeline的时候,需要在settings文件中打开一个配置

    ITEM_PIPELINES = {

      'huaproject.pipelines.HuaprojectPipeline': 300,

        }

    第一个:处理的管道

    第二个:优先级,越小优先级越高(1-1000)

    *****************************************************************

       实现单个页面图片下载

    多页面抓取

    url规律

    第一页 list-1-0.html

    第二页 list-1-1.html

    第n页 list-1-(n-1).html

    三:请求传参(高级请求)

    假如一个页面不能将一个item的所有信息全部拿到,

    需要再次发送一次请求,再次解析才能将item的所有信息拿到。

    电影天堂  http://www.dytt8.net/

    一:crawl spider 

    CrawlSpider是一个类,父类是scrapy.Spider。

    CrawlSpider不仅有Spider的功能,还有自己独特功能

    特有功能:CrawlSpider可以定义规则,解析html时可根据链接规则

    提取出指定链接,然后再向这些链接发送请求。

    通常用于:如果有需要跟进链接的需求,爬取网页之后,需要提取链接再次爬取。

      如何提取链接?

    链接提取器,在这里就可以写规则提取指定链接

    scrapy.linkextractors.LinkExtractor(

        allow = (),    # 正则表达式  提取符合正则的链接

        deny = (),     # (不用)正则表达式  不提取符合正则的链接

      allow_domains = (),  # (不用)允许的域名

        deny_domains = (),   # (不用)不允许的域名

        restrict_xpaths = (), # xpath,提取符合xpath规则的链接

        retrict_css = ()  # 提取符合选择器规则的链接)

    【案例】:电影天堂-提取所有页码链接

    scrapy shell http://www.dytt8.net/html/gndy/dyzz/index.html

    from scrapy.linkextractors import LinkExtractor

    正则用法

    links1 = LinkExtractor(allow='list_23_\d+\.html')

    links1.extract_links(response) 查看提取到的所有链接

    ------------------------------------------------------------------------

        xpath用法

    links2 = LinkExtractor(restrict_xpaths='//div[@class="x"]')

    【注意】这里的xpath不带a

    css用法

    links3 = LinkExtractor(restrict_css='.x') 【注意】这里的选择器不带a

         【案例】:读书网-散文随笔

    https://www.dushu.com/book/1163.html 

    scrapy startproject readbook1

    scrapy genspider -t crawl readbook www.dushu.com

         crawlspider运行原理:

    【实操-spiders注意说明】

    rules = (Rule(LinkExtractor(allow=r'/book/1163_\d+\.html')

    , callback='parse_item', follow=False),)

       【注1】callback只能写函数名字符串, callback='parse_item'

       【注2】在基本的spider中,如果重新发送请求,那里的callback写的是   callback=self.parse_item

    *********************************************************************

    二:日志信息和日志等级

    级别:

    CRITICAL:严重错误

    ERROR:一般错误

    WARNING:警告

    INFO: 一般信息

    DEBUG:调试信息

    默认的级别为DEBUG,会显示上面所有的信息

    在配置文件中  settings.py设置

    LOG_LEVEL : 设置日志显示等级,此举动决定了显示哪些,不显示哪些

    LOG_FILE  : 将屏幕显示的信息记录到文件中,屏幕不再显示

    三:Request和response总结

    Request(类)

    get请求

    scrapy.Request(url=url,callback=self.parse_item,meta={'item':item}, headers=headers)

    url: 要请求的地址

    callback:响应成功之后的回调函数

    meta: 参数传递

    headers: 定制头信息,一般不用

    response(对象)

    response.text: 字符串格式文本

    response.body: 二进制格式文本

    response.url: 当前响应的url地址

    response.status: 状态码

    response.xpath(): 筛选想要的数据

    response.css(): 筛选想要的数据

    post请求

    【温馨提示】

    如果直接发送post请求,start_urls和parse方法就用不到

    因为重写了start_requests(self)这个方法,

    【案例】:百度翻译

    scrapy.FormRequest(url=url, headers=headers, callback=self.parse_item

    , formdata=data)

    url: 要发送的post地址

    headers:定制头信息

    callback: 回调函数

    formdata: post所携带的数据【字典】

    四:代理

    通过下载中间件来进行添加

    (1)到settings.py中,打开一个选项

    DOWNLOADER_MIDDLEWARES配置选项

    (2)到middlewares.py中找到以下方法写代码

    def process_request(self, request, spider):

         request.meta['proxy'] = 'https://113.68.202.99:8888'

           return None

       ------------------------------------------------------------------------

    五:scrapy实现模拟登录

    【案例】豆瓣-douban

    https://accounts.douban.com/login 

    【温馨提示】

    Douban基于安全考虑-比较靠谱的网站,登录时需携带Cookie。

    所以需要首先向登录地址发送get请求,然后再向post地址发送post请求,因为中间要携带cookie,才能登录成功

    请求模式【get==>post==>get】

    六:存储到mysql中

       【案例】-读书项目

    from scrapy.utils.project import get_project_settings

    settings = get_project_settings()

    *********************************************************************

    相关文章

      网友评论

          本文标题:crawl spider /spider

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