python动态爬虫的实例分享

本文主要和大家分享python动态爬虫的实例分享,用Python实现常规的静态网页抓取时,往往是用urllib2来获取整个HTML页面,然后从HTML文件中逐字查找对应的关键字。如下所示:

#encoding=utf-8

登录后复制

import urllib2url="http://mm.taobao.com/json/request_top_list.htm?type=0&page=1"up=urllib2.urlopen(url)#打开目标页面,存入变量upcont=up.read()#从up中读入该HTML文件key1='<a href="http'"target"#设置关键字2pa=cont.find(key1)#找出关键字1的位置pt=cont.find(key2,pa)#找出关键字2的位置(从字1后面开始查找)urlx=cont[pa:pt]#得到关键字1与关键字2之间的内容(即想要的数据)print urlx

登录后复制

但是,在动态页面中,所显示的内容往往不是通过HTML页面呈现的,而是通过调用js等方式从数据库中得到数据,回显到网页上。

以发改委网站上的“备案信息”(http://beian.hndrc.gov.cn/)为例,要抓取此页面中的某些备案项目。例如“http://beian.hndrc.gov.cn/indexinvestment.jsp?id=162518”。

那么,在浏览器中打开此页面:

python动态爬虫的实例分享

相关信息都显示的很全了,但是如果按照之前的办法:

up=urllib2.urlopen(url)cont=up.read()

登录后复制

就抓取不到上述内容了。

我们查看一下这个页面对应的源码:

python动态爬虫的实例分享

由源码可以看出,这个《备案确认书》属于“填空”形式的,HTML提供文字模板,js根据不同的id提供不同的变量,“填入”到文字模板中,形成了一个具体的《备案确认书》。所以单纯抓取此HTML,只能得到一些文字模板,而无法得到具体内容。

立即学习“Python免费学习笔记(深入)”;

那么,该如何找到那些具体内容呢?可以利用Chrome的“开发者工具”来寻找谁是真正的内容提供者。

打开Chrome浏览器,按下键盘F12即可呼出此工具。如下图:

python动态爬虫的实例分享

此时选中“Network”标签,在地址栏中输入此页面“http://beian.hndrc.gov.cn/indexinvestment.jsp?id=162518”,浏览器会分析出此次响应的全过程,而红框内的文件,就是此次响应中,浏览器和web后端的所有通信。

python动态爬虫的实例分享

因为要获得不同企业对应的不同信息,那么浏览器发送给服务器的请求里面一定会有一个和当前企业id有关的参数。

那么,参数是多少呢?URL上有,是“jsp?id=162518”,问号表示要调用参数,后面跟的是id号即是被调用的参数。而通过对这几个文件的分析,很显然,企业信息存在于“indexinvestment.action”文件中。

python动态爬虫的实例分享

然而,双击打开此文件并不能获得企业信息,而是一堆代码。因为没有对应的参数为它指明要显示第几号的信息。如图:

python动态爬虫的实例分享

那么,应该如何将参数传递给它呢?这时我们仍旧看F12窗口:

python动态爬虫的实例分享

“Header”一栏中明确地显示出了此次响应的过程:

对目标URL,用POST的方式,传递了一个id为162518的参数。

我们先手工操作一下。js是如何调用参数的呢?对,上面说过:问号+变量名+等号+变量对应的数字。也就是说,向“http://beian.hndrc.gov.cn/indexinvestment.action”这个页面提交id为162518的参数时,应该在URL后面加上

“?id=162518”,即

“http://beian.hndrc.gov.cn/indexinvestment.action?id=162518”。

我们把这个URL粘贴到浏览器中来看:

python动态爬虫的实例分享

似乎有了点内容,可是都是乱码啊,怎么破?熟悉的朋友可能一眼就看出来,这是编码的问题。是因为响应回来的内容与浏览器默认的编码方式不同。只需要在Chrome右上角菜单——更多工具——编码——“自动检测”即可。(其实这是UTF-8的编码,而Chrome默认的是中文简体)。如下图:

python动态爬虫的实例分享

好了,真正的信息源已经被挖出,剩下的就是用Python处理这些页面上的字符串,然后剪切、拼接,重新组成新的《项目备案书》了。

再然后使用for、while等循环,批量获取这些《备案书》。

正如“不论是静态网页,动态网页,模拟登陆等,都要先分析、搞懂逻辑,再去写代码”所说,编程语言只是一个工具,重要的是解决问题的思路。有了思路,再寻找趁手的工具去解决,就OK了。

以上就是python动态爬虫的实例分享的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2265454.html

(0)
上一篇 2025年2月27日 08:43:06
下一篇 2025年2月27日 04:30:14

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Python解析JSON的实例分享

    本文主要和大家分享Python解析JSON的实例,主要以代码的形式和大家讲解,希望能帮助到大家 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。Python 使用 JSON 函…

    编程技术 2025年2月27日
    200
  • Python迭代模式实例详解

    本文主要和大家分享python迭代模式实例详解,主要以代码的形式和大家分享,希望能帮助到大家。 # -*- coding: utf-8 -*-“””Created on Thu Mar 29 11:43:05 2018@author: mz…

    编程技术 2025年2月27日
    200
  • python获取人脸的代码分享

    本文主要和大家分享python获取人脸的代码分享,希望大家根据本文能完成python获取人脸的功能。 usage:python   getface.py     src       out # -*- codeing: utf-8 -*-i…

    编程技术 2025年2月27日
    200
  • Python元组的知识详解

    本文主要和大家分享Python元组的知识详解没希望能帮助到大家。 1、Python的元组与列表类,不同之处:     a、元组的元素不能修改,列表可以。     b、元组使用小括号,列表使用方括号。 2、元组创建很简单,只需要在括号中添加元…

    编程技术 2025年2月27日
    200
  • Python实现管理站点的方法

    本文主要和大家分型分享Python实现管理站点的方法,主要以代码的方式和大家讲解,希望能帮助到大家。 一、django后台管理页面 Django内置了后台管理页面,只需要配置一下就可以使用,这免除了开发者在开发完站点之后还要去做一个后台管理…

    2025年2月27日
    200
  • 两个python实现切换功能

    本文主要和大家分享两个python实现切换功能,希望能帮助到大家。 # 安装好后,使用activate激活某个环境activate python34 # for windowssource activate python34 # for l…

    编程技术 2025年2月27日
    200
  • Python中常用列表方法分享

    本文主要和大家分享Python中常用列表方法,主要以代码的形式和大家讲解,希望能帮助到大家。  append(…)  在列表尾部添加元素 |      l.append(object) -> none — ap…

    编程技术 2025年2月27日
    200
  • python中常见字符串方法推荐

    本文主要和大家分享python中常见字符串方法推荐,主要以文字的方式和大家分享,希望能帮助到大家。 字符串.isalnum()  所有字符都是数字或者字母,为真返回 Ture,否则返回 False。 字符串.isalpha()   所有字符…

    编程技术 2025年2月27日
    200
  • Python中set()函数详解

    set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。希望能帮助到大家。 语法 set 语法: class set([iterable]) 登录后复制 参数说明: iterable – 可迭代…

    编程技术 2025年2月27日
    200
  • Python列表中函数&方法详解

    本文主要和大家分享python列表中函数&方法详解,希望能帮助到大家。 Python列表函数&方法 Python包含以下函数: 序号 函数 1cmp(list1, list2)比较两个列表的元素2len(list)列表元素个…

    编程技术 2025年2月27日
    200

发表回复

登录后才能评论