可以不学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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。