《精通Scrapy网络爬虫》第一章

第一章 初识Scrapy

  • 网络爬虫
  • Scrapy安装
      • 1.安装Twisted
      • 2.安装LXML库
      • 3.安装Scrapy
      • 4.安装win32api
  • 第一个Scrapy爬虫

网络爬虫


网络爬虫是指在互联网上自动爬取网站内容信息的程序,也被称为网络蜘蛛或网络机器人。一个网络爬虫的基本执行流程为:
1.下载页面
2.提取页面中的数据
3.提取页面中的链接

如果我们想要获取的数据不只在一个页面中,而是分布在多个页面中,一个页面中可能包含一个或多个到其他页面的链接,提取完当前页面的数据,还要对页面中的链接进行爬取,则循环1-3步骤。

Scrapy安装


首先安装Scrapy,在DOS窗口中输入如下命令:

提示:Failed building wheel for Twisted

1.安装Twisted

安装wheel的安装包需要安装wheel的库,在命令提示符窗口中输入如下命令:

用命令在终端下安装不成功可以安装whl格式的包
.whl文件下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
.whl文件下载的版本要与你自己的Python版本相对应,因为当前Twisted版本最高只有3.7的,我下载的是3.8版本的Python(版本太高也不好),所以又是一阵折腾,将3.8的卸载掉,安装了3.7的,然后下载了与3.7版本对应的.whl文件,文件如下:(注意操作系统是32位还是64位)

然后先跳转到我们下载.whl的文件夹路径, 直接用pip install 安装文件名即可,例如我的在D:\Python

但是却发现有以下提示:

经查询,我发现出现问题的原因是pip命令下的文件名不支持,所以查看当前pip命令支持的文件名还有版本,在shell中输入import pip; print(pip.pep425tags.get_supported())
《精通Scrapy网络爬虫》第一章_第1张图片
发现又报错了…真欲哭无泪
上网查询可知是Win32和Win64的输入命令各有所不同,上面命令是win32的(也可能只是我自己电脑的原因),于是我找到了在win64下的命令:
import pip._internal;print(pip._internal.pep425tags.get_supported())
shell中输入:
《精通Scrapy网络爬虫》第一章_第2张图片
发现我的.whl文件名win_amd64部分是不被支持的,于是我将文件名换成了
Twisted-18.9.0-cp37-cp37m-win32.whl,然后安装成功。

2.安装LXML库

scrapy还依赖lxml库,安装lxml 在命令提示符窗口输入:

3.安装Scrapy

twisted库安装成功后,安装scrapy就简单了,在命令提示符窗口直接输入命令:

4.安装win32api

安装win32api:

shell中输入import scrapy,验证是否安装成功:

如上图所示,即为成功。

第一个Scrapy爬虫


爬取网站http://books.toscrapy.com
我用的IDE为PyCharm
首先创建一个项目,命名为TestDemo.实现爬虫的Python文件位于TestDemo/spiders目录下,在该目录下创建新文件book_spider.py
《精通Scrapy网络爬虫》第一章_第3张图片
然后实现爬虫BooksSpider:

import scrapy
class BooksSpider(scrapy.Spider):
    #每一个爬虫的唯一标识
    name = 'books'

    #定义爬虫爬取的起始点,起始点可以是多个,这里只有一个
    start_urls=['http://books.toscrape.com/']

    def parse(self,response):
        #提取数据
        #每一本书的信息在
中,我们使用 #css()方法找到所有这样的article元素,并依次迭代 for book in response.css('article.product_pod'): #书名信息在article>h3>a元素的title属性里 #例如:A Light in the... name = book.xpath('./h3/a/@title').extract_first() #书价信息在

的TEXT中 #例如:

$51.77

price = book.css('p.price_color::text').extract_first() yield { 'name':name, 'price':price, } #提取链接 #下一页的url在ul.pager>li.text>a 里面 #例如:
  • next_url = response.css('ul.pager li.next a::attr(href)').extract_first() if next_url: #如果找到下一页的URL,得到绝对路径,构造新的Request对象 next_url = response.urljoin(next_url)#next_url的绝对地址 yield scrapy.Request(next_url,callback=self.parse)
  • 在与settings.py为同一目录下创建一个main.py,然后添加如下代码(此代码为在命令提示符窗口输入的执行语句):

    from scrapy import cmdline
    
    cmdline.execute(['scrapy','crawl','books','-o','books.csv'])
    

    在PyCharm中点开Teminal,其作用相当于在此目录下打开命令提示符窗口,将目录改为spiders所在的文件夹下,我的为E:\ScrapyProjects\TestDemo\TestDemo>:然后执行语句
    scrapy crawl books -o books.csv

    属性 作用
    name 每个爬虫的name属性是其自身的唯一标识
    start_url 设置一个爬虫的其实爬取点
    parse(方法) 页面解析函数,默认为parse,用来提取页面中的数据及链接,并产生对链接页面的下载请求

    booksname属性的值,该值是每个爬虫的唯一标识
    爬虫运行结束后,可以在books.csv文件中查看爬取到的数据

    《精通Scrapy网络爬虫》第一章_第4张图片

    你可能感兴趣的:(Scrapy网络爬虫)