python爬虫——基于scrapy框架爬取糗事百科上的段子内容

  • 1、需求
  • 2、分析及实现
  • 3、实现效果
  • 4、进行持久化存储
    • (1)基于终端指令
    • (2)基于管道
  • 【前置知识】python爬虫——scrapy框架使用教程

1、需求

爬取糗事百科上段子的作者名字和段子内容
https://www.qiushibaike.com/text/

2、分析及实现

首先,创建scrapy工程文件,在命令行上输入:
scrapy startproject qiubaiPro

然后,进入qiubaiPro文件,在命令行上输入:
cd qiubaiPro

之后再创建爬虫文件,在命令行上输入:
scrapy genspider qiubai www.xxx.com

settings.py中的部分内容改为:

USER_AGENT = 'Mozilla/......'# Obey robots.txt rules
ROBOTSTXT_OBEY = FalseLOG_LEVEL='ERROR'

spiders文件夹下的qiubai.py进行修改

import scrapyclass 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('//*[@id="content"]/div/div[2]/div')print(div_list)for div in div_list:author = div.xpath('./div/a[2]/h2/text()').extract_first()content = div.xpath('./a[1]/div//text()').extract()content = ''.join(content)print(author,content)

知识点:python中join()函数的使用方法

进行爬取:
scrapy crawl qiubai

3、实现效果


4、进行持久化存储

(1)基于终端指令

将qiubai.py中的内容改为

import scrapyclass 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('//*[@id="content"]/div/div[2]/div')#存储所有解析到的数据all_data = []for div in div_list:#xpath返回的是列表,但是列表元素一定是Selector类型的对象#extract可以将Selector对象中data参数存储的字符串提取出来author = div.xpath('./div/a[2]/h2/text()').extract_first()#列表调用了extract之后,则表示将列表中每一个Selector对象中data对应的字符串提取了出来content = div.xpath('./a[1]/div//text()').extract()content = ''.join(content)dic = {'author':author,'content':content}all_data.append(dic)print(dic)return all_data

执行命令时输入scrapy crawl qiubai -o ./qiubai.csv
即可完成持久化存储。

(2)基于管道

编码流程:

  • 数据解析
  • 在item类中定义相关的属性
  • 将解析的数据封装存储到item类型的对象
  • 将item类型的对象提交给管道进行持久化存储的操作
  • 在管道类的process_item中要将其接收到的item对象中存储的数据进行持久化存储操作
  • 在配置文件中开启管道

好处:
通用性强

(1)在item中定义相关属性
items.py文件

import scrapyclass QiubaiproItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()author = scrapy.Field()content = scrapy.Field()

(2)解析数据,将解析到的数据存储到item类型的对象中,然后将其提交给管道

qiubai.py文件

import scrapy
from qiubaiPro.items import QiubaiproItemclass 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('//*[@id="content"]/div/div[2]/div')#存储所有解析到的数据all_data = []for div in div_list:#xpath返回的是列表,但是列表元素一定是Selector类型的对象#extract可以将Selector对象中data参数存储的字符串提取出来author = div.xpath('./div/a[2]/h2/text()').extract_first()#列表调用了extract之后,则表示将列表中每一个Selector对象中data对应的字符串提取了出来content = div.xpath('./a[1]/div//text()').extract()content = ''.join(content)item = QiubaiproItem()item['author'] = authoritem['content'] = content#将item提交给管道yield item

(3)在配置文件中开启管道,将接收到的item对象进行持久化存储

settings.py文件

ITEM_PIPELINES = {'qiubaiPro.pipelines.QiubaiproPipeline': 300,#300表示的是优先级,数值越小优先级越高
}

pipelines.py文件

from itemadapter import ItemAdapterclass QiubaiproPipeline:fp = None#重写父类的一个方法:该方法只在开始爬虫的时候被调用一次def open_spider(self,spider):print('开始爬虫......')self.fp = open('./qiubai.txt','w',encoding='utf-8')#专门用来处理item类型的对象#该方法可以接收爬虫文件提交过来的item对象#该方法每接收到一个item就会被调用一次def process_item(self, item, spider):author = item['author']content = item['content']self.fp.write(author+':'+content+'\n')return itemdef close_spider(self,spider):print('结束爬虫!')self.fp.close()

命令行上输入scrapy crawl qiubai
即可完成爬取并持久化存储工作

知识点:
python中的yield关键字是个什么鬼?它有什么用处?

14. python爬虫——基于scrapy框架爬取糗事百科上的段子内容相关推荐

  1. 19. python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求 [前期准备] 2.分析及代码实现 (1)获取五大板块详情页url (2)解析每个板块 (3)解析每个模块里的标题中详情页信息 1.需 ...

  2. 【Python爬虫系列教程 28-100】小姐姐带你入门爬虫框架Scrapy、 使用Scrapy框架爬取糗事百科段子

    文章目录 Scrapy快速入门 安装和文档: 快速入门: 创建项目: 目录结构介绍: Scrapy框架架构 Scrapy框架介绍: Scrapy框架模块功能: Scrapy Shell 打开Scrap ...

  3. 转 Python爬虫实战一之爬取糗事百科段子

    静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...

  4. Python爬虫实战一之爬取糗事百科段子

    点我进入原文 另外, 中间遇到两个问题: 1. ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128) 解 ...

  5. python爬虫之XPATH(爬取糗事百科、扇贝单词、网易云)

    1.XML简介 或许有人会说,我正则用的不好,处理 HTML 文档很累,有没有其他的方法?有!那就是XPath,我们可以: (1)先将 HTML 文件 转换成 XML 文档, (2)然后用 XPath ...

  6. python笔记之利用scrapy框架爬取糗事百科首页段子

    环境准备: scrapy框架(可以安装anaconda一个python的发行版本,有很多库) cmd命令窗口 教程: 创建爬虫项目 scrapy startproject qq #创建了一个爬虫项目q ...

  7. scrapy获取a标签的连接_python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求[前期准备] 2.分析及代码实现(1)获取五大板块详情页url(2)解析每个板块(3)解析每个模块里的标题中详情页信息 点击此处,获取 ...

  8. Python3写爬虫(五)爬取糗事百科段子

    2019独角兽企业重金招聘Python工程师标准>>> 最近几天开始用Python3改写网上用Python2写的案例,发现完全可以用Python3来重构Python2的源码.本篇文章 ...

  9. python爬虫——用Scrapy框架爬取阳光电影的所有电影

    python爬虫--用Scrapy框架爬取阳光电影的所有电影 1.附上效果图 2.阳光电影网址http://www.ygdy8.net/index.html 3.先写好开始的网址 name = 'yg ...

最新文章

  1. ubb代码转化html代码
  2. B/S软件超越C/S软件的优势在哪里?
  3. Spring Boot 一个依赖搞定 session 共享,没有比这更简单的方案了!
  4. 算法之路——插入排序篇3:希尔排序
  5. linux 附加数据库文件,SQL Server 数据库分离与附加图文详解
  6. css3美话网页元素
  7. 5、利用控件TVCLZip和TIdFTP压缩文件并上传到FTP的线程单元pas 改进版
  8. keras ImageDataGenerator数据增强
  9. Clojure 的 Enlive 库尝试
  10. Scratch3.0(一)初识Scratch3.0
  11. podman加速器Harbor
  12. PS证件照蓝底转白底红底转白底
  13. pcie数据反_理解PCIE链路反转和极性反转
  14. python拨打网络电话_python 网络电话
  15. 例题 8-4 传送中的车(Fabled Rook, UVa 11134)
  16. 巴西柔术第三课:封闭式防守的降服技术
  17. JOL探索synchronized锁-子路老师
  18. 拉普拉斯变换的物理意义是什么
  19. 顶点着色器和片段着色器的区别
  20. ppt(office365)之起始页、目录页、结束页界面布局技巧

热门文章

  1. Facebook挖到谷歌重量级人物任CEO
  2. 蓝桥杯2013Java组省赛(世界末日)
  3. 巡回牧师matlab编程,唐崇荣牧师10月将巡回布道 警惕表面悔改成为对神的操控
  4. PostgreSQL11 | postgresql的页面配置(汉化)
  5. 在IIS上配置php服务器
  6. which 命令的用法
  7. 按键精灵易语言c,易语言怎么和按键精灵结合在一同...
  8. js正则表达式验证文件扩展名
  9. 116.Oracle数据库SQL开发之 PLSQL编程——游标
  10. 如何快速轻松地在Excel中删除空白行和列