POST实例详解 scrapy

本文详细介绍了使用Scrapy框架进行POST请求爬取网页数据的过程,包括如何提交表单、使用meta传递参数、处理CSV写入时遇到的问题,如科学计数法、空行等。同时,文章提及了在爬虫运行过程中需要注意的IP更换问题。
摘要由CSDN通过智能技术生成

cqupthub 任务三记录
爬取网站:http://www1.cqjsxx.com/webcqjg/GcxxFolder/zhongbiao.aspx
爬取目标:从列表页,进入每一个详情页,爬取每个项目的编号,名称……
在这里插入图片描述

重点

1、学会了用post
2、用meta传参数

用POST
  • post是一种与服务器交互的方法
    大概就是,我们POST一个表单给服务器,于是服务器会返回一些有用的东西给我们。我们再对返回的信息处理。

HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息

  • 首先,我们用scrapy.FormRequest来提交表单。

表单在网页中主要负责数据采集功能(包含表单标签、表单域、表单按钮)

在这里插入图片描述
然后我们先爬取第一个列表页的内容

line 30 是得到详情页的url
line 33 是运用 Item类,infoDict 是我用来储存信息的字典

关于Item 爬取的主要目的就是从非结构性的数据源提取结构性数据。Scrapy提供Item类来满足这样的需求。Item对象是种简单的容器,保存了爬取到的数据,于是数据就从spider 通过 Item 传到了pipeline。其提供了类似于字典的API以及用于声明可用字段的简单语法。

line 37 这里我们通过 yield 来发起一个请求。并通过 callback 参数为这个请求添加回调函数,在请求完成之后会将响应作为参数传递给回调函数。通过 meta 传递含有url的字典。

关于yield 这种语法叫做生成器,所用到的函数就是 yield (迭代器和生成器,之后有时间再写一篇)。这里的yield 是到解析详情页的函数去
关于callback callback 是一个函数,在发生某一个事件后,会调用该函数。这里就是request之后,就会调用callback这里的函数
关于 meta meta是一个字典,它的主要作用是用来传递数据的,meta = {‘key1’:value1},如果想在下一个函数中取出value1, 只需得到上一个函数的meta[‘key1’]即可, 因为meta是随着Request产生时传递的,下一个函数得到的Response对象中就会有meta,即response.meta

line 40 这里是在response中找到 _VIEWSTATE 的参数值,用于请求下一页
line 42 cnt是我用来计页数的,在后面的POST中也会用到
line 47 提交表单,返回下一页的列表页

这里的 formdata 是包括需要提交的表单内容,用到了前面的_VIEWSTATE 和 cnt。
然后 callback 到 parse 函数(没错,就是它所在的函数,因为下一页也需要对列表页分析,得到详情页的url,和再下一页的post参数)
58行的 meta 用于传递页码

line 69 接受从meta传来的字典
line 71 用xpath找我们需要的内容
line 86 yield字典,给pipeline

csv写入时的一些问题
writerow中,只能有一项

这里报错,显示 writerow() takes exactly one argument
在这里插入图片描述
所以 writerow 这里还要加一个括号,像下面这样
在这里插入图片描述

在这里插入图片描述
已经有写入了,但是我想,能不能去掉[’’]

在这里插入图片描述
这样就可以去掉了,但是,数字又不对了
在这里插入图片描述

csv写入长于11位的数字,写入csv时,会有科学计数法

然后我加了个encode,然后csv中就会出现b‘’这样的前缀
于是我又改成decode,就会有‘str’ object has no attribute ‘decode’
然后我就改成 encode(‘utf-8’).decode(‘utf-8’) 它又变成科学计数了
在这里插入图片描述
说明这里是字符串类型

最后,我手动在csv中取消科学计数法,就实现了。

csv空行问题,命令行执行写入

csv空行问题,网上有人说:在scrapy的源代码中,加入newline = “”
但是我的源码中是有这个的,为什么还是有空行呢
发现这里有个 windows needs this

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simone Zeng

给作者来杯咖啡吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值