scrapy入门

2022-09-20 19:43:17 浏览数 (1)

最近在学习scrapy框架,实在是有点难了,因为用起来的方法很不一样,很有Django的味道(就是我放弃了的Django),要在终端运行...隔了一天也忘得差不多了,现在来复习一下再继续听课.

笔记

什么是框架 就是一个集成了很多功能并且具有很强通用性的一个项目模板 如何学习框架 专门学习框架封装的各种功能的详细用法 什么是scrapy框架 爬虫中封装好的一个明星框架 功能: 高性能的持久化存储,异步的数据下载,高性能的数据解析,分布式 环境安装: pip install wheel pip install twisted pip install pywin32 pip install scrapy 创建一个工程:scrapy startproject xxx cd 进入工程,在子目录中创建一个爬虫文件 cd 工程名 scrapy genspider spidername www.xxx.com 执行工程: scrapy crawl spidername

现在来具体操作一下:

我已经用scrapy startproject scrapy框架创建了文件夹,现在要在这个文件夹中创建新的项目,所以要使用cd进入文件夹,

然后再使用scrapy genspider xxx www.xxx.com 在文件夹中创建新的项目.这里我将新项目命名为first

在文件夹中会自动生成这些文件.

先来看看spider文件

代码语言:javascript复制
import scrapy


class SpiderProjectSpider(scrapy.Spider):
    # 爬虫文件名称,就是爬虫源文件的唯一标识,一定不能重复
    name = 'project1'
    # 允许的域名,用来限定start_url列表中哪些url可以进行请求的发送,一般不用
    # allowed_domains = ['www.xxx.com']
    # 起始的url列表,该列表存放的url会被scrapy自动进行请求的发送
    start_urls = ['http://www.baidu.com', 'http://www.sogou.com']

    # 用作数据解析,response参数表示的是请求成功后对应的响应对象.
    def parse(self, response):
        print(response)

然后再来看看settings.py这个文件,里面是一些配置,其中的ROBOTSTXT_OBEY是设置是否遵守robot协议的意思,我们将他修改为False,这样才可以爬取到数据,否则很多网站都是爬不了的.

我们使用scrapy crawl project1尝试执行,看看会得到什么结果.

可以看到打印出来了很多日志,这样就很难找到我们想要看到的东西,所有我们要去配置里设置一下,在settings中加上这么一行.

代码语言:javascript复制
LOG_LEVEL = "ERROR"
代码语言:javascript复制
代码语言:javascript复制
  就可以只打印出我们想要的结果了.

现在我们去实施一下,爬取糗事百科中的作者 段子.

同样的,先创建好项目,配置好设置.

代码语言:javascript复制
import scrapy


class QiubaiSpider(scrapy.Spider):
    name = 'qiubai'
    # allowed_domains = ['www.xxx.com']
    #将要爬取的url地址
    start_urls = ['https://www.qiushibaike.com/text/']

    def parse(self, response):  # response就是返回的响应
        # 解析:作者名称 段子内容
        div_list = response.xpath("//div[@class='col1 old-style-col1']/div")
        for div in div_list:
            # extract可以将selector对象中的data中参数存储的字符串
            author = div.xpath("./div[1]/a[2]/h2/text()")[0].extract()
            content = div.xpath("./a[1]/div/span//text()").extract()
            print(author, content)

            break

成功将内容打印出来.

然后我们要学习将数据持久化存储,不能单单只是在终端中显示,下一次看就没了.

第一种方法是用终端指令存储数据

代码语言:javascript复制
import scrapy


class QiubaiSpider(scrapy.Spider):
    name = 'qiubai'
    # allowed_domains = ['www.xxx.com']
    start_urls = ['https://www.qiushibaike.com/text/']

    def parse(self, response):
        # 解析:作者名称 段子内容
        div_list = response.xpath("//div[@class='col1 old-style-col1']/div")
        all_data = []
        for div in div_list:
            # extract可以将selector对象中的data中参数存cd/储的字符串
            author = div.xpath("./div[1]/a[2]/h2/text()")[0].extract()
            content = div.xpath("./a[1]/div/span//text()").extract()
            content = "".join(content)
            dic = {
                "author":author,
                "content":content
            }
            all_data.append(dic)
        return all_data

将数据存储到一个列表中,最后用终端命令scrapy crawl qiubai -o ./qiubai.csv进行存储.

实在是有点难看不懂了,先到这里吧,一会开一篇继续写好了.

0 人点赞