Python3.X网络爬虫学习(四)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Apple_hzc/article/details/82462948

一、Scrapy

什么是Scrapy

Scrapy框架是一套比较成熟的Python爬虫框架,是使用Python开发的快速、高层次的信息爬取框架,可以高效率地爬取Web页面并提取出我们关注的结构化数据。

为什么学习Scrapy呢?因为它能让我们更好地完成爬虫任务,自己写Python爬虫程序好比孤军奋战,而使用了Scrapy就好比手下有了千军万马,可以起到事半功倍的效果。所以,学习Scrapy也就显得很有必要了。

Scrapy的安装

我事先下载过Anaconda这样一个包括了Conda、Python以及一大堆安装好的工具包,是一个开源的Python发行版本,并设置好系统环境变量后,直接通过cmd命令行,输入:conda install scrapy,再输入y和回车,即可安装好Scrapy。在命令行中输入scrapy+回车,显示相关信息,则表示scrapy安装成功。

然后在PyCharm-->file-->settings-->搜索project interpreter(项目解释器)-->选择安装Anaconda3目录下的python.exe,点击OK即可完成所有安装和配置。

最后在PyCharm中创建一个Scrapy项目,先通过命令行将路径转到即将创建项目的目录下,输入如下命令并按回车:

scrapy startproject 项目名

scrapy startproject是固定的命令,后面的项目名根据需要自取。

该命令执行完后,就会产生包含下列内容的目录:

 这些文件分别是:

  1. TestDemo/: 该项目的python模块,之后将在此加入Spider代码。
  2. TestDemo/spiders/: 放置spider代码的目录。
  3. TestDemo/items.py: 项目中的item文件。
  4. TestDemo/middlewares .py:项目中的中间件。
  5. TestDemo/pipelines.py: 项目中的pipelines文件。
  6. TestDemo/settings.py: 项目的设置文件。
  7. scrapy.cfg: 项目的配置文件。

二、元素选择器xpath的用法总结

xpath语法

在设计爬虫时,最重要的一步就是对网页元素进行分析。Scrapy的元素选择器Xpath(结合正则表达式)是众多网页元素获取工具中较为出色的一种(当然只能在Scrapy中使用),功能相对较全,使用较为方便,在此整理一些,以供日后回顾。

xpath是一种XML路径语言,通过该语言可以在XML文档中迅速地查找到相应的信息,xpath表达式通常叫作xpath selector。

在xpath表达式中,比如可以使用“/”可以选择某个标签,并且可以使用“/”进行多层标签的查找;使用“//”可以提取某个标签的所有信息;通过“//Z[@X="Y"]”的方式获取所有属性X的值为Y的<Z>标签的内容。

xpath的具体语法如下:

Shell命令

在正式编写程序之前,我们可以使用Scrapy内置的Scrapy shell,尝试分析相关网页,为后续编写梳理一下思路。

比如针对80s电影网进行shell操作:

在Scrapy shell中,我们可以通过如下指令打印网页的body信息:

response.body

输出了网页的全部源代码,比较杂,这里就不做展示了。

通过查看源代码,看出每一个影片超链接,都在一个div内,且a标签具有title属性,表示节目名。

于是通过以下命令行显示了所有电影名信息:

通过extract()显示更完整的信息:

也可以通过text()获取标签中的文本信息,如下所示:

电影网的首页简单分析到这里,下面看看某一种类型电影的子页面的分析,看是否能获取每一个电影的图片链接。

scrapy shell "https://www.80s.tw/movie/list/-----p/"

这里思考一个问题,从这个网页我们要获取哪些信息?第一个当然还是图片的链接,第二个呢?将每个页面的每个图片保存下来,我们如何命名图片?用默认名字下载下来的图片,顺序也就乱了。仔细一点的话,不难发现,第一页的链接为:https://www.80s.tw/movie/list/-----p/,第二页的链接为:https://www.80s.tw/movie/list/-----p/2,第三页的链接为:https://www.80s.tw/movie/list/-----p/3,依此类推,所以我们可以根据这个规律进行翻页。而为了翻页,首先需要获取的就是每个页面的图片数,随后,我们根据每页的地址就可以为每个图片命名,而且不会出现乱序,并且很工整,方便我们阅读。

每张图片的链接:

Scrapy程序测试

在TestDemo/spiders目录下的文件_init_.py中,编写内容如下:

import scrapy
class TestDemo(scrapy.Spider):
    name = "TestDemo"
    allowed_domains = "www.80s.tw"
    start_urls = ["https://www.80s.tw/movie/list/-----p/"]

    def parse(self, response):
        link_url = response.xpath("//img/@src").extract()
        for each_url in link_url:
            print(each_url)
  1. name:自己定义的内容,在运行工程的时候需要用到的标识。
  2. allowed_domains:让爬虫只在指定域名下进行爬取,值得注意的是,这个域名需要放到列表里。
  3. start_urls:开始爬取的url,同样这个url链接也需要放在列表里。
  4. def parse(self, response) :请求分析的回调函数。

下面通过如下命令行执行工程:

打印结果:

简单的测试就到此为止,以后就开始按步骤编写目标网站的爬虫代码。

猜你喜欢

转载自blog.csdn.net/Apple_hzc/article/details/82462948