可以不学scratch直接学python,scrapy难吗

  可以不学scratch直接学python,scrapy难吗

  这篇文章描述了如何编写一个scrapy爬虫。

  本文由梦橡皮擦分享自华为云社区《学python,怎么能不学习scrapy呢,这篇博客带你学会它》。

  在写爬虫案例之前,先对scrapy做一个系统的研究。

  Scrapy安装和简单操作使用命令pip install scrapy进行安装。成功后还需要收集几个网址,以备后续学习使用。

  Scrapy官网:https://scrapy.org;Scrapy文档:https://doc.scrapy.org/en/latest/intro/tutorial.html; Scrapy更新日志:https://docs.scrapy.org/en/latest/news.html.安装完成后,直接在控制台输入Scrapy,出现以下命令表示安装成功。

  scrapy

  Scrapy 2.5.0 -没有活动项目

  用法:

  scrapy命令[选项][参数]

  可用命令:

  上面的截图是scrapy的内置命令列表,标准格式的scrapy命令选项args,指定命令的帮助手册可以通过scrapy command -h H查看。

  Scrapy提供了两种类型的命令,一种是全局的,一种是项目中的,后者需要进入scrapy目录才能运行。

  这些命令不需要一开始就完全背下来,随时可以查。有几种常用的,比如:

  **scrpy startproject项目名称* *

  该命令首先根据项目名称创建一个文件夹,然后在该文件夹下创建一个scrpy项目。这一步是所有后续代码的起点。

  scrapy startproject my_scrapy

  新建scrapy项目 My _ Scrapy ,使用模板目录 e:\ Python Project \ Venv \ Lib \ Site-Packages \ Scrapy \ Templates \ Project ,Createdin: #新建了一个Scrapy项目,使用的模板是XXX,创建位置是XXX。

  E:\pythonProject\滚雪球Python Round 4 \my_scrapy

  你能以#打开你的第一个爬虫开始你的第一个蜘蛛吗

  My _ scratch #进入文件夹

  Scrapygen蜘蛛示例example.com #使用项目命令创建爬虫文件。以上内容补充一些评论,可以互相比较学习。默认情况下,生成的文件位于python运行时目录中。如果要修改项目目录,请使用以下格式命令:

  Scrapy start project我的项目[project _ dir]例如

  Scrapy Start Project我的项目D:/D1命令根据如下所示的模板创建项目结构,其中项目目录用红色加下划线,Scrapy项目用绿色加下划线。如果要运行项目命令,必须先进入红色下划线的my_scrapy文件夹,才能控制项目目录中的项目。

  下面的爬虫文件是使用命令scrapygen spider[-t template]name domain生成的,这是一个快捷方式,也可以手动创建。创建的crawler文件将出现在当前目录或项目文件夹的spiders文件夹中。name是crawler名称,domain用于crawler文件中的alowed _ domains和start_urls的数据。[-t template]表示可以选择生成文件模板。

  要查看所有模板,请使用以下命令。默认模板是基本模板。

  羊瘙痒病基因蛋白-1

  基础

  爬行

  csvfeed

  XML创建第一个scrapy爬虫文件,测试命令如下:

  斗志昂扬的imspm.com总理

  使用模块中的模板“基本”创建了蜘蛛“pm ”:

  My_project.spiders.pm此时,在spiders文件夹中,出现pm.py文件,其内容如下:

  进口废品

  PmSpider类(scrapy。蜘蛛):

  name=pm

  allowed_domains=[imspm.com]

  start_urls=[http://imspm.com/]

  定义解析(自身,响应):

  要测试pass scrapy crawler的操作,请使用命令scrapy crawl spider。蜘蛛是上面生成的爬虫的文件名,出现以下内容,表示爬虫加载正确。

  scrapy爬行pm

  2021-10-02 21:34:34[Scrapy . utils . log]信息:Scrapy 2.5.0启动(bot: my_project)

  [.]scrapy基本应用scrapy工作流程非常简单:

  收集第一网页源代码;分析第一页的源代码,获取下一页的链接;请求下一页的源代码;分析源代码,获取下一页源代码;[……]在这个过程中,目标数据被提取出来后,会被保存。接下来给大家展示一个scrapy的完整案例应用,作为爬虫中120个scrapy案例的第一个例子。

  scrapy start project my _ project crawler

  Cd爬行动物

  Scrapygen SpiderPM获得的项目结构如下:

  上图中一些文件的简要描述。

  Scrapy.cfg:配置文件路径和部署配置;Items.py:目标数据的结构;Middlewares.py:中间件文件;Pipelines.py:管道文件;设置. py:配置信息。使用scrapy crawl pm运行爬虫后,所有输出内容和说明如下:

  上面代码的请求数是7,因为www默认不添加在pm.py文件中。如果添加此内容,请求数将变为4。

  当前的pm.py文件代码如下:

  进口废品

  PmSpider类(scrapy。蜘蛛):

  name=pm

  allowed _ domains=[ www . imspm . com ]

  start _ URLs=[ http://www . imspm . com/]

  定义解析(自身,响应):

  Parse in print(response.text)表示请求start_urls中的地址,得到响应后的回调函数,直接通过。参数响应的文本属性。

  获得源代码后,在解析和存储源代码之前,需要手动定义一个数据结构。这个内容在items.py文件中实现,代码中的类名修改为MyProjectItem ArticleItem。

  进口废品

  类ArticleItem(scrapy。项目):

  #在此定义项目的字段,如下所示:

  # name=scrapy。字段()

  Title=scrapy。Field() #文章标题

  Url=scrapy。Field() #文章地址

  作者=scrapy。Field() #作者修改了pm.py文件中的parse函数,增加了网页解析相关的操作。这个操作类似于pyquery的知识点,直接观察代码就可以掌握。

  定义解析(自身,响应):

  #打印(response.text)

  list_item=response.css(。列表-项目-默认)

  #打印(列表项)

  对于list_item中的项目:

  Title=item.css(。title: text)。extract _ first () #直接获取文本

  Url=item.css(。a _ block: attr (href))。extract _ first () #获取属性值

  Author=item.css(。作者:正文)。extract _ first () #直接获取文本

  Print(title,url,author)其中response.css方法返回一个选择器列表。您可以迭代列表,然后对列表中的对象调用css方法。

  Item.css(。title:text’)来获取标记中的文本;Item.css(。a_block:attr(href))来获取标记属性值;Extract_first():解析列表中的第一项;Extract():获取列表。在pm.py中导入items.py中的ArticleItem类,然后根据下面的代码进行修改:

  定义解析(自身,响应):

  #打印(response.text)

  list_item=response.css(。列表-项目-默认)

  # print(list_item)

  对于列表项中的I:

  item=ArticleItem()

  Title=i.css(。title: text)。extract _ first () #直接获取文本

  Url=i.css(。a _ block: attr (href))。extract _ first () #获取属性值

  Author=i.css(。作者:正文)。extract _ first () #直接获取文本

  #打印(标题、url、作者)

  #为项目赋值

  项目[标题]=标题

  项目[url]=url

  项目[作者]=作者

  Yield item此时正在运行scrapy crawler,会出现以下消息。

  至此,一个单页爬虫完成。

  接下来,再次修改parse函数,以便它可以在解析第一页之后解析第二页上的数据。

  定义解析(自身,响应):

  #打印(response.text)

  list_item=response.css(。列表-项目-默认)

  #打印(列表项)

  对于列表项中的I:

  item=ArticleItem()

  Title=i.css(。title: text)。extract _ first () #直接获取文本

  Url=i.css(。a _ block: attr (href))。extract _ first () #获取属性值

  Author=i.css(。作者:正文)。extract _ first () #直接获取文本

  #打印(标题、url、作者)

  #为项目赋值

  项目[标题]=标题

  项目[url]=url

  项目[作者]=作者

  产量项目

  Next=response.css(。nava:n-last-child(2):attr(href))。extract _ first () #获取下一页链接

  #打印(下一页)

  #再次生成请求

  Yieldscratch.request (URL=next,callback=self.parse)在上面的代码中,变量next代表下一页的地址。通过response.css函数获取链接。请重点学习css选择器。

  YieldScrapy.request (URL=next,callback=self.parse)的意思是再次创建一个请求,这个请求的回调函数就是parse本身。代码的运行效果如下所示。

  如果您想保存运行结果,只需运行以下命令。

  scrapy crawl pm -o pm.json

  如果您希望将每段数据存储为单独的一行,可以使用下面的命令来抓取pm-o pm.jl。

  生成的文件还支持csv、xml、marchal和pickle,大家可以自己试试。

  使用以下数据管道打开pipelines.py文件,修改类名my project pipelinetitle pipeline,然后将其编程为以下代码:

  类别标题管道:

  Def process _ item (self,item,spider): #去掉标题中的空格

  如果项目[标题]:

  项目[标题]=项目[标题]。条状()

  退货项目

  否则:

  Return DropItem(异常数据)这个代码用来删除标题中的左右空格。

  写入后,需要在settings.py文件中打开ITEM_PIPELINES配置。

  ITEM_PIPELINES={

  my _ project . pipeline . title pipeline :300,

  }300是管道操作的优先级顺序,可以根据需要修改。再次运行爬虫代码,你会发现标题的左右空格都被去掉了。

  这个scrapy的基本爬虫已经写好了。

  第一时间点击了解华为云鲜技术~

  原创作品来自华为云开发者联盟,

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: