大佬教程收集整理的这篇文章主要介绍了学python,怎么能不学习scrapy呢,这篇博客带你学会它,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在正式编写爬虫案例前c;先对 scrapy
进行一下系统的学习。
使用命令 pip install scrapy
进行安装c;成功之后c;还需要随手收藏几个网址c;以便于后续学习使用。
安装完毕之后c;在控制台直接输入 scrapy
c;出现如下命令表示安装成功。
@H_944_29@> scrapy
Scrapy 2.5.0 - no active project
Usage:
scrapy @H_944_29@<command@H_944_29@> [options] [args]
Available commands:
scrapy
的内置命令列表c;标准的格式的 scrapy <command> <options> <args>
c;通过 scrapy <command> -h
可以查看指定命令的帮助手册。
scrapy
中提供两种类型的命令c;一种是全局的c;一种的项目中的c;后者需要进入到 scrapy
目录才可运行。
这些命令无需一开始就完全记住c;随时可查c;有几个比较常用c;例如:
该命令先依据 项目名 创建一个文件夹c;然后再文件夹下创建于个 scrpy
项目c;这一步是后续所有代码的起点。
@H_944_29@> scrapy startproject my_scrapy
@H_944_29@> New Scrapy project 'my_scrapy', using template directory 'e:pythonprojectvenvlibsite-packagesscrapytemplatesproject', created in: # 一个新的 scrapy 项目被创建了c;使用的模板是 XXXc;创建的位置是 XXX
E:pythonProject滚雪球学Python第4轮@H_75_30@my_scrapy
You can start your first spider with: # 开启你的第一个爬虫程序
cd my_scrapy # 进入文件夹
scrapy genspider example example.com # 使用项目命令创建爬虫文件
上述内容增加了一些注释c;可以比对着进行学习c;默认生成的文件在 python 运行时目录c;如果想修改项目目录c;请使用如下格式命令:
scrapy startproject myproject [project_dir]
例如
scrapy startproject myproject d:/d1
命令依据模板创建出来的项目结构如下所示c;其中红色下划线的是项目目录c;而绿色下划线才是 scrapy
项目c;如果想要运行项目命令c;则必须先进入红色下划线 @H_868_6@my_scrapy 文件夹c;在项目目录中才能控制项目。
scrapy genspider [-t template] <name> <domain>
生成爬虫文件c;该方式是一种快捷操作c;也可以完全手动创建。创建的爬虫文件会出现在 当前目录或者项目文件夹中的 spiders
文件夹中c;name
是爬虫名字c;domain
用在爬虫文件中的 alowed_domains
和 start_urls
数据中c;[-t template]
表示可以选择生成文件模板。
查看所有模板使用如下命令c;默认模板是 basic
。
@H_944_29@> scrapy genspider -l
basic
crawl
csvfeed
xmlfeed
创建第一个 scrapy
爬虫文件c;测试命令如下:
@H_944_29@>scrapy genspider pm imspm.com
Created spider 'pm' using template 'basic' in module:
my_project.spiders.pm
此时在 spiders
文件夹中c;出现 pm.py
文件c;该文件内容如下所示:
import scrapy
class PmSpider(scrapy.Spider):
name @H_944_29@= 'pm'
allowed_domains @H_944_29@= ['imspm.com']
start_urls @H_944_29@= ['http://imspm.com/']
def parse(self, response):
pass
测试 scrapy 爬虫运行 使用命令 scrapy crawl <spider>
c;spider
是上文生成的爬虫文件名c;出现如下内容c;表示爬虫正确加载。
@H_944_29@>scrapy crawl pm
2021-10-02 21:34:34 [scrapy.utils.log] INFO: Scrapy 2.5.0 started (bot: my_project)
[...]
scrapy
工作流程非常简单:
接下来为大家演示 scrapy
一个完整的案例应用c;作为 爬虫 120 例 scrapy 部分的第一例。
@H_944_29@> scrapy startproject my_project 爬虫
@H_944_29@> cd 爬虫
@H_944_29@> scrapy genspider pm imspm.com
获得项目结构如下:
scrapy.cfg
:配置文件路径与部署配置;items.py
:目标数据的结构;pipelines.py
:管道文件;setTings.py
:配置信息。使用 scrapy crawl pm
运行爬虫之后c;所有输出内容与说明如下所示:
pm.py
文件中默认没有添加 www
c;如果增加该内容之后c;请求次数变为 4。
pm.py
文件代码如下所示:
import scrapy
class PmSpider(scrapy.Spider):
name @H_944_29@= 'pm'
allowed_domains @H_944_29@= ['www.imspm.com']
start_urls @H_944_29@= ['http://www.imspm.com/']
def parse(self, response):
print(response.text)
其中的 parse
表示请求 start_urls
中的地址c;获取响应之后的回调函数c;直接通过参数 response
的 .text
属性进行网页源码的输出。
items.py
文件实现c;对代码中的类名进行了修改c;@H_868_6@myProjectItem → ArticleItem
。
import scrapy
class ArticleItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title @H_944_29@= scrapy.Field() # 文章标题
url @H_944_29@= scrapy.Field() # 文章地址
author @H_944_29@= scrapy.Field() # 作者
修改 pm.py
文件中的 parse
函数c;增加网页解析相关操作c;该操作类似 pyquery
知识点c;直接观察代码即可掌握。
def parse(self, response):
# print(response.text)
list_item @H_944_29@= response.css('.list-item-default')
# print(list_item)
for item in list_item:
title @H_944_29@= item.css('.title::text').extract_first() # 直接获取文本
url @H_944_29@= item.css('.a_block::attr(href)').extract_first() # 获取属性值
author @H_944_29@= item.css('.author::text').extract_first() # 直接获取文本
print(title, url, author)
其中 response.css
方法返回的是一个选择器列表c;可以迭代该列表c;然后对其中的对象调用 css
方法。
item.css('.title::text')
c;获取标签内文本;item.css('.a_block::attr(href)')
c;获取标签属性值;extract_first()
:解析列表第一项;extract()
:获取列表。在 pm.py
中导入 items.py
中的 ArticleItem
类c;然后按照下述代码进行修改:
def parse(self, response):
# print(response.text)
list_item @H_944_29@= response.css('.list-item-default')
# print(list_item)
for i in list_item:
item @H_944_29@= ArticleItem()
title @H_944_29@= i.css('.title::text').extract_first() # 直接获取文本
url @H_944_29@= i.css('.a_block::attr(href)').extract_first() # 获取属性值
author @H_944_29@= i.css('.author::text').extract_first() # 直接获取文本
# print(title, url, author)
# 对 item 进行赋值
item['title'] @H_944_29@= title
item['url'] @H_944_29@= url
item['author'] @H_944_29@= author
yield item
此时完成了一个单页爬虫
接下来对 parse
函数再次改造c;使其在解析完第 1 页之后c;可以解析第 2 页数据。
def parse(self, response):
# print(response.text)
list_item @H_944_29@= response.css('.list-item-default')
# print(list_item)
for i in list_item:
item @H_944_29@= ArticleItem()
title @H_944_29@= i.css('.title::text').extract_first() # 直接获取文本
url @H_944_29@= i.css('.a_block::attr(href)').extract_first() # 获取属性值
author @H_944_29@= i.css('.author::text').extract_first() # 直接获取文本
# print(title, url, author)
# 对 item 进行赋值
item['title'] @H_944_29@= title
item['url'] @H_944_29@= url
item['author'] @H_944_29@= author
yield item
next @H_944_29@= response.css('.nav a:nth-last-child(2)::attr(href)').extract_first() # 获取下一页链接
# print(next)
# 再次生成一个请求
yield scrapy.request(url@H_944_29@=next, callBACk@H_944_29@=self.parse)
上述代码中c;变量 next
表示下一页地址c;通过 response.css
函数获取链接c;其中的 css
选择器请重点学习。 yield scrapy.request(url=next, callBACk=self.parsE)
表示再次创建一个请求c;并且该请求的回调函数是 parse
本身c;代码运行效果如下所示。
scrapy crawl pm @H_944_29@-o pm.json
scrapy crawl pm -o pm.jl
。
生成的文件还支持 csv 、 xml、marchal、pickle c;可自行尝试。
下面将数据管道利用起来 打开 pipelines.py
文件c;修改类名 @H_868_6@myProjectPipeline → titlePipeline
c;然后编入如下代码:
class titlePipeline:
def process_item(self, item, spider): # 移除标题中的空格
if item["title"]:
item["title"] @H_944_29@= item["title"].Strip()
return item
else:
return DropItem("异常数据")
该代码用于移除标题中的左右空格。
编写完毕c;需要在 setTings.py
文件中开启 ITEM_PIPELInes
配置。
ITEM_PIPELInes @H_944_29@= {
'my_project.pipelines.titlePipeline': 300,
}
300
是 PIPELInes
运行的优先级顺序c;根据需要修改即可。再次运行爬虫代码c;会发现标题的左右空格已经被移除。
到此 scrapy 的一个基本爬虫已经编写完毕。
今天是持续写作的第 245 / 365 天。 期待 关注c;点赞、评论、收藏。
更多精彩
《爬虫 100 例c;专栏销售中c;买完就能学会系列专栏》
以上是大佬教程为你收集整理的学python,怎么能不学习scrapy呢,这篇博客带你学会它全部内容,希望文章能够帮你解决学python,怎么能不学习scrapy呢,这篇博客带你学会它所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。