1.数据结构回顾

#栈
def push(self,item)
def pop(self)
#队列
def enqueue(self,item)
def dequeue(self)
#列表
def add(self,item)

2.回顾scrapy

- 创建工程:scrapy startproject ProName
- 创建爬虫文件
- cd ProName
- scrapy genspider spiderName www.xxx.com
- 爬虫类的相关属性和方法
- 爬虫文件的名称:name #这里不能重复
- 起始的url列表:start_urls,存储的url会被scrapy进行自动的请求发送
- parse(reponse):用来解析start_urls列表中url对应的响应数据,会被调用多次
- response.xpath() ==> [selector,selector]
- extract()
- 数据持久化存储
- 基于终端指令:
- 只可以将parse方法的返回值进行持久化存储
- scrapy crawl SpiderName -o ./file
- 基于管道持久化存储的编码流程:重点
- 数据解析
- 在item类中声明相关的属性用于存储解析到的数据
- 将解析到的数据存储封装到item类型的对象中
- 将item对象提交给管道类
- item会被管道类中的process_item方法中的item参数进行接收
- process_item方法中编写基于item持久化存储的操作
- 在配置文件中开启管道
- 管道细节处理:
- 管道文件中一个类对应的是什么?
- 一个类表示的是将解析到的数据存储到某一个具体的平台数据库或txt中
- process_item方法中的返回值表示什么含义?
- return item就是说将item传递给下一个即将被执行的管道类
- open_spider,close_spider

3.手动请求发送

阳光热点问政平台:http://wz.sun0769.com/index.php/question/questionType?type=4

我们不能将每个url都放在start_urls中

如何和实现全站数据的爬取?定位到某个板块将所有的数据都爬取到

起始页码:http://wz.sun0769.com/index.php/question/questionType?type=4&page=

下面我们新建一个工程:

走到day6里边,创建一个工程,走到工程内容,下面我们创建一个爬虫文件

下面我们需要settings进行伪装和robot修改

下面打开爬虫文件:注释  allowed_domains

写入起始url,下面解析数据当前页码数据

下面,我们进行解析,在parse函数中

复制第二个xpath作为解析url,再加上一个tr

下面,我们拿一下标题

下面我们再items写我们需要存储的字段:

导入包:

sun.py爬虫文件

# -*- coding: utf- -*-
import scrapy
from sunLinePro.items import SunlineproItem
class SunSpider(scrapy.Spider):
name = 'sun'
# allowed_domains = ['www.xxx.com']
start_urls = ['http://wz.sun0769.com/index.php/question/questionType?type=4&page='] def parse(self, response):
tr_list=response.xpath('//*[@id="morelist"]/div/table[2]/tbody/tr/td/table/tbody/tr')
for tr in tr_list:#解析下面两个数据
title=tr.xpath('./td[2]/a[2]/text()').extract_first()
status=tr.xpath('./td[3]/span/text()').extract_first() item=SunlineproItem()
item['title']=title
item['status']=status
yield item #提交的操作在循环的里边

每提交一次,pipelines.py文件里边的process_item函数就会执行一次

下面,我们再settings.py的配置文件中打开管道:

下面,看一下能不能解析出首页的内容.

现在配置文件中写log_error,只有错误的时候打印

没有错误,也就是没有解析到数据,因此我们需要修改xpath,存在问题的形式tbody

下面是修改之后的内容

执行爬虫文件,也就是这个工程

这个时候,已经能够拿到数据了

我们现在拿到的是当前页中的内容.

我们看一下第二页和第三页中的url

http://wz.sun0769.com/index.php/question/questionType?type=4&page=30

http://wz.sun0769.com/index.php/question/questionType?type=4&page=60

我们看到了这个文件中后边的参数发生了改变

sun.py文件

# -*- coding: utf- -*-
import scrapy
from sunLinePro.items import SunlineproItem
class SunSpider(scrapy.Spider):
name = 'sun'
# allowed_domains = ['www.xxx.com']
start_urls = ['http://wz.sun0769.com/index.php/question/questionType?type=4&page='] #通用的url模板(不可以修改)
url='http://wz.sun0769.com/index.php/question/questionType?type=4&page=%d'
page=
def parse(self, response):
print(',,,,,,,,,,,,,,page=',self.page) #查看页面
tr_list=response.xpath('//*[@id="morelist"]/div/table[2]//tr/td/table//tr')
for tr in tr_list:#解析下面两个数据
title=tr.xpath('./td[2]/a[2]/text()').extract_first()
status=tr.xpath('./td[3]/span/text()').extract_first() item=SunlineproItem()
item['title']=title
item['status']=status
yield item #提交的操作在循环的里边
if self.page<:
#手动对指定的url进行请求发送
count=self.page*
new_url=format(self.url%count)
self.page+=
yield scrapy.Request(url=new_url,callback=self.parse) #url和结束递归条件

下面,我们对文件进行处理,执行下面的命令

成功打印到了第五页

全栈数据的爬取我们可以进行手动进行数据的发送

总结全站数据的爬取:

全站数据的爬取
- 手动请求发送:
- yield scrapy.Request(url,callback):callback回调一个函数用于数据解析

4.get请求,我们怎样用post请求?在scrapy可以用post,但是一般不用,原因比较麻烦

如何进行post请求的发送和如何进行cookie的处理
- post请求的发送:
- 重写父类的start_requests(self)方法
- 在该方法内部只需要调用yield scrapy.FormRequest(url,callback,formdata)
- cookie处理:scrapy默认情况下会自动进行cookie处理

新建一个项目

新建一个爬虫文件

在配置文件进行修改ua,robot和log_level

我们得到上边的url

我们看一下这个方法怎样实现?start_requests()

父类方法:就是将start_urls中del列表元素进行get请求的发送

上边是get请求的父类方法,现在我们进行改写

上图是请求的数据

postDemo.py文件

# -*- coding: utf-8 -*-
import scrapy
class PostdemoSpider(scrapy.Spider):
name = 'postDemo'
# allowed_domains = ['www.xxx.com']
#https://fanyi.baidu.com/sug
start_urls = ['https://fanyi.baidu.com/sug']
#父类方法:就是将start_urls中del列表元素进行get请求的发送
def start_requests(self): #get请求
for url in self.start_urls:
data={
'kw':'dog',
}
#post请求的手动发送使用的是FormRequest
yield scrapy.FormRequest(url=url,callback=self.parse,formdata=data)
def parse(self, response):
print(response.text)

运行之后,我们得到狗dog的数据

5.cookie默认是进行存储生效的在scrapy框架中

小爬爬6.scrapy回顾和手动请求发送的更多相关文章

  1. 小爬爬5:scrapy介绍2

    1.scrapy:爬虫框架 -框架:集成了很多功能且具有很强通用性的一个项目模板 -如何学习框架:(重点:知道有哪些模块,会用就行) -学习框架的功能模板的具体使用. 功能:(1)异步爬取(自带buf ...

  2. Scrapy中的POST请求发送和递归爬取

    POST请求发送 重写爬虫应用文件中继承Spider类的 类的里面的start_requests(self)这个方法 def start_requests(self): #请求的url post_ur ...

  3. 小爬爬5:scrapy介绍3持久化存储

    一.两种持久化存储的方式 1.基于终端指令的吃持久化存储: 特点:终端指令的持久化存储,只可以将parse方法的返回值存储到磁盘文件 因此我们需要将上一篇文章中的author和content作为返回值 ...

  4. 小爬爬5:重点回顾&&移动端数据爬取1

    1. ()什么是selenium - 基于浏览器自动化的一个模块 ()在爬虫中为什么使用selenium及其和爬虫之间的关联 - 可以便捷的获取动态加载的数据 - 实现模拟登陆 ()列举常见的sele ...

  5. python爬虫---scrapy框架爬取图片,scrapy手动发送请求,发送post请求,提升爬取效率,请求传参(meta),五大核心组件,中间件

    # settings 配置 UA USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, l ...

  6. 小爬爬6: 网易新闻scrapy+selenium的爬取

    1.https://news.163.com/ 国内国际,军事航空,无人机都是动态加载的,先不管其他我们最后再搞中间件 2. 我们可以查看到"国内"等板块的位置 新建一个项目,创建 ...

  7. 小爬爬7:回顾&&crawlSpider

    1.回顾昨日内容 回顾 - 全站数据爬取(分页) - 手动请求的发送Request(url,callback) - post请求和cookie处理 - start_requests(self) - F ...

  8. scrapy框架post请求发送,五大核心组件,日志等级,请求传参

    一.post请求发送 - 问题:爬虫文件的代码中,我们从来没有手动的对start_urls列表中存储的起始url进行过请求的发送,但是起始url的确是进行了请求的发送,那这是如何实现的呢? - 解答: ...

  9. 12,scrapy框架之post请求

    今日概要 递归爬取解析多页页面数据 scrapy的post请求发送 1.递归爬取解析多页页面数据 - 需求:将糗事百科所有页码的作者和段子内容数据进行爬取切持久化存储 - 需求分析:每一个页面对应一个 ...

随机推荐

  1. Spring Cloud中Eureka开启密码认证

    转载自 https://blog.csdn.net/u011499747/article/details/77410997 Eureka服务端配置 添加spring-boot-starter-secu ...

  2. springboot使用@Aspect实现AOP记录日志讲解

    AOPAOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.在日常开发当中经常用来记录日志,方法跟踪 ...

  3. 手残,盘符前边多打一个空格导致的message d:\WEB_APP_QuChongFu\file\五月.xlsx (文件名、目录名或卷标语法不正确。)

    尝试读取并解析一个excel文件,一直提示错误 但是有个原始数据,导入就没问题 对比了一下,好像也就是字母d的大小写有区别 我先把大写的D改成小写的试试,如果是大小写问题,那应该抛出异常 好吧,好像并 ...

  4. 引入样式表(css)的四种方式

    一.使用style属性: 将style属性直接加在html标签里. <标签 style="属性1: 设定值1; 属性2: 设定值2; "> 例如: <td sty ...

  5. CentOS 7 yum 安装与配置MySQL5.7

    1.下载mysql源安装包 wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 2.安装mysql源 yu ...

  6. 转:CentOS上安装LAMP之第三步:MySQL环境及安装过程报错解决方案(纯净系统环境)

    这是AMP运行环境中最后配置的环境: 惯例传送门: 1.编译安装MySQL cd /home/zhangatle/tar tar zxvf mysql-.tar.gz cd mysql- cmake ...

  7. jmeter 通过csv data set config 设置参数化后,执行结果显示为<EOF>

    通过csv data set config 设置参数化后,执行结果显示为<EOF>: 反复确认相应的参数的设置均没有问题,其中csv文件编码方式采用uft-8.在csv data set ...

  8. KMLLayer

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. Vue 实现展开折叠效果

    Vue 实现展开折叠效果 效果参见:https://segmentfault.com/q/1010000011359250/a-1020000011360185 上述链接中,大佬给除了解决方法,再次进 ...

  10. oracle-Dbca数据库模板

    数据库模板是用xml文件格式保存在本地磁盘上的数据库配置的定义. Dbca能够使用两种类型的模板:种子模板和非种子模板. 种子模板指含有定义信息和实际的数据文件与重做日志文件的模板定义. 种子模板的优 ...