Python爬虫学习 Scrapy框架的初体验

(从上个星期天就打算学习scrapy,但是中间磨蹭了一两天,所以直到今天我才对着电子书动手写了第一个基于scrapy框架的程序)

一、Scrapy的安装问题

上个星期天我几乎花了一下午加上晚上才解决了scrapy的安装,主要的问题是在安装完scrapy模块后无法正常使用,出现了ImportError: DLL load failed: 操作系统无法运行 %1的报错,就算重装了anaconda并更换了python3.6也无济于事,最后在一个知乎文章上找了了解决方法,具体操作就是将Anaconda3\Library\bin目录中的libeay32.dll和ssleay32.dll放到“C:\WINDOWS\SYSTEM32"下面,替换原来的文件就解决了。

问题描述

  File "D:\Anaconda3\lib\site-packages\OpenSSL\__init__.py", line 8, in <module>
    from OpenSSL import crypto, SSL
  File "D:\Anaconda3\lib\site-packages\OpenSSL\crypto.py", line 16, in <module>
    from OpenSSL._util import (
  File "D:\Anaconda3\lib\site-packages\OpenSSL\_util.py", line 6, in <module>
    from cryptography.hazmat.bindings.openssl.binding import Binding
  File "D:\Anaconda3\lib\site-packages\cryptography\hazmat\bindings\openssl\binding.py", line 14, in <module>
    from cryptography.hazmat.bindings._openssl import ffi, lib
ImportError: DLL load failed: 找不到指定的程序%1

二、Scrapy使用实例

我对照着崔庆才《Python 3网络爬虫开发实战》中的一个例子进行了相应的模仿,爬取的网站是一个比较简单的静态网页http://quotes.toscrape.com/目的是提取网页中的名言和作者信息。

目标站点

Python爬虫学习 Scrapy框架的初体验_第1张图片
最后写出的代码如下

quotes.py(spiders文件)

import scrapy
from spider.items import SpiderItem


class QuotesSpider(scrapy.Spider):
    name = "quotes"
    allowed_domains = ["quotes.toscrape.com"]
    start_urls = ['http://quotes.toscrape.com/']

    def parse(self, response):
        texts = response.selector.re(r'(.*?)')
        authors = response.selector.re(r'by ')
        for i in range(len(texts)):
            item = SpiderItem()
            item['text'] = texts[i]
            item['author'] = authors[i]
            yield item
        #next这步我本来也用正则写的,但是发现正则写出来只能匹配两页的内容,遂改用书上css方法,有些难以理解
        next = response.css('ul.pager li.next a::attr(href)').extract_first()
        #下面两步不怎么理解,感觉如果每次都加上next,最后的url不会变成http://..../page2/page3/page4这样吗?
        url = response.urljoin(next)
        yield scrapy.Request(url=url, callback=self.parse)
		#而且这种方法好像也不能实现输出指定页数范围的内容

items.py

import scrapy

class SpiderItem(scrapy.Item):
    text = scrapy.Field()
    author = scrapy.Field()

写完这些代码后在命令行中输入scrapy crawl quotes -o quotes.json生成文件,其中第一个quotes是我设置的spider的名称,第二个quotes是导出的json文件名称。

三、使用心得

感觉这次scrapy的学习尽力并不顺利,不管是安装上还是对整体框架的理解上都遇到了一些困难,即便是实现最后的成果(无法调整输出的页数范围,只能10页全部输出)也不尽人意,仅仅在书上原题的基础上将提取名言和作者的方法改成了正则表达式,而且最后几行代码的递归也理解得差强人意。此外这次我只对两个文件进行了定制,其他的文件都没动。。。
总的来说感觉没有前面的requests和beautifulsoup学得轻松,不管怎么说也算是迈出了一步吧!

四、参考文献

[1]: https://zhuanlan.zhihu.com/p/32863888
scrapy在pycharm中运行不起来,提示: “ImportError: DLL load failed: 操 作系统无法运行 %1。” 知乎用户:大卫德2015
[2]:《 Python 3网络爬虫开发实战 》崔庆才著
[3]: https://www.bilibili.com/video/BV1w4411f7QX?p=23
B站视频:python网络爬虫入门与实战(新手强烈推荐)

你可能感兴趣的:(笔记)