《精通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())

发现又报错了…真欲哭无泪
上网查询可知是Win32和Win64的输入命令各有所不同,上面命令是win32的(也可能只是我自己电脑的原因),于是我找到了在win64下的命令:
import pip._internal;print(pip._internal.pep425tags.get_supported())
shell中输入:

发现我的.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

然后实现爬虫BooksSpider:

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

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

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

            #书价信息在<p class="price_color">的TEXT中
            #例如:<p class="price_color">$51.77</p>
            price = book.css('p.price_color::text').extract_first()
            yield {
                'name':name,
                'price':price,
            }
 
        #提取链接
        #下一页的url在ul.pager>li.text>a 里面
        #例如:<li class="next"><a href="catalogue/page-2.html">next</a><li>
        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文件中查看爬取到的数据

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值