import scrapy
from scrapy.http.request import Request
from scrapy.http.response.html import HtmlResponse
from scrapy_demo.items import ForumItem class BaiduSpider(scrapy.Spider):
# name必须是唯一的,因为运行一个爬虫是通过name来选择的。
# 你需要运行命令行:scrapy crawl <name> 来执行爬虫
name = "tieba" # 爬取数据的限制范围
# 比如有时候baidu.com中就可能会加载其他域名的数据比如123.com。如果不限制scrapy会连123.com也爬。
#
allowed_domains = ["baidu.com"] # 第一次发起请求的URL,这个都是要修改的
# 默认值是你用命令行方式创建一个爬虫时指定的<domain>
# 命令行:scrapy genspider <name爬虫名> <domain(也就是start_urls的默认值)>
start_urls = ["https://tieba.baidu.com"] def parse(self, response: HtmlResponse, **kwargs):
"""
这个方法是自动生成的(你用scrapy genspider命令才会生成呀》。。)
parse方法用于定义如何处理数据的
我们主要是写这个方法.
"""
# print(response)
# print(type(response))
req = response.request # type: Request
# print(req.url) # 获取响应体
# response.body.decode("utf-8") # 二进制数据需要decode() 这个和lxml的response.content是一样的、
# print(response.text) # 使用xpath提取数据
items = response.xpath("//ul[@id='forumList']/li[@class='rcmd_forum_item']") # 使用css选择器提取数据
# -css取文本
# 'a.link-title::text'
# -css取属性
# 'img.image-scale::attr(src)'
# response.css()
# response.csss("") result = [] for item in items:
forum_name = item.xpath("./a/div[@class='rcmd_forum_info']/div[@class='forum_name']/text()").get()
forum_member = item.xpath("./a/div[@class='rcmd_forum_info']/div[@class='forum_member']/text()").get() # 以前我们都是自己构建字典来存储数据,现在可以用scrapy提供的Item模型类来存储数据
# 当然了不是说你不能使用字典存,只是建议用Scrapy提供的Item模型类来存储
# result.append({
# "forum_name": forum_name,
# "forum_member": forum_member
# }) # 使用框架的Item模型类来代替以前的字典
forum_item = ForumItem()
forum_item["forum_name"] = forum_name
forum_item["forum_member"] = forum_member
# 每执行yield一次,就会丢给pipeline来处理
yield forum_item # print(result) # parse()函数中使用yield返回数据给Pipelines,
# 注意:parse()函数中的yield能够传递的对象只能是:BaseItem, Request, dict, None
# yield {"result": result} def start_requests(self):
"""
默认爬虫第一次发起的请求是start_urls中指定的URL列表,然而默认的请求方式是GET请求
如果你第一次请求是POST,就必须重写这个方法,然后修改请求方式
"""
if not self.start_urls and hasattr(self, "start_url"):
raise AttributeError(
"Crawling could not start: 'start_urls' not found "
"or empty (but found 'start_url' attribute instead, "
"did you miss an 's'?)"
)
for url in self.start_urls:
# 修改默认的请求方式为POST
yield Request(url, dont_filter=True, method="GET")

Scrapy爬虫文件代码基本认识和细节解释的更多相关文章

  1. Python之Scrapy爬虫框架 入门实例(一)

    一.开发环境 1.安装 scrapy 2.安装 python2.7 3.安装编辑器 PyCharm 二.创建scrapy项目pachong 1.在命令行输入命令:scrapy startproject ...

  2. Scrapy 框架,爬虫文件相关

    Spiders 介绍 由一系列定义了一个网址或一组网址类如何被爬取的类组成 具体包括如何执行爬取任务并且如何从页面中提取结构化的数据. 简单来说就是帮助你爬取数据的地方 内部行为 #1.生成初始的Re ...

  3. 第十七节:Scrapy爬虫框架之item.py文件以及spider中使用item

    Scrapy原理图: item位于原理图的最左边 item.py文件是报存爬取数据的容器,他使用的方法和字典很相似,但是相比字典item多了额外的保护机制,可以避免拼写错误或者定义错误. 1.创建it ...

  4. 第十六节:Scrapy爬虫框架之项目创建spider文件数据爬取

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取所设计的, 也可以应用在获取API所返回的数据或 ...

  5. Scrapy爬虫框架(2)--内置py文件

    Scrapy概念图 这里有很多py文件,分别与Scrapy的各个模块对应 superspider是一个爬虫项目 spider1.py则是一个创建好的爬虫文件,爬取资源返回url和数据 items.py ...

  6. 第三百四十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—craw母版l创建自动爬虫文件—以及 scrapy item loader机制

    第三百四十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—craw母版l创建自动爬虫文件—以及 scrapy item loader机制 用命令创建自动爬虫文件 创建爬虫文件是根据scrap ...

  7. 第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器

    第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器 编写spiders爬虫文件循环 ...

  8. 第三百三十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—Scrapy启动文件的配置—xpath表达式

    第三百三十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—Scrapy启动文件的配置—xpath表达式 我们自定义一个main.py来作为启动文件 main.py #!/usr/bin/en ...

  9. 二十三 Python分布式爬虫打造搜索引擎Scrapy精讲—craw母版l创建自动爬虫文件—以及 scrapy item loader机制

    用命令创建自动爬虫文件 创建爬虫文件是根据scrapy的母版来创建爬虫文件的 scrapy genspider -l  查看scrapy创建爬虫文件可用的母版 Available templates: ...

  10. 二十 Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器

    编写spiders爬虫文件循环抓取内容 Request()方法,将指定的url地址添加到下载器下载页面,两个必须参数, 参数: url='url' callback=页面处理函数 使用时需要yield ...

随机推荐

  1. 当你使用Taro时,你需要了解的一些事儿

    2017 年 1 月 9 日凌晨,万众期待的微信小程序正式上线,前有跳一跳等爆圈小游戏的带动,后有特殊时期下各类健康码小程序的加持,小程序成为了国内技术圈独树一帜的存在.但随着小程序的迅猛发展,其实在 ...

  2. 一个颜值功能双在线的Zookeeper可视化工具

    大家好,我是 Java陈序员,今天给大家介绍一个颜值功能双在线的 Zookeeper 可视化工具. 项目介绍 PrettyZoo 是一个基于 Apache Curator 和 JavaFX 实现的 Z ...

  3. Merkle Tree 简介

    Merkle 树(Merkle Tree)是一种树状数据结构,通常用于验证大规模数据集的完整性和一致性.它的名字来源于其发明者 Ralph Merkle.Merkle 树在密码学.分布式系统和区块链等 ...

  4. Strimzi Kafka Bridge(桥接)实战之三:自制sdk(golang版本)

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<Strimzi Kafka B ...

  5. Python常用模块-20个常用模块总结

    目录 time模块 datetime模块 random 模块 os 模块 sys 模块 json 和 pickle 模块 hashlib和hmac 模块 logging 模块 numpy 模块 pan ...

  6. .NET微服务系列之Saga分布式事务案例实践

    自从Wing正式发布以后,很多童鞋反馈对Saga分布式事务比较感兴趣,今天就跟大家分享一下"跨行转账"的分布式事务实践案例,入门使用教程请自行前往Wing官方文档. 假设自己名下有 ...

  7. Full Tank 题解

    Full Tank 题目大意 给定一张 \(n\) 个点,\(m\) 条边的连通无向图,在每个点有一个加油站,油价为该点的点权,每条边的油耗为该边的边权.现给出若干询问,问一辆油箱容量为 \(c\) ...

  8. 当scroll-view水平滚动,内容溢出时,文本会自动竖向排列问题

    当scroll-view水平滚动,内容溢出时,文本会自动竖向排列 解决方法:thite-space:nowrap:规定段落中的文本不进行换行

  9. Mac OS安装Python的pip

    最近牛牛的同学在学习python,但当他使用numpy时出现了报错(。•́︿•̀。) 原因为他的python没有numpy这个库(这个故事很典).然鹅雪上加霜的是,他的电脑是Mac,没有Windows ...

  10. 数据类型python

    type()语句的用法 运行结果