Scrapy爬虫文件代码基本认识和细节解释
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爬虫文件代码基本认识和细节解释的更多相关文章
- Python之Scrapy爬虫框架 入门实例(一)
一.开发环境 1.安装 scrapy 2.安装 python2.7 3.安装编辑器 PyCharm 二.创建scrapy项目pachong 1.在命令行输入命令:scrapy startproject ...
- Scrapy 框架,爬虫文件相关
Spiders 介绍 由一系列定义了一个网址或一组网址类如何被爬取的类组成 具体包括如何执行爬取任务并且如何从页面中提取结构化的数据. 简单来说就是帮助你爬取数据的地方 内部行为 #1.生成初始的Re ...
- 第十七节:Scrapy爬虫框架之item.py文件以及spider中使用item
Scrapy原理图: item位于原理图的最左边 item.py文件是报存爬取数据的容器,他使用的方法和字典很相似,但是相比字典item多了额外的保护机制,可以避免拼写错误或者定义错误. 1.创建it ...
- 第十六节:Scrapy爬虫框架之项目创建spider文件数据爬取
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取所设计的, 也可以应用在获取API所返回的数据或 ...
- Scrapy爬虫框架(2)--内置py文件
Scrapy概念图 这里有很多py文件,分别与Scrapy的各个模块对应 superspider是一个爬虫项目 spider1.py则是一个创建好的爬虫文件,爬取资源返回url和数据 items.py ...
- 第三百四十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—craw母版l创建自动爬虫文件—以及 scrapy item loader机制
第三百四十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—craw母版l创建自动爬虫文件—以及 scrapy item loader机制 用命令创建自动爬虫文件 创建爬虫文件是根据scrap ...
- 第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器
第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器 编写spiders爬虫文件循环 ...
- 第三百三十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—Scrapy启动文件的配置—xpath表达式
第三百三十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—Scrapy启动文件的配置—xpath表达式 我们自定义一个main.py来作为启动文件 main.py #!/usr/bin/en ...
- 二十三 Python分布式爬虫打造搜索引擎Scrapy精讲—craw母版l创建自动爬虫文件—以及 scrapy item loader机制
用命令创建自动爬虫文件 创建爬虫文件是根据scrapy的母版来创建爬虫文件的 scrapy genspider -l 查看scrapy创建爬虫文件可用的母版 Available templates: ...
- 二十 Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器
编写spiders爬虫文件循环抓取内容 Request()方法,将指定的url地址添加到下载器下载页面,两个必须参数, 参数: url='url' callback=页面处理函数 使用时需要yield ...
随机推荐
- 五分钟 k8s入门到实战--跨服务调用
背景 在做传统业务开发的时候,当我们的服务提供方有多个实例时,往往我们需要将对方的服务列表保存在本地,然后采用一定的算法进行调用:当服务提供方的列表变化时还得及时通知调用方. student: url ...
- ES 2023新特性速解
ES 2023新特性速解 一.新增数组方法 操作数组的方法 Array.prototype.toSorted(compareFn) //返回一个新数组,其中元素按升序排序,而不改变原始数组. Arra ...
- modbus转profinet网关连接ABB变频器在博图程序案例
modbus转profinet网关连接ABB变频器在博图程序案例 在博图里PLC无需编程利用兴达易控modbus转Profinet网关将ABB变频器接入到西门子网络中,用到设备为西门子1200PLC, ...
- Kubeflow基础知识
kubeflow 基础知识 kubeflow 简介 kubeflow是谷歌开源的MLOps开源平台,其中包含的不同组件代表了机器学习生命周期的不同阶段. 下图是kubeflow组织ML工作流程: ku ...
- 英方软件和dell emc对比理解
英方软件和dell emc对比理解: 英方软件 功能 对比dell emc理解 i2Availability 1.英方实现业务高可用的时候,要求在异地运行与生产机环境一致的备机,备机数据实时与生产机同 ...
- Decorator 装饰者模式简介与 C# 示例【结构型4】【设计模式来了_9】
〇.简介 1.什么是装饰者模式 一句话解释: 通过继承统一的抽象类来新增操作,再在使用时通过链式添加到对象中,达到与原有设定无关联可灵活附加. 装饰者模式是一种行为设计模式,它允许向一个现有的对象 ...
- Macos下用Clion调试chromium源码
1:下载CLion 2021.1.3(网上有破解版) 2:选择File->Open 导入chromium源码 3:在Src同级目录新建一个CMakeLists.txt 4:点击clion编译按钮 ...
- 自定义过滤器配置 Shiro 认证失败返回 json 数据
by emanjusaka from https://www.emanjusaka.top/archives/11 彼岸花开可奈何 本文欢迎分享与聚合,全文转载请留下原文地址. Shiro权限框架 ...
- ElectronReactAdmin跨平台管理系统|electron27+react18后台模板EXE
基于electron27+react18+arco电脑端后台管理程序EXE实例ElectronRAdmin. electron27-react18-admin 基于跨平台技术Electron集成Vit ...
- Redis7新特性简介及十大数据类型
Redis是基于内存的K-V键值对内存数据库 浅谈Redis7新特性 主要是自身底层性能和资源利用率上的提高和优化. 多AOF文件支持 config命令增强 限制客户端内存使用 listpack紧凑列 ...