记录一下自己的爬虫踩过的坑,上一次倒是写了一些,但是写得不够清楚,这次,写清楚爬取的过程。

这个网站是某省的志愿服务网。

就是它了。

我向爬取一些组织开展过的活动,比如这一个组织,

这个组织的页面找打它不存在什么问题,组织的网址只需要拼接就可以了。

看似很容易。

基础网址是:https://sd.zhiyuanyun.com/app/org/view.php?id=(*****)

前面是一堆,后面只需要把id后面的组织的ID放进去就可以,组织的ID也很好找。就是直接从首页一页页爬也行。这个网站的首页也不复杂。

但是现在我要得到这个组织开展的活动列表。

比如这个组织。

这个组织开展的活动蛮多的,看出来会有16页,最下面有标签,16.

难点是我怎么能知道最后一个页是16,就是最大的数, 有的组织只有1页,有的7,有的8.我得知道这个最末页的数,才能写一个循环。不能直接写一个while true 来一个break吧。

这时候,就需要研究一下这个网页的请求方式了。

这个网页请求使用的是post,而不是get。如果是get, 那么只能得到的页面是。

是这样一个页面,get请求的网址也是没错的。

https://sd.zhiyuanyun.com/app/org/view.php?id=TF86AlHTUWfd6

但是发起的项目这个部分,是看不到的。再仔细研究看看。其实在请求过程中,还有一个js请求。

刚开始我以为是xhr,即ajax,找了半天也没找到。

清空一下网络请求信息,点一下某一页的项目。就会看到一个post请求的

这个post请求,复制出来,注意是复制curl (bash)

把这个贴进去 生成请求的网页,就可以得到python的请求代码。

Convert curl command syntax to Python requests, Ansible URI, browser fetch, MATLAB, Node.js, R, PHP, Strest, Go, Dart, Java, JSON, Elixir, and Rust code (trillworks.com)

Convert curl command syntax to Python requests, Ansible URI, browser fetch, MATLAB, Node.js, R, PHP, Strest, Go, Dart, Java, JSON, Elixir, and Rust code 
https://curl.trillworks.com/

右侧的代码部分复制出来,放到pycharm里,

可以看到是这样的。

header部分省略了。重要是参数部分。

注意到这里的实际请求网址应该是这样的,每一个参数都是组合成 & 和= 号组合起来的。基础网址是横线上的。

https://sd.zhiyuanyun.com/app/api/view.php?m=get_opps&type=2&id=91495669&p=16

所以打开这个网址,就可以得到实际请求的网页。是这样的,一个简单的表单网页。结构很简单。

地址栏是我们拼接的网址,?后面是请求的参数,每一个参数的名和值用=链接,中间用&链接。

那么就得到了。

这是请求过程。

接下来是保存数据的过程。

对于这种表单,我一直觉得麻烦, 所以直接就是保存成列表,放入字典。

以后用的时候再拆开。

请求得到结果如图

得到的response实际上就是一个表单组成的网页。用selector解析一下。

from scrapy.selector import Selector
import requestsheaders = {*********************}params = (('m', 'get_opps'),('type', '2'),('id', '91495669'),('p', '16'),
)response = requests.get('https://sd.zhiyuanyun.com/app/api/view.php', headers=headers, params=params)selector = Selector(response)

这时,我想要的就是表单里的信息,不想要表头,所以我用css选择器,选择从tr开始,tr里面,第一栏的tr是表头,所以不要表头,用

.table1 tr:nth-of-type(n+2)

这样的到下

tr = selector.css(".table1 tr:nth-of-type(n+2)")
for xi in tr:a = xi.css('td a::text').extract_first()href = xi.css('td a::attr(href)').extract_first()print( a , href)

面的,然后再做一个遍历,就可以提取所有的项目名称和时间等信息。

这里我只想要的是 项目名和链接,打印出来可以看到,是这样的。

tr = selector.css(".table1 tr:nth-of-type(n+2)")
name_list = []
href_list = []
for xi in tr:a = xi.css('td a::text').extract_first()href = xi.css('td a::attr(href)').extract_first()# print( a , href)name_list.append(a)href_list.append(href)print(name_list, href_list)
dct_app = {}
dct_app.update(name = name_list, href = href_list)
dct_app

保存成字典,最后,就是把所有的组织都爬下来,这个是看愿意爬多少了。还有就是上面请求的参数部分,参数里的组织的链接是遗传字符,而请求组织的ID确实一串数字,这一串数字在每一个组织的名字前的方括号里,因此,这个信息也是必须的。

爬虫 python 爬取php的网页,带有post参数的网页如何爬取相关推荐

  1. python网易云爬虫——实现网易云歌词的爬取(输入歌手的id,即可实现歌词的爬取)

    Python网易云爬虫--实现网易云歌词的爬取(输入歌手的id,即可实现歌词的爬取) 开始动手 打开网易云音乐,找到任意一位歌手的歌曲界面(我们以邓紫棋的<来自天堂的魔鬼>为例). 第一步 ...

  2. 爬虫python的爬取步骤-python爬虫实战之爬取京东商城实例教程

    前言 本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧. 主要工具 scrapy BeautifulSoup requests 分析步骤 1. ...

  3. 爬虫python代码广告_零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)...

    我是怎么想的,在新浪博客里写代码教程. 这篇博客的内容同步到了CSND博客中,那里不限制外链,也可以复制代码. http://blog.csdn.net/sinat_41310868/article/ ...

  4. Python—爬虫之Network,XHR,json 带参数请求数据(爬取歌单、歌词)

    Python-爬虫之Network,XHR,json & 带参数请求数据(爬取歌单.歌词) Network是什么,能做什么 XHR要如何请求 json格式的转换 带参数请求数据 修改请求头,便 ...

  5. python贴吧爬虫-Python 爬虫练习: 爬取百度贴吧中的图片

    背景:最近开始看一些Python爬虫相关的知识,就在网上找了一些简单已与练习的一些爬虫脚本 实现功能:1,读取用户想要爬取的贴吧 2,读取用户先要爬取某个贴吧的页数范围 3,爬取每个贴吧中用户输入的页 ...

  6. Python爬虫自学之第(③)篇——实战:requests+BeautifulSoup实现静态爬取

    题外话: <Pi Network 免费挖矿国外热门项目 一个π币大约值3元到10元>相信过去BTC的人,信不信未来的PI,了解一下,唯一一个高度与之持平的项目 前篇全片都是生硬的理论使用, ...

  7. Python爬虫:爬取instagram,破解js加密参数

    Python爬虫:爬取instagram,破解js加密参数 instagram 是国外非常流行的一款社交网站,类似的还有像facebook.twitter,这些社交网站对于掌握时事热点.电商数据来源和 ...

  8. pyquery获取不到网页完整源代码_爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网...

    爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网 前言 上篇文章 PyQuery (一) 回顾.今天来介绍具体 PyQuery 的使用方法. 穷游网目标与分析 开始之前,按照之前的套路一步 ...

  9. 爬虫python 新闻,Python爬虫实例--爬取人民网新闻

    其实我只是因为在那边评论区想评论,然后发现位置不够,所以才打算写这个博客的,然后具体的可以看我转载的文章,很详细,我这边只说一下关于txt转换为JSON格式的问题 第一次写,格式可能很乱,见谅一下 话 ...

最新文章

  1. C++运算符重载(10)
  2. SAP Commerce Cloud OCC User Role
  3. Java IO: 异常处理
  4. 福州大学c语言考试答案,C语言练习模拟考福州大学工程技术学院.doc
  5. 在ASP.NET 3.5中使用新的ListView控件(5)
  6. php单独使用blade模板引擎,laravel 基础教程 —— Blade 模板引擎
  7. delphi构造析构调用顺序
  8. React --获取服务器数据的两种方式(Axios和FetchJsonp)
  9. JspStudy套件在部署java项目时,如何去掉项目名进行访问网址问题
  10. unity自带录屏UnityRecorder
  11. 【ArcGIS Server】切片时C盘空间不足(本地缓存目录空间不足)
  12. spring boot + gateway + nacos 网关统一代理
  13. 计算机1教学,计算机一级教学大纲1
  14. 大饱眼福,52个数据可视化图表鉴赏
  15. 4.Vue指令(Directives)
  16. ZCU104开发板:开发板介绍1
  17. Qt图形视图框架详解-安晓辉-专题视频课程
  18. Android存放图片尺寸规范
  19. html仿游戏网站首页面
  20. php用360浏览器显示不正常,win10系统下360浏览器网页显示不正常的解决方法

热门文章

  1. lua如何打印行号_Lua 字符串处理
  2. 1.13 总结-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  3. STM32 基础系列教程 39 - Lwip_tftp
  4. kubernetes一次生产故障日记
  5. 最佳实践: 勿在 Servlet 中实现 SingleThreadModel
  6. 从淘宝 UWP 的新功能 -- 比较页面来谈谈 UWP 的窗口多开功能
  7. 访谈:摩尔定律后时代,看13位行业专家如何看量子计算机的未来?
  8. txt文件分解为固定条数的文件
  9. AsyncTask中各个函数详细的调用过程,初步实现异步任务
  10. RHEL5.4部署中央日志服务器之rsyslog+loganalyzer