scrapy(1.入门)

参考https://www.runoob.com/w3cnote/scrapy-detail.html
(主要参考这位大神的)https://blog.csdn.net/ck784101777/article/details/104468780

先强行入门,然后再分析
其他的文章都是爬 图片 爬电影列表,
但我现在在公司,网络环境是受到监控的,所以还是悠着点,爬一些常用的网站例如CSDN
文章中出现的案例就是爬 https://blog.csdn.net/ck784101777 我参考这位大神的所有文章列表

  • 安装 scrapy模块
  • 创建项目
    进入指定目录运行 scrapy startproject 项目名
    例如 scrapy startproject csdnSpider
    会生成以下文件:
    scrapy.cfg: 项目的配置文件
    csdnSpider/: 该项目的python模块。之后您将在此加入代码。
    csdnSpider/items.py: 项目中的item文件.
    csdnSpider/pipelines.py: 项目中的pipelines(管道)文件.
    csdnSpider/settings.py: 项目的设置文件.
    csdnSpider/spiders/: 放置spider(爬虫)代码的目录.
  • 定义items:
    作用: 用来保存爬取到的数据
    将 csdnSpider/items.py 文件内容改为
	import scrapy
		class CsdnItem(scrapy.Item):
			name = scrapy.Field()
			url = scrapy.Field()
			content = scrapy.Field()
			pass
  • 编写爬虫
    在csdnSpider/spiders/目录下创建文件 如 jjhSpider(就是大神的名字)
import scrapy
from ..items import CsdnItem
class JJHSpider(scrapy.Spider):
	# 爬虫名字  必须唯一
	name = 'csdn'
	# 爬取范围,规定爬虫只爬取这个域名下的网页
	allowed_domains = ['csdn.net']
	# 爬虫爬取数据起始的地方  (元组 或者列表)
	start_urls = ('https://blog.csdn.net/ck784101777/article/list/1',)
	# 这里设置的爬取次数
	offset = 1
	#解析方法 
	def parse(self, response):
		# 保存获取到页面信息
		# open('csdn.html', 'a', encoding='utf-8', errors='ignore').write(str(response.body, 'utf-8'))
		items = CsdnItem()
		# 从 response 中获取指定的内容
		lists = response.xpath('//div[@class="article-list"]/div[@class="article-item-box csdn-tracking-statistics"]')
		# 提取内容
		for i in lists:
			name = i.xpath('./h4/a/text()').extract()
			url = i.xpath('./h4/a/@href').get()
			content = i.xpath('./p[@class ="content"]/a/text()').extract()
			items['name'] = name
			items['url'] = url
			items['content'] = content
			yield items
		# 回调函数  提取下一页  大神的文章共6页 
		if self.offset < 6:
			self.offset += 1
			url = 'https://blog.csdn.net/ck784101777/article/list/{}'.format(str(self.offset))
			yield scrapy.Request(url=url, callback=self.parse)
  • 修改setting 可以参照大神的修改 (不修改也可以的,我就怕被监控到,以后不让我访问了) 我只修改了一项
    DOWNLOAD_DELAY = 1

  • .写个开始方法 或者在输入指令(项目路径下)例如 scrapy crawl csdn -o csdn.xml 我在
    csdnSpider目录下写

		from scrapy import cmdline
		if __name__ == '__main__':
		    # -o csdn.xml 是指将爬取内容保存到 csdn.xml 中
			cmdline.execute('scrapy crawl csdn  -o csdn.xml'.split())

然后开始运行
就会生成一个 csdn.xml 文件 提取的内容就在里面

解析:

  • Scrapy 核心包含
    Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等
    Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
    Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理
    Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器).
    Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。
    Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。
    Spider Middlewares(Spider中间件): 你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)
    Scheduler Middewares(调度中间件):

  • Scrapy运行大概流程:
    1.程序员在Spiders里定义爬虫的起始URL。
    2.ScrapyEngine把Spider中的起始URL,推送到Scheduler。
    3.Scheduler调度URL通过Downloader去互联网下载HTML内容。
    4.Downloader下载HTML内容并返回给Spiders(回调函数)。
    5.Spiders调用 Item Pipeline把爬到的内容保存的数据库/文件,或者继续循环流程1-5。

我感觉最难的是从XPath 开始提取数据
可以参考: https://www.runoob.com/xpath/xpath-tutorial.html
从Chrome一键获取 xpath 地址的方法(右键->检查->copy->copy xpath)
这个我没成功
尝试了好几次 所以就成了这个样子

‘//div[@class=“article-list”]/div[@class=“article-item-box csdn-tracking-statistics”]’
这个的意思是 选取 所有class= “article-list” 的div标签下class="article-item-box csdn-tracking-statistics"的div标签下
剩下三个:

<h4>
	<a href ="https://blog.csdn.net/ck784101777/article/details/104468780">
	"网络爬虫"
	</a >
</h4>
<p class ="content">
	<a>
	  "这里是内容"
	</a >
</p >

i.xpath(’./h4/a/text()’).extract() :获取到的是 “网络爬虫”
i.xpath(’./h4/a/@href’).get() : 获取到的是: https://blog.csdn.net/ck784101777/article/details/104468780
i.xpath(’./p[@class =“content”]/a/text()’).extract() : 获取到的是: “这里是内容”

一些XPath语法
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
… 选取当前节点的父节点。
@ 选取属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值