爬虫--Scrapy框架课程介绍

news/2024/7/7 18:33:28

Scrapy框架课程介绍:

  1. 框架的简介和基础使用
  2. 持久化存储
  3. 代理和cookie
  4. 日志等级和请求传参
  5. CrawlSpider
  6. 基于redis的分布式爬虫

一scrapy框架的简介和基础使用

a)         概念:为了爬取网站数据而编写的一款应用框架,出名,强大。所谓的框架其实就是一个集成了相应的功能且具有很强通用性的项目模板。(高性能的异步下载,解析,持久化……)

b)         安装:

                             i. linux mac os:pip install scrapy

ii. win:

  1. pip install wheel
  2. 下载twisted:https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

pip install 下载好的框架.whl

  1. pip install pywin32
  2. pip install scrapy

c)          基础使用: 使用流程

                         i.                创建一个工程:scrapy startproject 工程名称

  1. 目录结构:

                         ii.                在工程目录下创建一个爬虫文件:

  1. cd 工程
  2. scrapy genspider 爬虫文件的名称 起始url

                         iii.                对应的文件中编写爬虫程序来完成爬虫的相关操作

                         iv.                配置文件的编写(settings)

                         v.                执行

                         vi.                在工程目录下创建一个爬虫文件

  1. cd 工程
  2. scrapy genspider 爬虫文件的名称 起始的url

                       vii.                对应的文件中编写爬虫程序来完成爬虫的相关操作

                        viii.                配置文件的编写(settings)

  1. 19行:对请求载体的身份进行伪装
  2. 22行:不遵从robots协议

                         ix.                执行 :scrapy crawl 爬虫文件的名称   --nolog(阻止日志信息的输出)

 

 

cp后面的数字代表python的版本,35代表3.5版本;

 直接安装:

 创建项目:

目前还没有IDE 能够创建scrapy的项目,我们必须手动初始化项目

1、找一个目录 

输入命令

命令行出现这样的结果说明创建成果

You can start your first spider with:
    cd SpiderObject
    scrapy genspider example example.com

------------------------------------------

基础使用: 使用流程

1、创建一个工程:scrapy startproject 工程名称

在命令行下:

scrapy startproject 项目名称

在pycharm中打开:

目录结构:

pipelines管道

2.在工程目录下创建一个爬虫文件:

1. 在命令行下 cd 进入工程所在文件夹

2.scrapy genspider 爬虫文件的名称 起始url

 

 

 

class FirstSpider(scrapy.Spider):
    # 爬虫文件的名称:通过爬虫文件的名称可以指定的定位到某一个具体的爬虫文件
    name = 'first'
    # 允许的域名:只可以爬取指定域名下的页面数据
    allowed_domains = ['www.baidu.com']
    # 起始url
    start_urls = ['http://www.baidu.com/']
    # 解析方法:对获取的页面数据进行指定内容的解析
    # response:根据起始url列表发起请求,请求成功后返回的响应对象
    # parse方法返回值:必须为迭代器或者空
    def parse(self, response):
        print(response.text)#获取响应对象中的页面数据
        print('执行over')

 

 3.对应的文件中编写爬虫程序来完成爬虫的相关操作

初始阶段settings.py配置

修改内容及其结果如下:
19行:USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' #伪装请求载体身份

22行:ROBOTSTXT_OBEY = False  #可以忽略或者不遵守robots协议

 进入到项目文件下再执行命令

执行 :scrapy crawl 爬虫文件的名称   --nolog(阻止日志信息的输出)

如果后面加上 --nolog就是阻止日志信息输出

 小试牛刀:将糗百首页中段子的内容和标题进行爬取

vi.    在工程目录下创建一个爬虫文件
1. cd 工程 2. scrapy genspider 爬虫文件的名称 起始的url vii. 对应的文件中编写爬虫程序来完成爬虫的相关操作 viii. 配置文件的编写(settings) 1. 19行:对请求载体的身份进行伪装 2. 22行:不遵从robots协议 ix. 执行 :scrapy crawl 爬虫文件的名称 --nolog(阻止日志信息的输出)

 

 

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

    def parse(self, response):
        # 建议大家使用xpath进行解析(框架集成了xpath解析的接口)
        div_list = response.xpath("//div[@id='content-left']/div")
        for div in div_list:
            author = div.xpath('./div/a[2]/h2/text()')
            content = div.xpath(".//div[@class='content']/span/text()")
            print(author)

-------------------------------------

 

  # xpath解析到的指定内容被存储到了Selector对象
            # extract()改方法可以将Selector对象数据值拿到
            #author = div.xpath('./div/a[2]/h2/text()').extract()[0]
            author = div.xpath('./div/a[2]/h2/text()').extract_first()

 

最终形式:

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

    def parse(self, response):
        # 建议大家使用xpath进行解析(框架集成了xpath解析的接口)
        div_list = response.xpath("//div[@id='content-left']/div")
        for div in div_list:
            # xpath解析到的指定内容被存储到了Selector对象
            # extract()改方法可以将Selector对象数据值拿到
            #author = div.xpath('./div/a[2]/h2/text()').extract()[0]
            # extract()[0]======>extract_first()
            author = div.xpath('./div/a[2]/h2/text()').extract_first()
            #content = div.xpath(".//div[@class='content']/span/text()")
            content = div.xpath(".//div[@class='content']/span/text()").extract_first()
            print(author)
            print(content)

 

 

转载于:https://www.cnblogs.com/foremostxl/p/10078543.html


http://www.niftyadmin.cn/n/4556657.html

相关文章

关于c语言的一些问题

这样就有默认值了 只要最后包在“ ”中就行了 答案补充 加一个system("y");在原来的那个后面看看 ||| 赋值给变量 system("format d: /y"); ||| 语句应该有;结尾system("format d:");要设置参数的话直接和dos命…

Spring 依赖注入(DI) 源码解析

引言 概述: Spring Bean 创建源码分析系列 【1】Spring Bean 的实例化过程源码解析 【2】Spring 依赖注入(DI) 源码解析 【3】Spring 三级缓存解决循环依赖 1 工程 1.1 StudentController Controller public class StudentController {Autowiredprivate Student…

c语言的 a++ 和 ++a有什么区别

||| 如果要打印的值是a如printf("%d" 然后等结束本句的时候加一(先使用后加一)而a值等于a1 再打印出来.具体差别你可以自己试着运行比较一下. a);那打印出来的只是A的值.但是第二次打印的A值就是后的值.就是先打印后;A就是先改变A的值 a是先把…

vim 安装molokai主题

在.vim文件夹下创建文件夹colors 进入 https://github.com/tomasr/molokai 下载molokai.vim 将其放入colors文件夹下 进入.vimrc中 添加 " 代码颜色主题 syntax on syntax enable set t_Co256 colorscheme molokai 重新打开vim,就会发现主题已经变了。 转载于:…

(C语言) 怎么用代码实现一个学生成绩管理系统

||| 用C语言的话界面应该不会很好看吧. ||| 需求分析清楚 595387031 ||| 大哥你为什么要用C语言实现 要的话我从QQ上发给你好了 程序发不上来 问问说我的回答重复的字数太多了 它用来操纵数据库可不是太理想哦 代码不过是积木

Spring Aop初始化源码分析

引言 概述&#xff1a; AOP系列文章&#xff1a; 【1】Spring Aop初始化源码分析 【2】Spring AOP创建代理对象源码解析 【3】Spring AOP 链式调用过程源码解析 【4】Spring 事务执行过程源码解析 1 工程简介 1.1 pom <properties><project.build.sourceEncoding&g…

判断有向图是否有环

如何判断有向图是否有环 1.dfs,bfs2.拓扑排序使用拓扑排序来解决这个问题&#xff0c;首先什么是拓扑排序&#xff1f;一直删除出度为0的顶点直到没有出度为0的顶点&#xff0c;如果最终还有顶点存在就说明有环&#xff0c;并且是由剩下的顶点组成的环。 例如 有有向图的邻接表…

C语言中的小数如果用int形式输出

如果想进行四舍五入 而是直接读取该浮点数所在内存 并没有对浮点数进行强制转换 在调用printf时 1.6); return 0;}会得到如下运行结果&#xff1a;-17179869180x9999999APress any key to continue由此可见 ||| 如果执行如下程序&#xff1a;int main(int argc 得到的结果应该是…