欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

scrapy框架下第一只爬虫!

程序员文章站 2022-06-22 16:49:22
学习素材整合学习的fishc.com知识,加巩固学习,不作其他目的!新手上路,前辈指教今天学习了scrapy框架编写第一只爬虫,爬取的url:http://www.dmoztools.net/目的:网页截图(‪D:\我的坚果云\01_日常使用文件\1.bmp)希望把标题、超链接、描述都保存到一个文件中正文1、新建一个爬虫打开cmd,scrapy startproject Dmoz2、......

学习素材

整合学习的fishc.com知识,加巩固学习,不作其他目的!新手上路,前辈指教
今天学习了scrapy框架编写第一只爬虫,爬取的url:http://www.dmoztools.net
这是一个分类导航网站
_________________________________________________________________________________________________分割线scrapy框架下第一只爬虫!
目的:希望把标题、超链接、描述都保存到一个文件中

正文

1、新建一个爬虫

打开cmd,切换目录到桌面:cd Desktop(默认为你的用户名所在地,C://user,使用cd /d D:// 路径 切换到具体文件夹)
新建爬虫scrapy startproject tutorial
(新建爬虫的另一种方法:)
桌面出现了tutorial的文件夹,里面的文件有scrapy框架下第一只爬虫!
spider是从网页爬取数据的类

2、编辑items

items的作用是存储爬取数据的容器,它就是类似于字典,定义一个item的方法很简单,只要继承scrapy.item类,并将所有字段定义为scrapy.Field()即可。

class TutorialItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    link = scrapy.Field()
    desc = scrapy.Field()

3.编写spider

scrapy框架下第一只爬虫!
在spiders中新建一个爬虫,命名dmoz_spider.py,代码如下

import scrapy

class DmozSpider(scrapy.Spider):
	name = "dmoz"
	allow_domains = "dmoztools.net"
	start_urls = [
	'http://www.dmoztools.net/Computers/Programming/Languages/Python/Books/',
	'http://www.dmoztools.net/Computers/Programming/Languages/Python/Resources/'
	]
	
	def parse(self,response):
		filename = response.url.split('/')[-2]
		with open(filename,'wb') as f:
			f.write(response.body)
		

为验证爬取过程,先将其打印出来
注意:
(1)每个爬虫的name是惟一的,就是后面cmd中的调用名
(2)domain指的是爬虫的爬取范围
(3)列表中有一个逗号

4、test

进入cmd,进入爬虫文件夹cd tutorial
运行 scrapy crawl dmoz
(dmoz是爬虫的唯一名字!)
屏幕截图
scrapy框架下第一只爬虫!
可以看到,成功爬取到了整个网页内容,接下来要做的就是从中提取出我们需要的title、link和description。我们使用selector来实现
seletor的方法有:
xpath()–传入xpath表达式,返回对应的一个列表
css()–传入css表达式,返回对应的一个列表
extract()–序列化该节点,返回一个列表
re()–传入正则表达式,返回一个列表

5、爬取title示例

对title检查
scrapy框架下第一只爬虫!
可以看到,
title的目录为
sel.xpath(’//div/div/div[@class=“title-and-desc”]/a/div/text()’).extract(),
link的目录为sel.xpaht(’//div/div/div/a/@href’).extract()
desc的目录为sel.xpath(’//div/div/div/div[@class="site-descr "]/text()’).extract()
在cmd中验证:scrapy shell urlscrapy框架下第一只爬虫!
这时候可以用response了,response.body返回网页代码,response.headers返回网页的headers。
sel.xpath(’//div/div/div/a/div/text()’).extract()
scrapy框架下第一只爬虫!
得到title,测试成功,其他依旧,测试结果中相关的
scrapy框架下第一只爬虫!

6.修改爬虫

import scrapy

class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = "dmoztools.net"
    start_urls = [
        'http://www.dmoztools.net/Computers/Programming/Languages/Python/Books/',
        'http://www.dmoztools.net/Computers/Programming/Languages/Python/Resources/'
        ]
    
    def parse(self,response):
        sel = scrapy.selector.Selector(response)
        sites = sel.xpath('//div/div/div[@class="title-and-desc"]')
        for site in sites:
            title = site.xpath('a/div/text()').extract()
            link = site.xpath('a/@href').extract()
            desc = site.xpath('div[@class="site-descr "]/text()').extract()
            print(title,link,desc)

测试打印成功;
scrapy框架下第一只爬虫!屏幕截图

7.存储数据

测试成功后,就要将数据存储到item容器里面 ,

import scrapy


from tutorial.items import TutorialItem #导入item模块

class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = "dmoztools.net"
    start_urls = [
        'http://www.dmoztools.net/Computers/Programming/Languages/Python/Books/',
        'http://www.dmoztools.net/Computers/Programming/Languages/Python/Resources/'
        ]
    
    def parse(self,response):
        sel = scrapy.selector.Selector(response)
        sites = sel.xpath('//div/div/div[@class="title-and-desc"]')
        items = []
        for site in sites:
            item = TutorialItem()     #实例出一个对象
            item['title'] = site.xpath('a/div/text()').extract()
            item['link'] = site.xpath('a/@href').extract()
            item['desc'] = site.xpath('div[@class="site-descr "]/text()').extract()
            items.append(item)
        return items

运行scrapy crawl dmoz结果
scrapy框架下第一只爬虫!
接下来要将数据存储为json格式,
scrapy crawl dmoz -o item.json -t json

本文地址:https://blog.csdn.net/qq_43680223/article/details/85958956

相关标签: 学习