# scrapy(二):get请求
scrapy中的get请求及基本使用:
1. 创建scrapy项目
scrapy startproject QiuBaiProject
2. 创建爬虫文件
scrapy genspider QiuBai www.qiubai.com
3.修改配置文件
"""
setting.py :配置文件
"""
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
ITEM_PIPELINES = {
#使用哪个管道处理,后面是管道优先级 1-1000,数字越低,优先级越高
'qiubaiproject.pipelines.QiubaiprojectPipeline': 300,
}
"""
关于日志的说明:默认显示的等级是DEBUG,上面所有的信息全部显示
如果等级配置为ERROR,那么就只显示ERROR,CRITICAL
在配置文件中进行配置
"""
# 配置显示日志信息等级
# LOG_LEVEL = 'ERROR'
# 不将信息显示到屏幕中,将信息显示到文件中
LOG_FILE = 'log.txt'
4. 编写item.py文件
"""
items.py : 这里面是定义数据结构的地方
"""
import scrapy
class QiubaiprojectItem(scrapy.Item):
"""
item对象的用法和字典的用法一模一样,可以快速的转化为字典
"""
# define the fields for your item here like:
# name = scrapy.Field()
# 图片链接
image_src = scrapy.Field()
# 用户名
name = scrapy.Field()
# 年龄
age = scrapy.Field()
# 内容
content = scrapy.Field()
# 好笑个数
haha_count = scrapy.Field()
# 评论个数
ping_count = scrapy.Field()
5. 编写爬虫文件
# -*- coding: utf-8 -*-
'''
QiuBai.py 爬虫文件
'''
import scrapy
from qiubaiproject.items import QiubaiprojectItem
class QiubaiSpider(scrapy.Spider):
name = 'qiubai'
allowed_domains = ['www.qiushibaike.com']
#起始页
start_urls = ['http://www.qiushibaike.com/']
# 爬取其他页面的内容
url = 'https://www.qiushibaike.com/8hr/page/{}/'
page = 1
def parse(self, response):
# 先找到所有的div
div_list = response.xpath('//div[@id="content-left"]/div')
# 遍历这个div的列表,依次获取里面的每一条信息
for odiv in div_list:
# 创建对象
item = QiubaiprojectItem()
# 用户头像
face = 'https:' + odiv.xpath('.//div[1]//img/@src')[0].extract()
# 用户的名字
name = odiv.xpath('.//div[1]//h2').extract()[0]
# 用户的年龄
age = odiv.xpath('.//div[starts-with(@class,"articleGender")]').extract_first()
# 获取用户内容
ospan = odiv.xpath('.//div[@class="content"]/span[1]')[0]
content = ospan.xpath('string(.)').extract()
# 用户的好笑个数
haha_count = odiv.xpath('.//div[@class="stats"]/span[@class="stats-vote"]/i/text()').extract()[0]
# 获取评论个数
ping_count = odiv.xpath('.//div[@class="stats"]/span[@class="stats-comments"]//i/text()').extract()[0]
# 将提取的信息保存起来
item['image_src'] = face
item['name'] = name
item['age'] = age
item['content'] = content
item['haha_count'] = haha_count
item['ping_count'] = ping_count
yield item
# 接着爬取其他的页面
if self.page <= 5:
self.page += 1
# 拼接出来指定的url
url = self.url.format(self.page)
# 接着发送请求,callback是发送请求之后,用哪一个回调函数处理这个请求
yield scrapy.Request(url=url, callback=self.parse)
6.编写管道文件
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import json
class QiubaiprojectPipeline(object):
# 爬虫启动的时候只会调用一次
def open_spider(self, spider):
# 将文件的打开写道这里
self.fp = open('qiubai.json', 'w', encoding='utf8')
# 这个函数就是处理item的函数,每一个item过来都会回调这个方法
def process_item(self, item, spider):
# 将对象转化为字典
obj = dict(item)
# 将字典转化为json格式字符串
string = json.dumps(obj, ensure_ascii=False)
self.fp.write(string + '\n')
return item
# 爬虫结束的时候回调这个方法
def close_spider(self, spider):
self.fp.close()
# scrapy(二):get请求的更多相关文章
- angular分页插件tm.pagination 解决触发二次请求的问题
angular分页插件tm.pagination(解决触发二次请求的问题) DEMO: http://jqvue.com/demo/tm.pagination/index.html#?current ...
- API接口设计:防参数篡改+防二次请求
API接口由于需要供第三方服务调用,所以必须暴露到外网,并提供了具体请求地址和请求参数 为了防止被第别有用心之人获取到真实请求参数后再次发起请求获取信息,需要采取很多安全机制 1.首先: 需要采用ht ...
- [转]ASP.NET MVC学习系列(二)-WebAPI请求 传参
[转]ASP.NET MVC学习系列(二)-WebAPI请求 传参 本文转自:http://www.cnblogs.com/babycool/p/3922738.html ASP.NET MVC学习系 ...
- Ocelot(二)- 请求聚合与负载均衡
Ocelot(二)- 请求聚合与负载均衡 作者:markjiang7m2 原文地址:https://www.cnblogs.com/markjiang7m2/p/10865511.html 源码地址: ...
- scrapy 发post请求
可以使用 yield scrapy.FormRequest(url, formdata, callback)方法发送POST请求. 如果希望程序执行一开始就发送POST请求,可以重写Spider类的s ...
- 使用Typescript重构axios(二十)——请求取消功能:实现第一种使用方式
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- 使用Typescript重构axios(二十一)——请求取消功能:添加axios.isCancel接口
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- Electron-vue实战(二)— 请求Mock数据渲染页面
Electron-vue实战(二)— 请求Mock数据渲染页面 作者:狐狸家的鱼 本文链接 GitHub:sueRimn 一.环境搭建 1.安装Mock.js 如果仅仅用作脱离后台的模拟数据,就安装在 ...
- Ocelot(二)- 请求聚合
原文:Ocelot(二)- 请求聚合 Ocelot(二)- 请求聚合与负载均衡 作者:markjiang7m2 原文地址:https://www.cnblogs.com/markjiang7m2/p/ ...
- openresty 学习笔记二:获取请求数据
openresty 学习笔记二:获取请求数据 openresty 获取POST或者GET的请求参数.这个是要用openresty 做接口必须要做的事情.这里分几种类型:GET,POST(urlenco ...
随机推荐
- 《刻意练习之C#》-0016- C#预处理器指令
预处理指令 这些指令/命令不会转换为可执行代码,但会影响编译过程的各个方面:列如,可以让编译器不编译某一部分代码等. C#中主要的预处理指令 #define和#undef #define指令定义: # ...
- @topcoder - SRM614D1L3@ TorusSailing
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 N*M 的方格图,某人从 (0, 0) 出发想要走到 ...
- MySQL数据库基础知识复习
现在是2020年寒假,这也是新年写的第一篇博客,用了十几天的时间自学了数据库基础部分,想总结一下得失同时并通过写博客来复习前面学的知识点. 个人: 1.本来是计划一周学完基础部分的178p但没能完成这 ...
- MSSQL2008下备份好的*.bak--->>>恢复到--->>>MSSQL2014(解决办法)
MSSQL2008下备份好的*.bak--->>>恢复到--->>>MSSQL2014(解决办法) 在进行CTE训练时(同时也要理解下窗口函数的应用),发现不能继续 ...
- IP组网实验(使用Cisco Packet Tracer路由器模拟软件)
最近计网课讲到了以太网,第二个计网实验就是IP组网实验.这个实验主要使用了netsim这个路由器模拟软件.怎奈mac上没有,于是用Cisco Packet Tracer进行了一次模拟(其实就是实验中的 ...
- 带你学够浪:Go语言基础系列 - 8分钟学复合类型
★ 文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) " 对于一般的语言使用者来说 ,20% ...
- 操作系统 I/O 全流程详解
我们之前的文章提到了操作系统的三个抽象,它们分别是进程.地址空间和文件,除此之外,操作系统还要控制所有的 I/O 设备.操作系统必须向设备发送命令,捕捉中断并处理错误.它还应该在设备和操作系统的其余部 ...
- 07.DRF-序列化
Serializer序列化器 序列化器的作用: 进行数据的校验 对数据对象进行转换 一.定义Serializer 1.1 定义方法 Django REST framework中的Serializer使 ...
- express 框架的使用方法
express 框架的使用方法: 第一步: 生成一个 (express)项目工程 命令提示框的指令是: express (文件名) express -e (文件名) 两段指令的 ...
- JVM生命周期与运行过程
1. Java虚拟机的生命周期 Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序.程序开始执行时他才运行,程序结束时他就停止.你在同一台机器上运行三个程序,就会 ...