
php 循环抓取网页内容
最新版本:php 抓取网页数据
网站优化 • 优采云 发表了文章 • 0 个评论 • 75 次浏览 • 2022-09-22 18:10
无论您是想从链接中获取部分数据,还是获取 XML 文件并将其导入数据库,甚至只是获取网页的内容,Reactor cURL 都是一个强大的 PHP 库。本文主要介绍如何使用这个 PHP 库。启用 cURL 设置 首先,我们必须确保我们的 PHP 启用了这个库。您可以使用 php_info() 函数获取此信息。复制代码 代码如下: 如果您可以在网页上看到以下输出,则说明 cURL 库已启用。如果你看到它,那么你需要设置你的 PHP 并启用这个库。如果你是windows平台的话,很简单,你需要改一下你的php.ini文件
最新版本:php如何设置网页编码
如何在php中设置网页编码:首先打开php文件;然后将代码添加为 "header("Content-Type:text/html;charset=utf-8");";然后保存。
推荐:《PHP 视频教程》
PHP设置页面字符集utf-8
这需要使用 header() 函数。该函数的作用是设置响应消息的内容。
如果想让浏览器按照utf-8编码处理页面,需要在响应消息中设置content-type字段。
content-type,用于定义网络文件的类型和网页的编码,决定了文件接收者会以什么形式和编码方式读取文件。
在 PHP 文件中插入以下代码行,但注意在 header() 函数之前不要有任何输出。
header("Content-Type:text/html;charset=utf-8"); 查看全部
最新版本:php 抓取网页数据

无论您是想从链接中获取部分数据,还是获取 XML 文件并将其导入数据库,甚至只是获取网页的内容,Reactor cURL 都是一个强大的 PHP 库。本文主要介绍如何使用这个 PHP 库。启用 cURL 设置 首先,我们必须确保我们的 PHP 启用了这个库。您可以使用 php_info() 函数获取此信息。复制代码 代码如下: 如果您可以在网页上看到以下输出,则说明 cURL 库已启用。如果你看到它,那么你需要设置你的 PHP 并启用这个库。如果你是windows平台的话,很简单,你需要改一下你的php.ini文件

最新版本:php如何设置网页编码
如何在php中设置网页编码:首先打开php文件;然后将代码添加为 "header("Content-Type:text/html;charset=utf-8");";然后保存。
推荐:《PHP 视频教程》

PHP设置页面字符集utf-8
这需要使用 header() 函数。该函数的作用是设置响应消息的内容。
如果想让浏览器按照utf-8编码处理页面,需要在响应消息中设置content-type字段。

content-type,用于定义网络文件的类型和网页的编码,决定了文件接收者会以什么形式和编码方式读取文件。
在 PHP 文件中插入以下代码行,但注意在 header() 函数之前不要有任何输出。
header("Content-Type:text/html;charset=utf-8");
php循环抓取网页内容,同时抓取下载页面文件..
网站优化 • 优采云 发表了文章 • 0 个评论 • 104 次浏览 • 2022-09-14 23:04
php循环抓取网页内容,同时抓取下载页面文件.每抓取一部分数据,就对页面内容做一些修改,比如页面里面第一个数据是姓名,你可以将他改成男,或者其他,这样用户就可以再登录,每一页修改一个,就完成了一次循环。
做爬虫一般用php:首先说说哪些网站是可以使用php进行爬虫的吧?从php五十大框架中可以看出,php爬虫框架有这么几个:模拟登录系统smartscrapy、requests、beautifulsoup、tornado/flask、selenium、pyspider等;动态网页处理引擎base64、html+xmlencoder系列、spider系列等。
当然了,spider系列还有一个requirejs,每个php的工程师或者小白都有可能对这两个框架熟悉,但是base64+requirejs你可能有时候用不上,因为需要配置的路径可能会比较多。flask:php最大的客户端框架,开发效率比python,java这些语言要高,可以从flask中源码学习。
总体来说,php爬虫支持浏览器端和服务器端都可以爬虫。爬虫是否可以用python爬取?因为python一般用于做web网站的后端语言,而php是一种后端语言,所以如果你一定要用python做爬虫可以尝试python-scrapy/python-scrapy是php/python用php写的爬虫框架,里面提供了python和php两种语言版本的爬虫程序。
上面说了在外网爬虫,那么简单说说在本地爬虫的问题吧。要求new一个网页之后,使用postman,get请求一个网站之后,那么可以对所有的页面进行分析,比如标题,内容等等。当然,如果你不用这些的话,那么可以通过javascript在网页中插入特殊符号进行简单分析。如果说你要爬取的是html格式的内容,那么可以做一些解析。
通过抓包工具可以分析一些内容是html还是xml,或者是json。以上说的这些操作,都是自己做,你把任何有爬虫需求的页面或者是文章都写成脚本,然后运行爬虫,那么都可以从网上抓取到有效的内容。 查看全部
php循环抓取网页内容,同时抓取下载页面文件..
php循环抓取网页内容,同时抓取下载页面文件.每抓取一部分数据,就对页面内容做一些修改,比如页面里面第一个数据是姓名,你可以将他改成男,或者其他,这样用户就可以再登录,每一页修改一个,就完成了一次循环。

做爬虫一般用php:首先说说哪些网站是可以使用php进行爬虫的吧?从php五十大框架中可以看出,php爬虫框架有这么几个:模拟登录系统smartscrapy、requests、beautifulsoup、tornado/flask、selenium、pyspider等;动态网页处理引擎base64、html+xmlencoder系列、spider系列等。
当然了,spider系列还有一个requirejs,每个php的工程师或者小白都有可能对这两个框架熟悉,但是base64+requirejs你可能有时候用不上,因为需要配置的路径可能会比较多。flask:php最大的客户端框架,开发效率比python,java这些语言要高,可以从flask中源码学习。

总体来说,php爬虫支持浏览器端和服务器端都可以爬虫。爬虫是否可以用python爬取?因为python一般用于做web网站的后端语言,而php是一种后端语言,所以如果你一定要用python做爬虫可以尝试python-scrapy/python-scrapy是php/python用php写的爬虫框架,里面提供了python和php两种语言版本的爬虫程序。
上面说了在外网爬虫,那么简单说说在本地爬虫的问题吧。要求new一个网页之后,使用postman,get请求一个网站之后,那么可以对所有的页面进行分析,比如标题,内容等等。当然,如果你不用这些的话,那么可以通过javascript在网页中插入特殊符号进行简单分析。如果说你要爬取的是html格式的内容,那么可以做一些解析。
通过抓包工具可以分析一些内容是html还是xml,或者是json。以上说的这些操作,都是自己做,你把任何有爬虫需求的页面或者是文章都写成脚本,然后运行爬虫,那么都可以从网上抓取到有效的内容。
php循环抓取网页内容接入last_each条件的主要节点函数
网站优化 • 优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2022-09-03 07:01
php循环抓取网页内容,每一页内容接入last_each条件,当在循环中查看并执行last_each条件时跳转。解析出来是链接首页内容,然后分析出来的链接内容是动态内容的主要节点,因此可以通过$status,$last_each_example来得到数据后进行循环。
为何不直接用我曾经写过的一个mysql代码,按照你的说法,那个函数基本上是可以对所有页面的动态链接实现预处理。
mysqlphp函数举例1.subst函数在sql语句中检查空值并返回数组。这些空值在mysql查询中被单独列出来。例如:>selectexposure,count(exposure)fromwork_web_downloadforurl_list_basedate;--theurl_list_basedate()函数返回url_list_basedate数组,包括空值,例如:>selectexposure,count(exposure)fromwork_web_downloadwhereurl_list_basedate>cn;2.get和post方法都需要使用一个请求头(header)。
get方法允许从域中读取内容,或仅从页面获取内容。所有数据都会经过dns,然后调用xmlhttprequest请求xml对象,得到的xml对象会用链接形式访问服务器。3.cookie(),zookeeper,redis都会获取xml对象xmlhttprequest4.上面方法一般适用于存储一些关键字或关键字串;如:"1""2""3"中的第一个字符;以及等等,请参考配置文件,以及文档说明。 查看全部
php循环抓取网页内容接入last_each条件的主要节点函数
php循环抓取网页内容,每一页内容接入last_each条件,当在循环中查看并执行last_each条件时跳转。解析出来是链接首页内容,然后分析出来的链接内容是动态内容的主要节点,因此可以通过$status,$last_each_example来得到数据后进行循环。

为何不直接用我曾经写过的一个mysql代码,按照你的说法,那个函数基本上是可以对所有页面的动态链接实现预处理。

mysqlphp函数举例1.subst函数在sql语句中检查空值并返回数组。这些空值在mysql查询中被单独列出来。例如:>selectexposure,count(exposure)fromwork_web_downloadforurl_list_basedate;--theurl_list_basedate()函数返回url_list_basedate数组,包括空值,例如:>selectexposure,count(exposure)fromwork_web_downloadwhereurl_list_basedate>cn;2.get和post方法都需要使用一个请求头(header)。
get方法允许从域中读取内容,或仅从页面获取内容。所有数据都会经过dns,然后调用xmlhttprequest请求xml对象,得到的xml对象会用链接形式访问服务器。3.cookie(),zookeeper,redis都会获取xml对象xmlhttprequest4.上面方法一般适用于存储一些关键字或关键字串;如:"1""2""3"中的第一个字符;以及等等,请参考配置文件,以及文档说明。
php循环抓取网页内容的小技巧,首先你需要有一个php的环境
网站优化 • 优采云 发表了文章 • 0 个评论 • 56 次浏览 • 2022-08-29 00:00
php循环抓取网页内容的小技巧,首先你需要有一个php的环境。也许centos环境没有问题,我们假设你就是在windows环境下进行了phpcloud训练。为了让爬虫时间更短些,有人建议做一个循环抓取模拟框架,用它来训练你的php程序。robotstxt替换掉你用多余的头文件,不然你写的php里面所有需要用到的网页内容都会用到它,也会很繁琐。
实践中,我们已经能基本满足需求了。你下次使用robotstxt开始抓取的时候需要修改框架的开头设置,这时你需要在程序部分或框架部分填写robotstxt的地址。http方面的话,不推荐用服务器的登录名作为你要抓取的页面的密码,用password就可以。在txt编码时我们需要注意的是,http协议的编码强制性hh13!,请自行检查。
需要特别注意,http协议对头像进行了混淆,可能需要你额外创建一个头像文件,并且要将使用代理端口进行认证;需要特别注意的是,由于http协议的安全性,不能获取用户的浏览器内容,所以你需要将json格式的网页地址使用accesstoken进行加密。获取时候必须先查一下是否有已经存在的accesstoken。
如果你只是想获取网页内容,不需要认证,使用代理端口就行了。认证的话,对一些应用必须用token认证,比如你需要获取一个地址信息,而你又不希望浏览器对地址本身做任何内容的改动;有的时候也需要认证请求人,比如你需要看到认证时候的名字。有两种解决方案,一是用人工智能机器人(类似于机器人抓取网页),二是你自己写出这样的结构化语句。
pc环境采用的是标准http协议,这里是可以设置的;移动端是由浏览器完成的,移动端使用的是http1.1协议,http1.1的话会返回你格式化后的html页面,对于http1.1来说并不适用于移动端。 查看全部
php循环抓取网页内容的小技巧,首先你需要有一个php的环境
php循环抓取网页内容的小技巧,首先你需要有一个php的环境。也许centos环境没有问题,我们假设你就是在windows环境下进行了phpcloud训练。为了让爬虫时间更短些,有人建议做一个循环抓取模拟框架,用它来训练你的php程序。robotstxt替换掉你用多余的头文件,不然你写的php里面所有需要用到的网页内容都会用到它,也会很繁琐。

实践中,我们已经能基本满足需求了。你下次使用robotstxt开始抓取的时候需要修改框架的开头设置,这时你需要在程序部分或框架部分填写robotstxt的地址。http方面的话,不推荐用服务器的登录名作为你要抓取的页面的密码,用password就可以。在txt编码时我们需要注意的是,http协议的编码强制性hh13!,请自行检查。
需要特别注意,http协议对头像进行了混淆,可能需要你额外创建一个头像文件,并且要将使用代理端口进行认证;需要特别注意的是,由于http协议的安全性,不能获取用户的浏览器内容,所以你需要将json格式的网页地址使用accesstoken进行加密。获取时候必须先查一下是否有已经存在的accesstoken。

如果你只是想获取网页内容,不需要认证,使用代理端口就行了。认证的话,对一些应用必须用token认证,比如你需要获取一个地址信息,而你又不希望浏览器对地址本身做任何内容的改动;有的时候也需要认证请求人,比如你需要看到认证时候的名字。有两种解决方案,一是用人工智能机器人(类似于机器人抓取网页),二是你自己写出这样的结构化语句。
pc环境采用的是标准http协议,这里是可以设置的;移动端是由浏览器完成的,移动端使用的是http1.1协议,http1.1的话会返回你格式化后的html页面,对于http1.1来说并不适用于移动端。
php循环抓取网页内容的三种操作姿势抓取文本类网页
网站优化 • 优采云 发表了文章 • 0 个评论 • 55 次浏览 • 2022-08-18 20:01
php循环抓取网页内容的三种操作姿势关于php循环抓取的三种操作姿势抓取文本类网页可能比抓取代码网页要稍微慢一点,主要是因为文本网页内容较多,大部分的php代码都在/var/lib/php中,一些特殊的php代码并没有引入,为了解决这个问题,有时候就采用php循环抓取网页内容。下面就列举出几种常见的php循环抓取网页内容的姿势。
以下的代码在上海博图php循环框架,总共只有不到128个字符,所以可以分别抓取1,2,3var/lib/php/php_sprintf_cmd(){php_sprintf_cmd('switchtowhichcontentcanbewrited.',‘switch’);}php_sprintf_cmd('endoffile',‘file’);php_sprintf_cmd('destroyfilesusingphp$filename```);php_sprintf_cmd('filename:file',‘filename’);php_sprintf_cmd('stopfiles',‘stop’);//不知道什么原因,其实这个函数可以返回完整的php代码php_fd_cmd(‘clearfile’,‘clear’);php_fd_cmd(‘allfileson’,‘all’);php_fd_cmd(‘endoffile’,‘end’);php_sprintf_cmd(‘startfiles',‘start’);//因为php_sprintf_cmd返回的是php代码的页面地址,是一个文本php_sprintf_cmd(‘startfiles',‘start’);php_sprintf_cmd(‘beginfiles’,‘begin’);php_sprintf_cmd(‘content='{.$data}'```);php_sprintf_cmd(‘destoryfiles',‘destory’);php_sprintf_cmd(‘endfiles',‘end’);php_sprintf_cmd(‘filename:file’,‘filename’);php_sprintf_cmd(‘endfiles',‘end’);php_sprintf_cmd(‘lookatthenextfile’,‘lookat’);php_sprintf_cmd(‘aboutthenextfile’,‘about’);php_sprintf_cmd(‘ifcontentlayoutisgreaterthan’,‘greater’);php_sprintf_cmd(‘aboutthenextfile’,‘about’);php_sprintf_cmd(‘whichmatchesthenextfile’,‘which’);php_sprintf_cmd(‘thenmatchesthenextfile’,‘then’);php_sprintf_cmd(‘ifmatchesthesubnet’,‘if’);php_sprintf_cmd(‘parametersinline’,‘parameters’);php_sprintf_cmd(‘content’,‘parameters’);php_sprintf_cmd(‘d。 查看全部
php循环抓取网页内容的三种操作姿势抓取文本类网页

php循环抓取网页内容的三种操作姿势关于php循环抓取的三种操作姿势抓取文本类网页可能比抓取代码网页要稍微慢一点,主要是因为文本网页内容较多,大部分的php代码都在/var/lib/php中,一些特殊的php代码并没有引入,为了解决这个问题,有时候就采用php循环抓取网页内容。下面就列举出几种常见的php循环抓取网页内容的姿势。

以下的代码在上海博图php循环框架,总共只有不到128个字符,所以可以分别抓取1,2,3var/lib/php/php_sprintf_cmd(){php_sprintf_cmd('switchtowhichcontentcanbewrited.',‘switch’);}php_sprintf_cmd('endoffile',‘file’);php_sprintf_cmd('destroyfilesusingphp$filename```);php_sprintf_cmd('filename:file',‘filename’);php_sprintf_cmd('stopfiles',‘stop’);//不知道什么原因,其实这个函数可以返回完整的php代码php_fd_cmd(‘clearfile’,‘clear’);php_fd_cmd(‘allfileson’,‘all’);php_fd_cmd(‘endoffile’,‘end’);php_sprintf_cmd(‘startfiles',‘start’);//因为php_sprintf_cmd返回的是php代码的页面地址,是一个文本php_sprintf_cmd(‘startfiles',‘start’);php_sprintf_cmd(‘beginfiles’,‘begin’);php_sprintf_cmd(‘content='{.$data}'```);php_sprintf_cmd(‘destoryfiles',‘destory’);php_sprintf_cmd(‘endfiles',‘end’);php_sprintf_cmd(‘filename:file’,‘filename’);php_sprintf_cmd(‘endfiles',‘end’);php_sprintf_cmd(‘lookatthenextfile’,‘lookat’);php_sprintf_cmd(‘aboutthenextfile’,‘about’);php_sprintf_cmd(‘ifcontentlayoutisgreaterthan’,‘greater’);php_sprintf_cmd(‘aboutthenextfile’,‘about’);php_sprintf_cmd(‘whichmatchesthenextfile’,‘which’);php_sprintf_cmd(‘thenmatchesthenextfile’,‘then’);php_sprintf_cmd(‘ifmatchesthesubnet’,‘if’);php_sprintf_cmd(‘parametersinline’,‘parameters’);php_sprintf_cmd(‘content’,‘parameters’);php_sprintf_cmd(‘d。
php循环抓取网页内容并批量删除后缀,实现首页内容去重
网站优化 • 优采云 发表了文章 • 0 个评论 • 61 次浏览 • 2022-07-30 03:02
php循环抓取网页内容并批量删除后缀,实现首页内容去重,并在批量删除的后缀前加一个#。
这里面有很多技巧的,在我的一个回答里有,
php循环抓取网页内容并批量删除后缀,
使用firebug抓取网页内容之后用ff对网页进行div级别元素的查找,查找到div元素之后进行div级别上的缩小或者查找父级元素。获取innerhtml后进行合并处理。
任何把网页的php页面代码用正则表达式匹配下就可以了,比如我要找javascript,
php循环抓取网页内容并批量删除后缀,实现首页内容去重,并在批量删除的后缀前加一个#。php循环抓取网页内容并批量删除后缀,实现首页内容去重,并在批量删除的后缀前加一个#。#数字与字母的结合使用。同时,$_get[0]匹配后缀是#的网页。
php循环抓取网页内容并批量删除后缀,实现首页内容去重,并在批量删除的后缀前加一个#。#数字与字母的结合使用。同时,$_get[0]匹配后缀是#的网页。#数字与字母的结合使用。
第一,可以用php对url进行href引用, 查看全部
php循环抓取网页内容并批量删除后缀,实现首页内容去重
php循环抓取网页内容并批量删除后缀,实现首页内容去重,并在批量删除的后缀前加一个#。
这里面有很多技巧的,在我的一个回答里有,

php循环抓取网页内容并批量删除后缀,
使用firebug抓取网页内容之后用ff对网页进行div级别元素的查找,查找到div元素之后进行div级别上的缩小或者查找父级元素。获取innerhtml后进行合并处理。
任何把网页的php页面代码用正则表达式匹配下就可以了,比如我要找javascript,

php循环抓取网页内容并批量删除后缀,实现首页内容去重,并在批量删除的后缀前加一个#。php循环抓取网页内容并批量删除后缀,实现首页内容去重,并在批量删除的后缀前加一个#。#数字与字母的结合使用。同时,$_get[0]匹配后缀是#的网页。
php循环抓取网页内容并批量删除后缀,实现首页内容去重,并在批量删除的后缀前加一个#。#数字与字母的结合使用。同时,$_get[0]匹配后缀是#的网页。#数字与字母的结合使用。
第一,可以用php对url进行href引用,
php 循环抓取网页内容 DA Techie | 一条“蟒蛇”的故事
网站优化 • 优采云 发表了文章 • 0 个评论 • 92 次浏览 • 2022-07-18 02:19
哈哈
第一个故事
What is Python?
白
1
What?
今天给大家介绍的是一只快速灵活的大蟒蛇一种编程语言Python。
引用官方的说法,Python(意为“蟒蛇”)是一种“解释型的、面向对象的、带有动态语义的高级程序设计语言”。
正如我们熟悉的C、C++或是Java一样,这也是一门编程语言。我们知道世界上还有很多编程语言,例如正常的语言C#、Ruby、PHP,也有神奇的中文编程语言如易语言、中蟒(中文Python的意思)。
程序猿的创造力是无穷的,如果熟悉了编译原理,就可以自己创造属于自己的语言。正如Guido挚爱的电视剧是Monty Python’s Flying Circus,他给自己的语言命名为Python。
从Python出现到今天,它的框架已经确立。Python语言以对象为核心组织代码,支持多种编程范式,采用动态类型,自动进行内存回收。Python的生态系统开始拓展到第三方包。这些包,如Django、web.py、wxpython、numpy、matplotlib、PIL,将Python升级成了物种丰富的热带雨林。
Python有哪些用途呢?
①Web开发(如Django、YouTube……)
②视频游戏开发(如EVE)
③桌面GUI
④软件开发(如Blender)
⑤人工智能和深度学习(如TensorFlow、Caffe等架构。
Python如今竟大行其道?
2017年7月20日,IEEE Spectrum 发布了第四届顶级编程语言交互排行榜。Python 的排名从去年开始就借助人工智能持续上升,现在它已经成为了第一名。
第二个故事
为什么使用Python
优劣分析篇
输12
1
易于学习
如果你听到周围有人说“一夜速成”“三行代码”“最新操作” ,那么他十有八成是在学习Python,因为Python的易于掌握,许多非信息技术专业的学科直接以Python作为入门语言。
对于学习了C、C++或Java的同学来说,Python就更易于掌握,Python的数据类型、操作语句、对象的使用、模块(库,相当于C++中的头文件)和文件操作都有很大的共通性。作为一门解释型的语言,Python甚至看上去更像伪码,接近人的自然表达,因此很容易上手。
例如,文件的读取:
2
优雅简洁
Python的设计哲学是“优雅”、“明确”、“简单”。Python对于语句控制范围的方法是缩进,取代了大括号和分号(在C++里巧妙使用分号和大括号,可以创造混乱或奇妙的代码图案),因此,Python代码相对整洁美观。因为没有分号,换行时要在结尾加上\。
同时,Python中可以直接使用变量,无需进行声明。另外,Python中一切皆对象(恩?对象?目光突然闪烁),因此一切都可以赋值给变量,或作为参数传递给函数。因为Python具有对象回收机制,所以在编写代码的过程中无需考虑释放内存空间。
关于所说的缩进:
3
充足的模块
Python语言的核心十分强大,同时还提供了很多有趣的工具,这些就是Python的模块,最常用的是它的标准库(standard library),同时还有一些外来的模块。
而且任何Python程序都可以作为模块导入,所以不仅可以使用Python的自带电池,还可以自己发电。
在使用模块时,要使用import语句,同时注意import-only-once,否则容易出现两个模块相互导入,那么就会无限循环。
以下是一些常用模块:
4
机器学习方面
Python在科学运算,数据整理还有出图像结果的模块有:
numpy, pandas, matplotlib。
在机器学习方面,scikit learn 是汇集了众多机器学习方法的模块,它支持各种各样的机器学习方法。
在神经网络方面有著名的tensorflow等等,以及caffe架构。
(图源)
5
胶水语言
Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。
6
物联网
Python随着物联网技术的普及将会进一步发展,目前Rasp-berry Pi等新型平台已经将其作为开发基础。
7
一些不足之处
①速度:作为一门解释型语言,其速度往往低于编译语言。如果在大型工程中核心代码需要考虑效率的提高,可以用C语言改写,Python对此兼容性很好。
②移动端:Python在移动计算领域表现不佳,目前利用Python开发的移动应用非常罕见。
③其他:例如没有指针;属于动态类语言,设计上存在一些问题;……
输入
第三个故事
Python
让我们开始飞起来
这时候,如果你的手头有台电脑,那么就可以开始和世界打个招呼了。
1、搭建环境:
①Windows:
访问。点击download,下载Windows版本的安装文件。
②Linux/Unix/Mac OS X:
打开终端,输入python,按下回车
③希望使用新版本的Python:
访问,根据系统下载相应的安装软件。
2、hello world:
来和世界打个招呼吧!
>>>print "hello world"
3、我们还可以试试字符串操作:
这时我们不能直接在终端写程序,因为Python不会将多行的语句编译,于是我们需要使用sublime或者Python自带的IDLE。以MacOS为例,可以在终端输入IDLE打开代码编辑器。
我们可以通过input( )读取输入值。然后对字符串进行简单的操作。
例如我们可以拼接:
'The '+'man '+'who '+'changed '+'China.' = 'The man who changed China.'
我们还可以做乘法:
'six ' * 3 = 'six six six '
我们还可以进行分割:
a = 'The man'
a[0:2] = 'Th' a[4] = m
也可以进行查找:
'who' in 'The man who changed China.'=True.
4、来试一试字典Dict的操作
Python有独特的字典结构,通过哈希表(hash table)实现。相当于说,字典是一个数组,而数组的索引是键经过哈希函数处理后得到的。哈希函数的目的是使键均匀地分布在数组中。由于不同的键可能具有相同的哈希值,即可能出现冲突,高级的哈希函数能够使冲突数目最小化。
这个字典的实现可以通过:
a = {'年轻':'simple','鸭嘴笔':'engineer','教授':'report'}
修改元素:a['年轻'] = young
添加元素:a[new key] = value
第四个故事
关于Python的数据类型
和一些拓展的应用
输12
Python的数据类型有:
基本类型:
整数、浮点数、布尔型……
顾名思义,这是基本的、熟悉的类型。变量可以直接使用,不需要声明。例如:
a = 666
print a
结果: 666
集合类型:
列表(list)、元组(tuple)、字符串:这是属于序列的典型结构,他们包含的元素都进行了编号(从0开始)。其中,列表是可变的,元组和字符串是不可变的(注意,这和C、C++是不同的)。通过分片的操作可以访问序列的一部分。
例如:a = [1,2,3,4,5] 就是一个list。
a.insert(3,6) 就可以在第3个位置插入6。
a[2]=8 就可以对list元素进行修改。
字典(dict):当索引不好用时,我们可以自己对数据建立索引,例如前文的例子。
此外,还有集合(set)等类型。
拓展应用:
①图形用户界面:可以参看wxPython(可以跨平台)、Tkinter(TK平台)或PythonWin(只能在Windows使用)、PyQt(Qt平台)等平台。
②数据库支持:可以参看PySQLite。
③网络编程:可以使用socket模块建立小型的服务器和客户机。
④ Web方面:例如进行屏幕抓取,CGI和Web服务开发。屏幕抓取是程序下载网页并从中提取信息的过程,在这里如果我们需要从动态的网页提取信息,那么这项技术就会十分有用,比如说提取一下验证的二维码,那么……
例如,我需要一个网页的所有内容:
from urllib2 import urlopen
doc = urlopen("").read()
print doc
⑤深度学习方面:例如minst(数字图像识别)的代码。
可以参看:
输入
第五个故事
结束啦
此处只是
参考文献部分
参考文献:
《Python基础教程》【挪】Magnus Lie Hetland
Introduction to Python 【THU】地精工程师
更多内容可以在知乎和github上找到,感兴趣的同学可以到github上进行happy的探索。
THU自动化系学生科协(ASTA)信息推送平台,搭建科研之路,带你走向人生巅峰 查看全部
php 循环抓取网页内容 DA Techie | 一条“蟒蛇”的故事
哈哈
第一个故事
What is Python?
白
1
What?
今天给大家介绍的是一只快速灵活的大蟒蛇一种编程语言Python。
引用官方的说法,Python(意为“蟒蛇”)是一种“解释型的、面向对象的、带有动态语义的高级程序设计语言”。
正如我们熟悉的C、C++或是Java一样,这也是一门编程语言。我们知道世界上还有很多编程语言,例如正常的语言C#、Ruby、PHP,也有神奇的中文编程语言如易语言、中蟒(中文Python的意思)。
程序猿的创造力是无穷的,如果熟悉了编译原理,就可以自己创造属于自己的语言。正如Guido挚爱的电视剧是Monty Python’s Flying Circus,他给自己的语言命名为Python。
从Python出现到今天,它的框架已经确立。Python语言以对象为核心组织代码,支持多种编程范式,采用动态类型,自动进行内存回收。Python的生态系统开始拓展到第三方包。这些包,如Django、web.py、wxpython、numpy、matplotlib、PIL,将Python升级成了物种丰富的热带雨林。
Python有哪些用途呢?
①Web开发(如Django、YouTube……)
②视频游戏开发(如EVE)
③桌面GUI
④软件开发(如Blender)
⑤人工智能和深度学习(如TensorFlow、Caffe等架构。
Python如今竟大行其道?
2017年7月20日,IEEE Spectrum 发布了第四届顶级编程语言交互排行榜。Python 的排名从去年开始就借助人工智能持续上升,现在它已经成为了第一名。
第二个故事
为什么使用Python
优劣分析篇
输12
1
易于学习
如果你听到周围有人说“一夜速成”“三行代码”“最新操作” ,那么他十有八成是在学习Python,因为Python的易于掌握,许多非信息技术专业的学科直接以Python作为入门语言。
对于学习了C、C++或Java的同学来说,Python就更易于掌握,Python的数据类型、操作语句、对象的使用、模块(库,相当于C++中的头文件)和文件操作都有很大的共通性。作为一门解释型的语言,Python甚至看上去更像伪码,接近人的自然表达,因此很容易上手。
例如,文件的读取:
2
优雅简洁
Python的设计哲学是“优雅”、“明确”、“简单”。Python对于语句控制范围的方法是缩进,取代了大括号和分号(在C++里巧妙使用分号和大括号,可以创造混乱或奇妙的代码图案),因此,Python代码相对整洁美观。因为没有分号,换行时要在结尾加上\。
同时,Python中可以直接使用变量,无需进行声明。另外,Python中一切皆对象(恩?对象?目光突然闪烁),因此一切都可以赋值给变量,或作为参数传递给函数。因为Python具有对象回收机制,所以在编写代码的过程中无需考虑释放内存空间。
关于所说的缩进:
3
充足的模块
Python语言的核心十分强大,同时还提供了很多有趣的工具,这些就是Python的模块,最常用的是它的标准库(standard library),同时还有一些外来的模块。
而且任何Python程序都可以作为模块导入,所以不仅可以使用Python的自带电池,还可以自己发电。
在使用模块时,要使用import语句,同时注意import-only-once,否则容易出现两个模块相互导入,那么就会无限循环。
以下是一些常用模块:

4
机器学习方面
Python在科学运算,数据整理还有出图像结果的模块有:
numpy, pandas, matplotlib。
在机器学习方面,scikit learn 是汇集了众多机器学习方法的模块,它支持各种各样的机器学习方法。
在神经网络方面有著名的tensorflow等等,以及caffe架构。
(图源)
5
胶水语言
Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。
6
物联网
Python随着物联网技术的普及将会进一步发展,目前Rasp-berry Pi等新型平台已经将其作为开发基础。
7
一些不足之处
①速度:作为一门解释型语言,其速度往往低于编译语言。如果在大型工程中核心代码需要考虑效率的提高,可以用C语言改写,Python对此兼容性很好。
②移动端:Python在移动计算领域表现不佳,目前利用Python开发的移动应用非常罕见。
③其他:例如没有指针;属于动态类语言,设计上存在一些问题;……
输入
第三个故事
Python
让我们开始飞起来
这时候,如果你的手头有台电脑,那么就可以开始和世界打个招呼了。
1、搭建环境:
①Windows:
访问。点击download,下载Windows版本的安装文件。
②Linux/Unix/Mac OS X:
打开终端,输入python,按下回车
③希望使用新版本的Python:
访问,根据系统下载相应的安装软件。
2、hello world:
来和世界打个招呼吧!
>>>print "hello world"
3、我们还可以试试字符串操作:
这时我们不能直接在终端写程序,因为Python不会将多行的语句编译,于是我们需要使用sublime或者Python自带的IDLE。以MacOS为例,可以在终端输入IDLE打开代码编辑器。
我们可以通过input( )读取输入值。然后对字符串进行简单的操作。
例如我们可以拼接:
'The '+'man '+'who '+'changed '+'China.' = 'The man who changed China.'
我们还可以做乘法:
'six ' * 3 = 'six six six '
我们还可以进行分割:
a = 'The man'
a[0:2] = 'Th' a[4] = m
也可以进行查找:
'who' in 'The man who changed China.'=True.

4、来试一试字典Dict的操作
Python有独特的字典结构,通过哈希表(hash table)实现。相当于说,字典是一个数组,而数组的索引是键经过哈希函数处理后得到的。哈希函数的目的是使键均匀地分布在数组中。由于不同的键可能具有相同的哈希值,即可能出现冲突,高级的哈希函数能够使冲突数目最小化。
这个字典的实现可以通过:
a = {'年轻':'simple','鸭嘴笔':'engineer','教授':'report'}
修改元素:a['年轻'] = young
添加元素:a[new key] = value
第四个故事
关于Python的数据类型
和一些拓展的应用
输12
Python的数据类型有:
基本类型:
整数、浮点数、布尔型……
顾名思义,这是基本的、熟悉的类型。变量可以直接使用,不需要声明。例如:
a = 666
print a
结果: 666
集合类型:
列表(list)、元组(tuple)、字符串:这是属于序列的典型结构,他们包含的元素都进行了编号(从0开始)。其中,列表是可变的,元组和字符串是不可变的(注意,这和C、C++是不同的)。通过分片的操作可以访问序列的一部分。
例如:a = [1,2,3,4,5] 就是一个list。
a.insert(3,6) 就可以在第3个位置插入6。
a[2]=8 就可以对list元素进行修改。
字典(dict):当索引不好用时,我们可以自己对数据建立索引,例如前文的例子。
此外,还有集合(set)等类型。
拓展应用:
①图形用户界面:可以参看wxPython(可以跨平台)、Tkinter(TK平台)或PythonWin(只能在Windows使用)、PyQt(Qt平台)等平台。
②数据库支持:可以参看PySQLite。
③网络编程:可以使用socket模块建立小型的服务器和客户机。
④ Web方面:例如进行屏幕抓取,CGI和Web服务开发。屏幕抓取是程序下载网页并从中提取信息的过程,在这里如果我们需要从动态的网页提取信息,那么这项技术就会十分有用,比如说提取一下验证的二维码,那么……
例如,我需要一个网页的所有内容:
from urllib2 import urlopen
doc = urlopen("").read()
print doc
⑤深度学习方面:例如minst(数字图像识别)的代码。
可以参看:
输入
第五个故事
结束啦
此处只是
参考文献部分
参考文献:
《Python基础教程》【挪】Magnus Lie Hetland
Introduction to Python 【THU】地精工程师
更多内容可以在知乎和github上找到,感兴趣的同学可以到github上进行happy的探索。
THU自动化系学生科协(ASTA)信息推送平台,搭建科研之路,带你走向人生巅峰
php 循环抓取网页内容 [Python从零到壹] 十
网站优化 • 优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2022-07-18 02:18
欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。
Python系列整体框架包括基础语法10篇、网络爬虫30篇、可视化分析10篇、机器学习20篇、大数据分析20篇、图像识别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的关注、点赞和转发就是对秀璋最大的支持,知识无价人有情,希望我们都能在人生路上共同成长。
前一篇文章讲述了Selenium基础技术,涉及基础入门、元素定位、常用方法和属性、鼠标操作、键盘操作和导航控制。本文将结合具体实例进行深入地分析,通过三个基于Selenium技术的爬虫,爬取Wikipedia、百度百科和互动百科消息盒的例子,从实际应用出发来学习利用。基础性文章,希望对您有所帮助。
在线百科是基于Wiki技术的、动态的、免费的、可自由访问和编辑的多语言百科全书的Web2.0知识库系统。它是互联网中公开的、最大数量的用户生成的知识库,并且具有知识面覆盖度广、结构化程度高、信息更新速度快和开放性好等优势。其中被广泛使用的三大在线百科包括Wikipedia、百度百科和互动百科。
文章目录:
下载地址:
作者新开的“娜璋AI安全之家”将专注于Python和安全技术,主要分享Web渗透、系统安全、人工智能、大数据分析、图像识别、恶意代码检测、CVE复现、威胁情报分析等文章。虽然作者是一名技术小白,但会保证每一篇文章都会很用心地撰写,希望这些基础性文章对你有所帮助,在Python和安全路上与大家一起进步。
一.三大在线百科
随着互联网和大数据的飞速发展,我们需要从海量信息中挖掘出有价值的信息,而在收集这些海量信息过程中,通常都会涉及到底层数据的抓取构建工作,比如多源知识库融合、知识图谱构建、计算引擎建立等。其中具有代表性的知识图谱应用包括谷歌公司的Knowledge Graph、Facebook推出的实体搜索服务(Graph Search)、百度公司的百度知心、搜狗公司的搜狗知立方等。这些应用的技术可能会有所区别,但相同的是它们在构建过程中都利用了Wikipedia、百度百科、互动百科等在线百科知识。所以本章将教大家分别爬取这三大在线百科。
百科是指天文、地理、自然、人文、宗教、信仰、文学等全部学科的知识的总称,它可以是综合性的,包含所有领域的相关内容;也可以是面向专业性的。接下来将介绍常见的三大在线百科,它们是信息抽取研究的重要语料库之一。
1.Wikipedia
“Wikipedia is a free online encyclopedia with the aim to allow anyone to edit articles.” 这是Wikipedia的官方介绍。Wikipedia是一个基于维基技术的多语言百科全书协作计划,用多种语言编写的网络百科全书。Wikipedia一词取自于该网站核心技术“Wiki”以及具有百科全书之意的“encyclopedia”共同创造出来的新混成词“Wikipedia”,接受任何人编辑。
在所有在线百科中,Wikipedia知识准确性最好,结构化最好,但是Wikipedia本以英文知识为主,涉及的中文知识很少。在线百科页面通常包括:Title(标题)、Description(摘要描述)、InfoBox(消息盒)、Categories(实体类别)、Crosslingual Links(跨语言链接)等。Wikipedia中实体“黄果树瀑布”的中文页面信息如图1所示。
图1所示的Wikipedia信息主要包括:
2.百度百科
百度百科是百度公司推出的一部内容开放、自由的网络百科全书平台。截至2017年4月,百度百科已经收录了超过1432万的词条,参与词条编辑的网友超过610万人,几乎涵盖了所有已知的知识领域。
百度百科旨在创造一个涵盖各领域知识的中文信息收集平台。百度百科强调用户的参与和奉献精神,充分调动互联网用户的力量,汇聚广大用户的头脑智慧,积极进行交流和分享。同时,百度百科实现与百度搜索、百度知道的结合,从不同的层次上满足用户对信息的需求。
与Wikipedia相比,百度百科所包含中文知识最多最广,但是准确性相对较差。百度百科页面也包括:Title(标题)、Description(摘要描述)、InfoBox(消息盒)、Categories(实体类别)、Crosslingual Links(跨语言链接)等。图2为百度百科“Python”网页知识,该网页的消息盒为中间部分,采用键值对(Key-value Pair)的形式,比如“外文名”对应的值为“Python”,“经典教材”对应的值为“Head First Python”等。
3.互动百科
互动百科()是中文百科网站的开拓与领军者,致力于为数亿中文用户免费提供海量、全面、及时的百科信息,并通过全新的维基平台不断改善用户对信息的创作、获取和共享方式。截止到2016年年底,互动百科已经发展成为由超过1100万用户共同打造的拥有1600万词条、2000万张图片、5万个微百科的百科网站,新媒体覆盖人群1000余万人,手机APP用户超2000万。
相对于百度百科而言,互动百科的准确性更高、结构化更好,在专业领域上知识质量较高,故研究者通常会选择互动百科作为主要语料之一。图3显示的是互动百科的首页。
互动百科的信息分为两种形式存储,一种是百科中结构化的信息盒,另一种是百科正文的自由文本。对于百科中的词条文章来说,只有少数词条含有结构化信息盒,但所有词条均含有自由文本。信息盒是采用结构化方式展现词条信息的形式,一个典型的百科信息盒展示例子如图4,显示了Python的InfoBox信息,采用键值对的形式呈现,比如Python的“设计人”为“Guido van Rossum”。
下面分别讲解Selenium技术爬取三大在线百科的消息盒,三大百科的分析方法略有不同。Wikipedia先从列表页面分别获取20国集团(简称G20)各国家的链接,再依次进行网页分析和信息爬取;百度百科调用Selenium自动操作,输入各种编程语言名,再进行访问定位爬取;互动百科采用分析网页的链接url,再去到不同的景点进行分析及信息抓取。
二.Selenium爬取百度百科知识
百度百科作为最大的中文在线百科或中文知识平台,它提供了各行各业的知识,可以供研究者从事各方面的研究。虽然词条的准确率不是最好,但依然可以为从事数据挖掘、知识图谱、自然语言处理、大数据等领域的学者提供很好的知识平台。
1.网页分析
本小节将详细讲解Selenium爬取百度百科消息盒的例子,爬取的主题为10个国家5A级景区,其中景区的名单定义在TXT文件中,然后再定向爬取它们的消息盒信息。其中网页分析的核心步骤如下:
(1) 调用Selenium自动搜索百科关键词
首先,调用Selenium技术访问百度百科首页,网址为:
图5为百度百科首页,其顶部为搜索框,输入相关词条如“故宫”,点击“进入词条”,可以得到故宫词条的详细信息。
然后,在浏览器鼠标选中“进入词条”按钮,右键鼠标点击“审查元素”,可以查看该按钮对应的HTML源代码,如图6所示。注意,不同浏览器查看网页控件或内容对应源代码的称呼是不同的,图中使用的是360安全浏览器,称呼为“审查元素”,而Chrome浏览器称为“检查”,QQ浏览器称为“检查”等。
“进入词条”对应的HTML核心代码如下所示:
调用Selenium函数可以获取输入框input控件。
然后自动输入“故宫”,获取按钮“进入词条”并自动点击,这里采用的方法是在键盘上输入回车键即可访问“故宫”界面,核心代码如下所示:
driver.get("http://baike.baidu.com/") <br />elem_inp=driver.find_element_by_xpath("//form[@id='searchForm']/input") <br />elem_inp.send_keys(name) <br />elem_inp.send_keys(Keys.RETURN) <br />
(2) 调用Selenium访问“故宫”页面并定位消息盒
第一步完成后,进入“故宫”页面然后找到中间消息盒InfoBox部分,右键鼠标并点击“审查元素”,返回结果如图7所示。
消息盒核心代码如下:
消息盒主要采用的形式存储,详细概括了“故宫”实体的信息。例如,属性“中文名称”对应值为“北京故宫”,属性“外文名称”对应值为“Fobidden City”。对应的HTML部分源代码如下。
整个消息盒位于< div class=“basic-info J-basic-info cmn-clearfix” >标签中,接下来是< dl >、< dt >、< dd >一组合HTML标签,其中消息盒div布局共包括两个< dl >…布局,一个是记录消息盒左边部分的内容,另一个< dl >记录了消息盒右部分的内容,每个< dl >标签里再定义属性和属性值,如图8所示。
注意:使用dt、dd最外层必须使用dl包裹,< dl >标签定义了定义列表(Definition List),< dt >标签定义列表中的项目,< dd >标签描述列表中的项目,此组合标签叫做表格标签,与table表格组合标签类似。
接下来调用Selenium扩展包的find_elements_by_xpath()函数分别定位属性和属性值,该函数返回多个属性及属性值集合,再通过for循环输出已定位的多个元素值。代码如下:
elem_name=driver.find_elements_by_xpath("//div[@class='basic-info J-basic-info cmn-clearfix']/dl/dt") <br />elem_value=driver.find_elements_by_xpath("//div[@class='basic-info J-basic-info cmn-clearfix']/dl/dd")<br />for e in elem_name:<br /> print(e.text)<br />for e in elem_value:<br /> print(e.text)<br />
此时,使用Selenium技术爬取百度百科国家5A级景区的分析方法就讲解完了,下面是这部分完整的代码及一些难点。
2.代码实现
注意,接下来我们尝试定义多个Python文件相互调用实现爬虫功能。完整代码包括两个文件,即:
test10_01_baidu.py
# -*- coding: utf-8 -*-<br />"""<br />test10_01_baidu.py<br /> 定义了主函数main并调用getinfo.py文件<br />By:Eastmount CSDN 2021-06-23<br />"""<br />import codecs <br />import getinfo #引用模块<br /><br />#主函数 <br />def main():<br /> #文件读取景点信息 <br /> source = open('data.txt','r',encoding='utf-8') <br /> for name in source: <br /> print(name)<br /> getinfo.getInfobox(name) <br /> print('End Read Files!') <br /> source.close()<br />if __name__ == '__main__':<br /> main()<br />
在代码中调用“import getinfo”代码导入getinfo.py文件,导入之后就可以在main函数中调用getinfo.py文件中的函数和属性,接着我们调用getinfo.py文件中的getInfobox()函数,执行爬取消息盒的操作。
getinfo.py
# coding=utf-8<br /><br />"""<br />getinfo.py:获取信息<br />By:Eastmount CSDN 2021-06-23<br />"""<br />import os <br />import codecs<br />import time<br />from selenium import webdriver <br />from selenium.webdriver.common.keys import Keys<br /><br />#getInfobox函数: 获取国家5A级景区消息盒 <br />def getInfobox(name): <br /> try: <br /> #访问百度百科并自动搜索<br /> driver = webdriver.Firefox() <br /> driver.get("http://baike.baidu.com/") <br /> elem_inp = driver.find_element_by_xpath("//form[@id='searchForm']/input") <br /> elem_inp.send_keys(name) <br /> elem_inp.send_keys(Keys.RETURN) <br /> time.sleep(1)<br /> print(driver.current_url)<br /> print(driver.title)<br /> <br /> #爬取消息盒InfoBox内容<br /> elem_name=driver.find_elements_by_xpath("//div[@class='basic-info J-basic-info cmn-clearfix']/dl/dt") <br /> elem_value=driver.find_elements_by_xpath("//div[@class='basic-info J-basic-info cmn-clearfix']/dl/dd")<br /> """<br /> for e in elem_name:<br /> print(e.text)<br /> for e in elem_value:<br /> print(e.text)<br /> """<br /><br /> #构建字段成对输出<br /> elem_dic = dict(zip(elem_name,elem_value)) <br /> for key in elem_dic: <br /> print(key.text,elem_dic[key].text)<br /> time.sleep(5)<br /> return<br /> <br /> except Exception as e: <br /> print("Error: ",e)<br /> finally: <br /> print('\n')<br /> driver.close() <br /><br />
比如爬取过程Firefox浏览器会自动搜索“故宫”页面,如下图所示:
最终输出结果如下图所示:
内容如下:
https://baike.baidu.com/item/北京故宫<br />北京故宫_百度百科<br />https://baike.baidu.com/item/% ... %3Bbr />北京故宫_百度百科<br />中文名 北京故宫<br />地理位置 北京市东城区景山前街4号 [91] <br />开放时间 4.1-10.31:08:20-17:00(停止售票16:00,最晚入园16:10) ;11.1-3.31:08:30-16:30(停止售票15:30,最晚入园15:40) ;除法定节假日外每周一闭馆 [6] [91] <br />景点级别 AAAAA级<br />门票价格 60元旺季/40元淡季 [7] <br />占地面积 72万平方米(建筑面积约15万平方米)<br />保护级别 世界文化遗产;第一批全国重点文物保护单位<br />批准单位 联合国教科文组织;中华人民共和国国务院<br />批 号 III-100<br />主要藏品 清明上河图、乾隆款金瓯永固杯、酗亚方樽<br />别 名 紫禁城 [8] <br />官方电话 010-85007057 [92]<br />
Python运行结果如下所示,其中data.txt文件中包括了常见的几个景点。
上述代码属性和属性值通过字典进行组合输出的,核心代码如下:
elem_dic = dict(zip(elem_name,elem_value)) <br />for key in elem_dic: <br /> print(key.text,elem_dic[key].text)<br />
同时,读者可以尝试调用本地的无界面浏览器PhantomJS进行爬取的,调用方法如下:
webdriver.PhantomJS(executable_path="C:\...\phantomjs.exe")<br />
课程作业:
三.Selenium爬取Wikipedia
在线百科是互联网中存在公开的最大数据量的用户生成数据集合,这些数据具有一定的结构,属于半结构化数据,最知名的三大在线百科包括Wikipedia 、百度百科、互动百科。首先,作者将介绍Selenium爬取Wikipedia的实例。
1.网页分析
第一个实例作者将详细讲解Selenium爬取20国家集团(G20)的第一段摘要信息,具体步骤如下:
(1) 从G20列表页面中获取各国超链接
20国集团列表网址如下,Wikipedia采用国家英文单词首写字母进行排序,比如“Japan”、“Italy”、“Brazil”等,每个国家都采用超链接的形式进行跳转。
首先,需要获取20个国家的超链接,然后再去到具体的页面进行爬取。选中一个国家的超链接,比如“China”,右键鼠标并点击“检查”按钮,可以获取对应的HTML源代码,如下所示。
其中超链接位于< div class=“mw-category-group” >布局的< ul >< li >< a >节点下,对应代码:
调用Selenium的find_elements_by_xpath()函数获取节点class属性为“mw-category-group”的超链接,它将返回多个元素。定位超链接的核心代码如下:
driver.get("https://en.wikipedia.org/wiki/ ... 6quot;) <br />elem=driver.find_elements_by_xpath("//div[@class='mw-category-group']/ul/li/a") <br />for e in elem:<br /> print(e.text)<br /> print(e.get_attribute("href"))<br />
函数find_elements_by_xpth()先解析HTML的DOM树形结构并定位到指定节点,并获取其元素。然后定义一个for循环,依次获取节点的内容和href属性,其中e.text表示节点的内容,例如下面节点之间的内容为China。
China<br />
同时,e.get_attribute(“href”)表示获取节点属性href对应的属性值,即“/wiki/China”,同理,e.get_attribute(“title”)可以获取标题title属性,得到值“China”。
此时将获取的超链接存储至变量中如下图,再依次定位到每个国家并获取所需内容。
(2) 调用Selenium定位并爬取各国页面消息盒
接下来开始访问具体的页面,比如中国:
如图所示,可以看到页面的URL、标题、摘要、内容、消息盒等,其中消息盒在途中右部分,包括国家全称、位置等。
下面采用对的形式进行描述,很简明精准地概括了一个网页实体,比如、等信息。通常获取这些信息之后,需要进行预处理操作,之后才能进行数据分析,后面章节将详细讲解。
访问到每个国家的页面后,接下来需要获取每个国家的第一段介绍,本小节讲解的爬虫内容可能比较简单,但是讲解的方法非常重要,包括如何定位节点及爬取知识。详情页面对应的HTML核心部分代码如下:
浏览器审查元素方法如图所示。
正文内容位于属性class为“mw-parser-output”的< div >节点下。在HTML中,< P >标签表示段落,通常用于标识正文,< b >标签表示加粗。获取第一段内容即定位第一个< p >节点即可。核心代码如下:
driver.get("https://en.wikipedia.org/wiki/China") <br />elem=driver.find_element_by_xpath("//div[@class='mw-parser-output']/p[2]").text <br />print elem<br />
注意,正文第一段内容位于第二个< p >段落,故获取p[2]即可。同时,如果读者想从源代码中获取消息盒,则需获取消息盒的位置并抓取数据,消息盒(InfoBox)内容在HTML对应为如下节点,记录了网页实体的核心信息。
...<br />
2.代码实现
完整代码参考文件test10_02.py,如下所示:
# coding=utf-8<br />#By:Eastmount CSDN 2021-06-23<br />import time <br />import re <br />import os <br />from selenium import webdriver <br />from selenium.webdriver.common.keys import Keys <br /><br />driver = webdriver.Firefox() <br />driver.get("https://en.wikipedia.org/wiki/ ... 6quot;) <br />elem = driver.find_elements_by_xpath("//div[@class='mw-category-group']/ul/li/a")<br />name = [] #国家名<br />urls = [] #国家超链接<br /><br />#爬取链接<br />for e in elem:<br /> print(e.text)<br /> print(e.get_attribute("href"))<br /> name.append(e.text)<br /> urls.append(e.get_attribute("href"))<br />print(name)<br />print(urls)<br /><br />#爬取内容<br />for url in urls:<br /> driver.get(url) <br /> elem = driver.find_element_by_xpath("//div[@class='mw-parser-output']/p[1]").text <br /> print(elem)<br />
其中,爬取的信息如图所示。
PS:该部分大家简单尝试即可,更推荐爬取百度百科、互动百科和搜狗百科。
四.Selenium爬取互动百科
几年过去,互动百科变成了快懂百科,但还好网页结构未变化。
1.网页分析
目前,在线百科已经发展为众多科研工作者从事语义分析、知识图谱构建、自然语言处理、搜索引擎和人工智能等领域的重要语料来源。互动百科作为最热门的在线百科之一,为研究者提供了强大的语料支持。
本小节将讲解一个爬取互动百科最热门的十个编程语言页面的摘要信息,通过该实例加深读者使用Selenium爬虫技术的印象,更加深入地剖析网络数据爬取的分析技巧。不同于Wikipedia先爬取词条列表超链接再爬取所需信息、百度百科输入词条进入相关页面再进行定向爬取,互动百科采用的方法是:
由于互动百科搜索不同词条对应的超链接是存在一定规律的,即采用“常用url+搜索的词条名”方式进行跳转,这里我们通过该方法设置不同的词条网页。具体步骤如下:
(1) 调用Selenium分析URL并搜索互动百科词条
我们首先分析互动百科搜索词条的一些规则,比如搜索人物“贵州”,对应的超链为:
对应页面如图所示,从图中可以看到,顶部的超链接URL、词条为“贵州”、第一段为“贵州”的摘要信息、“右边为对应的图片等信息。
同理,搜索编程语言“Python”,对应的超链接为:
可以得出一个简单的规则,即:
可以搜索对应的知识,如编程语言“Java”对应为:
(2) 访问热门Top10编程语言并爬取摘要
2016年,Github根据各语言过去12个月提交的PR数量进行排名,得出最受欢迎的Top10编程语言分别是:JavaScript、Java、Python、Ruby、PHP、C++、CSS、C#、C和GO语言。
然后,需要分布获取这十门语言的摘要信息。在浏览器中选中摘要部分,右键鼠标点击“审查元素”返回结果如图所示,可以在底部看到摘要部分对应的HTML源代码。
新版本的“快懂百科”内容如下图所示:
“Java”词条摘要部分对应的HTML核心代码如下所示:
调用Selenium的find_element_by_xpath()函数,可以获取摘要段落信息,核心代码如下。
driver = webdriver.Firefox()<br />url = "http://www.baike.com/wiki/" + name<br />driver.get(url)<br />elem = driver.find_element_by_xpath("//div[@class='summary']/div/span") <br />print(elem.text)<br />
这段代码的基本步骤是:
下面是完整的代码及详细讲解。
2.代码实现
完整代码为blog10_03.py如下所示,主函数main()中循环调用getgetAbstract()函数爬取Top10编程语言的摘要信息。
# coding=utf-8 <br />#By:Eastmount CSDN 2021-06-23 <br />import os <br />import codecs<br />from selenium import webdriver <br />from selenium.webdriver.common.keys import Keys <br /><br />driver = webdriver.Firefox()<br /><br />#获取摘要信息<br />def getAbstract(name): <br /> try:<br /> #新建文件夹及文件<br /> basePathDirectory = "Hudong_Coding" <br /> if not os.path.exists(basePathDirectory): <br /> os.makedirs(basePathDirectory) <br /> baiduFile = os.path.join(basePathDirectory,"HudongSpider.txt")<br /> #文件不存在新建,存在则追加写入<br /> if not os.path.exists(baiduFile): <br /> info = codecs.open(baiduFile,'w','utf-8') <br /> else: <br /> info = codecs.open(baiduFile,'a','utf-8') <br /><br /> url = "http://www.baike.com/wiki/" + name<br /> print(url)<br /> driver.get(url) <br /> elem = driver.find_elements_by_xpath("//div[@class='summary']/div/span")<br /> content = ""<br /> for e in elem:<br /> content += e.text<br /> print(content)<br /> info.writelines(content+'\r\n') <br /> <br /> except Exception as e: <br /> print("Error: ",e) <br /> finally: <br /> print('\n') <br /> info.write('\r\n') <br /> <br />#主函数 <br />def main():<br /> languages = ["JavaScript", "Java", "Python", "Ruby", "PHP",<br /> "C++", "CSS", "C#", "C", "GO"]<br /> print('开始爬取')<br /> for lg in languages: <br /> print(lg)<br /> getAbstract(lg) <br /> print('结束爬取')<br /><br />if __name__ == '__main__':<br /> main() <br />
其中“JavaScript”和“Java”编程语言的抓取结果如图所示,该段代码爬取了热门十门语言在互动百科中的摘要信息。
程序成功抓取了各个编程语言的摘要信息,如下图所示:
同时将数据存储至本地TXT文件中,这将有效为NLP和文本挖掘进行一步分析提供支撑。
写到这里,几种常见的百科数据抓取方法就介绍完毕了,希望您喜欢。
五.总结
在线百科被广泛应用于科研工作、知识图谱和搜索引擎构建、大小型公司数据集成、Web2.0知识库系统中,由于其公开、动态、可自由访问和编辑、拥有多语言版本等特点,它深受科研工作者和公司开发人员的喜爱,常见的在线百科包括Wikipedia、百度百科和互动百科等。
本文结合Selenium技术分别爬取了Wikipedia的段落内容、百度百科的消息盒和互动百科的摘要信息,并采用了三种分析方法,希望读者通过该章节的案例掌握Selenium技术爬取网页的方法。
Selenium用得更广泛的领域是自动化测试,它直接运行在浏览器中(如Firefox、Chrome、IE等),就像真实用户操作一样,对开发的网页进行各式各样的测试,它更是自动化测试方向的必备工具。希望读者能掌握这种技术的爬取方法,尤其是目标网页需要验证登录等情形。
该系列所有代码下载地址:
感谢在求学路上的同行者,不负遇见,勿忘初心。这周的留言感慨~
(By:娜璋 2021-08-20夜于景怡)
前文赏析:
第一部分 基础语法
第二部分 网络爬虫
参考文献 查看全部
php 循环抓取网页内容 [Python从零到壹] 十
欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。
Python系列整体框架包括基础语法10篇、网络爬虫30篇、可视化分析10篇、机器学习20篇、大数据分析20篇、图像识别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的关注、点赞和转发就是对秀璋最大的支持,知识无价人有情,希望我们都能在人生路上共同成长。
前一篇文章讲述了Selenium基础技术,涉及基础入门、元素定位、常用方法和属性、鼠标操作、键盘操作和导航控制。本文将结合具体实例进行深入地分析,通过三个基于Selenium技术的爬虫,爬取Wikipedia、百度百科和互动百科消息盒的例子,从实际应用出发来学习利用。基础性文章,希望对您有所帮助。
在线百科是基于Wiki技术的、动态的、免费的、可自由访问和编辑的多语言百科全书的Web2.0知识库系统。它是互联网中公开的、最大数量的用户生成的知识库,并且具有知识面覆盖度广、结构化程度高、信息更新速度快和开放性好等优势。其中被广泛使用的三大在线百科包括Wikipedia、百度百科和互动百科。
文章目录:
下载地址:
作者新开的“娜璋AI安全之家”将专注于Python和安全技术,主要分享Web渗透、系统安全、人工智能、大数据分析、图像识别、恶意代码检测、CVE复现、威胁情报分析等文章。虽然作者是一名技术小白,但会保证每一篇文章都会很用心地撰写,希望这些基础性文章对你有所帮助,在Python和安全路上与大家一起进步。
一.三大在线百科
随着互联网和大数据的飞速发展,我们需要从海量信息中挖掘出有价值的信息,而在收集这些海量信息过程中,通常都会涉及到底层数据的抓取构建工作,比如多源知识库融合、知识图谱构建、计算引擎建立等。其中具有代表性的知识图谱应用包括谷歌公司的Knowledge Graph、Facebook推出的实体搜索服务(Graph Search)、百度公司的百度知心、搜狗公司的搜狗知立方等。这些应用的技术可能会有所区别,但相同的是它们在构建过程中都利用了Wikipedia、百度百科、互动百科等在线百科知识。所以本章将教大家分别爬取这三大在线百科。
百科是指天文、地理、自然、人文、宗教、信仰、文学等全部学科的知识的总称,它可以是综合性的,包含所有领域的相关内容;也可以是面向专业性的。接下来将介绍常见的三大在线百科,它们是信息抽取研究的重要语料库之一。
1.Wikipedia
“Wikipedia is a free online encyclopedia with the aim to allow anyone to edit articles.” 这是Wikipedia的官方介绍。Wikipedia是一个基于维基技术的多语言百科全书协作计划,用多种语言编写的网络百科全书。Wikipedia一词取自于该网站核心技术“Wiki”以及具有百科全书之意的“encyclopedia”共同创造出来的新混成词“Wikipedia”,接受任何人编辑。
在所有在线百科中,Wikipedia知识准确性最好,结构化最好,但是Wikipedia本以英文知识为主,涉及的中文知识很少。在线百科页面通常包括:Title(标题)、Description(摘要描述)、InfoBox(消息盒)、Categories(实体类别)、Crosslingual Links(跨语言链接)等。Wikipedia中实体“黄果树瀑布”的中文页面信息如图1所示。
图1所示的Wikipedia信息主要包括:
2.百度百科
百度百科是百度公司推出的一部内容开放、自由的网络百科全书平台。截至2017年4月,百度百科已经收录了超过1432万的词条,参与词条编辑的网友超过610万人,几乎涵盖了所有已知的知识领域。
百度百科旨在创造一个涵盖各领域知识的中文信息收集平台。百度百科强调用户的参与和奉献精神,充分调动互联网用户的力量,汇聚广大用户的头脑智慧,积极进行交流和分享。同时,百度百科实现与百度搜索、百度知道的结合,从不同的层次上满足用户对信息的需求。
与Wikipedia相比,百度百科所包含中文知识最多最广,但是准确性相对较差。百度百科页面也包括:Title(标题)、Description(摘要描述)、InfoBox(消息盒)、Categories(实体类别)、Crosslingual Links(跨语言链接)等。图2为百度百科“Python”网页知识,该网页的消息盒为中间部分,采用键值对(Key-value Pair)的形式,比如“外文名”对应的值为“Python”,“经典教材”对应的值为“Head First Python”等。
3.互动百科
互动百科()是中文百科网站的开拓与领军者,致力于为数亿中文用户免费提供海量、全面、及时的百科信息,并通过全新的维基平台不断改善用户对信息的创作、获取和共享方式。截止到2016年年底,互动百科已经发展成为由超过1100万用户共同打造的拥有1600万词条、2000万张图片、5万个微百科的百科网站,新媒体覆盖人群1000余万人,手机APP用户超2000万。
相对于百度百科而言,互动百科的准确性更高、结构化更好,在专业领域上知识质量较高,故研究者通常会选择互动百科作为主要语料之一。图3显示的是互动百科的首页。
互动百科的信息分为两种形式存储,一种是百科中结构化的信息盒,另一种是百科正文的自由文本。对于百科中的词条文章来说,只有少数词条含有结构化信息盒,但所有词条均含有自由文本。信息盒是采用结构化方式展现词条信息的形式,一个典型的百科信息盒展示例子如图4,显示了Python的InfoBox信息,采用键值对的形式呈现,比如Python的“设计人”为“Guido van Rossum”。
下面分别讲解Selenium技术爬取三大在线百科的消息盒,三大百科的分析方法略有不同。Wikipedia先从列表页面分别获取20国集团(简称G20)各国家的链接,再依次进行网页分析和信息爬取;百度百科调用Selenium自动操作,输入各种编程语言名,再进行访问定位爬取;互动百科采用分析网页的链接url,再去到不同的景点进行分析及信息抓取。
二.Selenium爬取百度百科知识
百度百科作为最大的中文在线百科或中文知识平台,它提供了各行各业的知识,可以供研究者从事各方面的研究。虽然词条的准确率不是最好,但依然可以为从事数据挖掘、知识图谱、自然语言处理、大数据等领域的学者提供很好的知识平台。
1.网页分析
本小节将详细讲解Selenium爬取百度百科消息盒的例子,爬取的主题为10个国家5A级景区,其中景区的名单定义在TXT文件中,然后再定向爬取它们的消息盒信息。其中网页分析的核心步骤如下:
(1) 调用Selenium自动搜索百科关键词
首先,调用Selenium技术访问百度百科首页,网址为:
图5为百度百科首页,其顶部为搜索框,输入相关词条如“故宫”,点击“进入词条”,可以得到故宫词条的详细信息。
然后,在浏览器鼠标选中“进入词条”按钮,右键鼠标点击“审查元素”,可以查看该按钮对应的HTML源代码,如图6所示。注意,不同浏览器查看网页控件或内容对应源代码的称呼是不同的,图中使用的是360安全浏览器,称呼为“审查元素”,而Chrome浏览器称为“检查”,QQ浏览器称为“检查”等。
“进入词条”对应的HTML核心代码如下所示:
调用Selenium函数可以获取输入框input控件。
然后自动输入“故宫”,获取按钮“进入词条”并自动点击,这里采用的方法是在键盘上输入回车键即可访问“故宫”界面,核心代码如下所示:
driver.get("http://baike.baidu.com/") <br />elem_inp=driver.find_element_by_xpath("//form[@id='searchForm']/input") <br />elem_inp.send_keys(name) <br />elem_inp.send_keys(Keys.RETURN) <br />
(2) 调用Selenium访问“故宫”页面并定位消息盒
第一步完成后,进入“故宫”页面然后找到中间消息盒InfoBox部分,右键鼠标并点击“审查元素”,返回结果如图7所示。
消息盒核心代码如下:
消息盒主要采用的形式存储,详细概括了“故宫”实体的信息。例如,属性“中文名称”对应值为“北京故宫”,属性“外文名称”对应值为“Fobidden City”。对应的HTML部分源代码如下。
整个消息盒位于< div class=“basic-info J-basic-info cmn-clearfix” >标签中,接下来是< dl >、< dt >、< dd >一组合HTML标签,其中消息盒div布局共包括两个< dl >…布局,一个是记录消息盒左边部分的内容,另一个< dl >记录了消息盒右部分的内容,每个< dl >标签里再定义属性和属性值,如图8所示。
注意:使用dt、dd最外层必须使用dl包裹,< dl >标签定义了定义列表(Definition List),< dt >标签定义列表中的项目,< dd >标签描述列表中的项目,此组合标签叫做表格标签,与table表格组合标签类似。
接下来调用Selenium扩展包的find_elements_by_xpath()函数分别定位属性和属性值,该函数返回多个属性及属性值集合,再通过for循环输出已定位的多个元素值。代码如下:

elem_name=driver.find_elements_by_xpath("//div[@class='basic-info J-basic-info cmn-clearfix']/dl/dt") <br />elem_value=driver.find_elements_by_xpath("//div[@class='basic-info J-basic-info cmn-clearfix']/dl/dd")<br />for e in elem_name:<br /> print(e.text)<br />for e in elem_value:<br /> print(e.text)<br />
此时,使用Selenium技术爬取百度百科国家5A级景区的分析方法就讲解完了,下面是这部分完整的代码及一些难点。
2.代码实现
注意,接下来我们尝试定义多个Python文件相互调用实现爬虫功能。完整代码包括两个文件,即:
test10_01_baidu.py
# -*- coding: utf-8 -*-<br />"""<br />test10_01_baidu.py<br /> 定义了主函数main并调用getinfo.py文件<br />By:Eastmount CSDN 2021-06-23<br />"""<br />import codecs <br />import getinfo #引用模块<br /><br />#主函数 <br />def main():<br /> #文件读取景点信息 <br /> source = open('data.txt','r',encoding='utf-8') <br /> for name in source: <br /> print(name)<br /> getinfo.getInfobox(name) <br /> print('End Read Files!') <br /> source.close()<br />if __name__ == '__main__':<br /> main()<br />
在代码中调用“import getinfo”代码导入getinfo.py文件,导入之后就可以在main函数中调用getinfo.py文件中的函数和属性,接着我们调用getinfo.py文件中的getInfobox()函数,执行爬取消息盒的操作。
getinfo.py
# coding=utf-8<br /><br />"""<br />getinfo.py:获取信息<br />By:Eastmount CSDN 2021-06-23<br />"""<br />import os <br />import codecs<br />import time<br />from selenium import webdriver <br />from selenium.webdriver.common.keys import Keys<br /><br />#getInfobox函数: 获取国家5A级景区消息盒 <br />def getInfobox(name): <br /> try: <br /> #访问百度百科并自动搜索<br /> driver = webdriver.Firefox() <br /> driver.get("http://baike.baidu.com/") <br /> elem_inp = driver.find_element_by_xpath("//form[@id='searchForm']/input") <br /> elem_inp.send_keys(name) <br /> elem_inp.send_keys(Keys.RETURN) <br /> time.sleep(1)<br /> print(driver.current_url)<br /> print(driver.title)<br /> <br /> #爬取消息盒InfoBox内容<br /> elem_name=driver.find_elements_by_xpath("//div[@class='basic-info J-basic-info cmn-clearfix']/dl/dt") <br /> elem_value=driver.find_elements_by_xpath("//div[@class='basic-info J-basic-info cmn-clearfix']/dl/dd")<br /> """<br /> for e in elem_name:<br /> print(e.text)<br /> for e in elem_value:<br /> print(e.text)<br /> """<br /><br /> #构建字段成对输出<br /> elem_dic = dict(zip(elem_name,elem_value)) <br /> for key in elem_dic: <br /> print(key.text,elem_dic[key].text)<br /> time.sleep(5)<br /> return<br /> <br /> except Exception as e: <br /> print("Error: ",e)<br /> finally: <br /> print('\n')<br /> driver.close() <br /><br />
比如爬取过程Firefox浏览器会自动搜索“故宫”页面,如下图所示:
最终输出结果如下图所示:
内容如下:
https://baike.baidu.com/item/北京故宫<br />北京故宫_百度百科<br />https://baike.baidu.com/item/% ... %3Bbr />北京故宫_百度百科<br />中文名 北京故宫<br />地理位置 北京市东城区景山前街4号 [91] <br />开放时间 4.1-10.31:08:20-17:00(停止售票16:00,最晚入园16:10) ;11.1-3.31:08:30-16:30(停止售票15:30,最晚入园15:40) ;除法定节假日外每周一闭馆 [6] [91] <br />景点级别 AAAAA级<br />门票价格 60元旺季/40元淡季 [7] <br />占地面积 72万平方米(建筑面积约15万平方米)<br />保护级别 世界文化遗产;第一批全国重点文物保护单位<br />批准单位 联合国教科文组织;中华人民共和国国务院<br />批 号 III-100<br />主要藏品 清明上河图、乾隆款金瓯永固杯、酗亚方樽<br />别 名 紫禁城 [8] <br />官方电话 010-85007057 [92]<br />
Python运行结果如下所示,其中data.txt文件中包括了常见的几个景点。
上述代码属性和属性值通过字典进行组合输出的,核心代码如下:
elem_dic = dict(zip(elem_name,elem_value)) <br />for key in elem_dic: <br /> print(key.text,elem_dic[key].text)<br />
同时,读者可以尝试调用本地的无界面浏览器PhantomJS进行爬取的,调用方法如下:
webdriver.PhantomJS(executable_path="C:\...\phantomjs.exe")<br />
课程作业:
三.Selenium爬取Wikipedia
在线百科是互联网中存在公开的最大数据量的用户生成数据集合,这些数据具有一定的结构,属于半结构化数据,最知名的三大在线百科包括Wikipedia 、百度百科、互动百科。首先,作者将介绍Selenium爬取Wikipedia的实例。
1.网页分析
第一个实例作者将详细讲解Selenium爬取20国家集团(G20)的第一段摘要信息,具体步骤如下:
(1) 从G20列表页面中获取各国超链接
20国集团列表网址如下,Wikipedia采用国家英文单词首写字母进行排序,比如“Japan”、“Italy”、“Brazil”等,每个国家都采用超链接的形式进行跳转。
首先,需要获取20个国家的超链接,然后再去到具体的页面进行爬取。选中一个国家的超链接,比如“China”,右键鼠标并点击“检查”按钮,可以获取对应的HTML源代码,如下所示。
其中超链接位于< div class=“mw-category-group” >布局的< ul >< li >< a >节点下,对应代码:
调用Selenium的find_elements_by_xpath()函数获取节点class属性为“mw-category-group”的超链接,它将返回多个元素。定位超链接的核心代码如下:
driver.get("https://en.wikipedia.org/wiki/ ... 6quot;) <br />elem=driver.find_elements_by_xpath("//div[@class='mw-category-group']/ul/li/a") <br />for e in elem:<br /> print(e.text)<br /> print(e.get_attribute("href"))<br />
函数find_elements_by_xpth()先解析HTML的DOM树形结构并定位到指定节点,并获取其元素。然后定义一个for循环,依次获取节点的内容和href属性,其中e.text表示节点的内容,例如下面节点之间的内容为China。
China<br />
同时,e.get_attribute(“href”)表示获取节点属性href对应的属性值,即“/wiki/China”,同理,e.get_attribute(“title”)可以获取标题title属性,得到值“China”。
此时将获取的超链接存储至变量中如下图,再依次定位到每个国家并获取所需内容。
(2) 调用Selenium定位并爬取各国页面消息盒
接下来开始访问具体的页面,比如中国:
如图所示,可以看到页面的URL、标题、摘要、内容、消息盒等,其中消息盒在途中右部分,包括国家全称、位置等。
下面采用对的形式进行描述,很简明精准地概括了一个网页实体,比如、等信息。通常获取这些信息之后,需要进行预处理操作,之后才能进行数据分析,后面章节将详细讲解。
访问到每个国家的页面后,接下来需要获取每个国家的第一段介绍,本小节讲解的爬虫内容可能比较简单,但是讲解的方法非常重要,包括如何定位节点及爬取知识。详情页面对应的HTML核心部分代码如下:
浏览器审查元素方法如图所示。
正文内容位于属性class为“mw-parser-output”的< div >节点下。在HTML中,< P >标签表示段落,通常用于标识正文,< b >标签表示加粗。获取第一段内容即定位第一个< p >节点即可。核心代码如下:
driver.get("https://en.wikipedia.org/wiki/China") <br />elem=driver.find_element_by_xpath("//div[@class='mw-parser-output']/p[2]").text <br />print elem<br />
注意,正文第一段内容位于第二个< p >段落,故获取p[2]即可。同时,如果读者想从源代码中获取消息盒,则需获取消息盒的位置并抓取数据,消息盒(InfoBox)内容在HTML对应为如下节点,记录了网页实体的核心信息。
...<br />
2.代码实现

完整代码参考文件test10_02.py,如下所示:
# coding=utf-8<br />#By:Eastmount CSDN 2021-06-23<br />import time <br />import re <br />import os <br />from selenium import webdriver <br />from selenium.webdriver.common.keys import Keys <br /><br />driver = webdriver.Firefox() <br />driver.get("https://en.wikipedia.org/wiki/ ... 6quot;) <br />elem = driver.find_elements_by_xpath("//div[@class='mw-category-group']/ul/li/a")<br />name = [] #国家名<br />urls = [] #国家超链接<br /><br />#爬取链接<br />for e in elem:<br /> print(e.text)<br /> print(e.get_attribute("href"))<br /> name.append(e.text)<br /> urls.append(e.get_attribute("href"))<br />print(name)<br />print(urls)<br /><br />#爬取内容<br />for url in urls:<br /> driver.get(url) <br /> elem = driver.find_element_by_xpath("//div[@class='mw-parser-output']/p[1]").text <br /> print(elem)<br />
其中,爬取的信息如图所示。
PS:该部分大家简单尝试即可,更推荐爬取百度百科、互动百科和搜狗百科。
四.Selenium爬取互动百科
几年过去,互动百科变成了快懂百科,但还好网页结构未变化。
1.网页分析
目前,在线百科已经发展为众多科研工作者从事语义分析、知识图谱构建、自然语言处理、搜索引擎和人工智能等领域的重要语料来源。互动百科作为最热门的在线百科之一,为研究者提供了强大的语料支持。
本小节将讲解一个爬取互动百科最热门的十个编程语言页面的摘要信息,通过该实例加深读者使用Selenium爬虫技术的印象,更加深入地剖析网络数据爬取的分析技巧。不同于Wikipedia先爬取词条列表超链接再爬取所需信息、百度百科输入词条进入相关页面再进行定向爬取,互动百科采用的方法是:
由于互动百科搜索不同词条对应的超链接是存在一定规律的,即采用“常用url+搜索的词条名”方式进行跳转,这里我们通过该方法设置不同的词条网页。具体步骤如下:
(1) 调用Selenium分析URL并搜索互动百科词条
我们首先分析互动百科搜索词条的一些规则,比如搜索人物“贵州”,对应的超链为:
对应页面如图所示,从图中可以看到,顶部的超链接URL、词条为“贵州”、第一段为“贵州”的摘要信息、“右边为对应的图片等信息。
同理,搜索编程语言“Python”,对应的超链接为:
可以得出一个简单的规则,即:
可以搜索对应的知识,如编程语言“Java”对应为:
(2) 访问热门Top10编程语言并爬取摘要
2016年,Github根据各语言过去12个月提交的PR数量进行排名,得出最受欢迎的Top10编程语言分别是:JavaScript、Java、Python、Ruby、PHP、C++、CSS、C#、C和GO语言。
然后,需要分布获取这十门语言的摘要信息。在浏览器中选中摘要部分,右键鼠标点击“审查元素”返回结果如图所示,可以在底部看到摘要部分对应的HTML源代码。
新版本的“快懂百科”内容如下图所示:
“Java”词条摘要部分对应的HTML核心代码如下所示:
调用Selenium的find_element_by_xpath()函数,可以获取摘要段落信息,核心代码如下。
driver = webdriver.Firefox()<br />url = "http://www.baike.com/wiki/" + name<br />driver.get(url)<br />elem = driver.find_element_by_xpath("//div[@class='summary']/div/span") <br />print(elem.text)<br />
这段代码的基本步骤是:
下面是完整的代码及详细讲解。
2.代码实现
完整代码为blog10_03.py如下所示,主函数main()中循环调用getgetAbstract()函数爬取Top10编程语言的摘要信息。
# coding=utf-8 <br />#By:Eastmount CSDN 2021-06-23 <br />import os <br />import codecs<br />from selenium import webdriver <br />from selenium.webdriver.common.keys import Keys <br /><br />driver = webdriver.Firefox()<br /><br />#获取摘要信息<br />def getAbstract(name): <br /> try:<br /> #新建文件夹及文件<br /> basePathDirectory = "Hudong_Coding" <br /> if not os.path.exists(basePathDirectory): <br /> os.makedirs(basePathDirectory) <br /> baiduFile = os.path.join(basePathDirectory,"HudongSpider.txt")<br /> #文件不存在新建,存在则追加写入<br /> if not os.path.exists(baiduFile): <br /> info = codecs.open(baiduFile,'w','utf-8') <br /> else: <br /> info = codecs.open(baiduFile,'a','utf-8') <br /><br /> url = "http://www.baike.com/wiki/" + name<br /> print(url)<br /> driver.get(url) <br /> elem = driver.find_elements_by_xpath("//div[@class='summary']/div/span")<br /> content = ""<br /> for e in elem:<br /> content += e.text<br /> print(content)<br /> info.writelines(content+'\r\n') <br /> <br /> except Exception as e: <br /> print("Error: ",e) <br /> finally: <br /> print('\n') <br /> info.write('\r\n') <br /> <br />#主函数 <br />def main():<br /> languages = ["JavaScript", "Java", "Python", "Ruby", "PHP",<br /> "C++", "CSS", "C#", "C", "GO"]<br /> print('开始爬取')<br /> for lg in languages: <br /> print(lg)<br /> getAbstract(lg) <br /> print('结束爬取')<br /><br />if __name__ == '__main__':<br /> main() <br />
其中“JavaScript”和“Java”编程语言的抓取结果如图所示,该段代码爬取了热门十门语言在互动百科中的摘要信息。
程序成功抓取了各个编程语言的摘要信息,如下图所示:
同时将数据存储至本地TXT文件中,这将有效为NLP和文本挖掘进行一步分析提供支撑。
写到这里,几种常见的百科数据抓取方法就介绍完毕了,希望您喜欢。
五.总结
在线百科被广泛应用于科研工作、知识图谱和搜索引擎构建、大小型公司数据集成、Web2.0知识库系统中,由于其公开、动态、可自由访问和编辑、拥有多语言版本等特点,它深受科研工作者和公司开发人员的喜爱,常见的在线百科包括Wikipedia、百度百科和互动百科等。
本文结合Selenium技术分别爬取了Wikipedia的段落内容、百度百科的消息盒和互动百科的摘要信息,并采用了三种分析方法,希望读者通过该章节的案例掌握Selenium技术爬取网页的方法。
Selenium用得更广泛的领域是自动化测试,它直接运行在浏览器中(如Firefox、Chrome、IE等),就像真实用户操作一样,对开发的网页进行各式各样的测试,它更是自动化测试方向的必备工具。希望读者能掌握这种技术的爬取方法,尤其是目标网页需要验证登录等情形。
该系列所有代码下载地址:
感谢在求学路上的同行者,不负遇见,勿忘初心。这周的留言感慨~
(By:娜璋 2021-08-20夜于景怡)
前文赏析:
第一部分 基础语法
第二部分 网络爬虫
参考文献
php 循环抓取网页内容 中软国际教育<暑期师资培训>体系化课程,重磅登场 | 携手产业
网站优化 • 优采云 发表了文章 • 0 个评论 • 48 次浏览 • 2022-07-16 22:38
“动态网页”是与静态网页相对应的,也就是说,网页 URL不固定,能通过后台与用户交互。完成用户查询,提交等动作。常用的语言有ASP,PHP,JSP等。动态网页技术是区别于静态网页技术而言的。相比与传统的静态网页,动态网页有了明显的交互性、自动更新性,以及因时因人而变的灵活性。所谓“动态”并不是指放在网页上的动画图片,动态网页技术有以下几个特点:"交互性",网页会根据用户的要求和选择而动态改变和响应,将浏览器作为客户端界面,这将是今后WEB发展的大势所趋。"自动更新“,无须手动地更新HTML文档,便会自动生成新的页面,可以大大节省工作量。"因时因人而变",当不同的时间,不同的人访问同一网址时会产生不同的页面。本实验通过基础的处理流程展示Java动态网页的基本原理。主要技能知识点:
(1)利用Socket响应用户的不同方法请求
(2)Java动态编译
(3)动态网页基本原理实现 查看全部
php 循环抓取网页内容 中软国际教育体系化课程,重磅登场 | 携手产业
“动态网页”是与静态网页相对应的,也就是说,网页 URL不固定,能通过后台与用户交互。完成用户查询,提交等动作。常用的语言有ASP,PHP,JSP等。动态网页技术是区别于静态网页技术而言的。相比与传统的静态网页,动态网页有了明显的交互性、自动更新性,以及因时因人而变的灵活性。所谓“动态”并不是指放在网页上的动画图片,动态网页技术有以下几个特点:"交互性",网页会根据用户的要求和选择而动态改变和响应,将浏览器作为客户端界面,这将是今后WEB发展的大势所趋。"自动更新“,无须手动地更新HTML文档,便会自动生成新的页面,可以大大节省工作量。"因时因人而变",当不同的时间,不同的人访问同一网址时会产生不同的页面。本实验通过基础的处理流程展示Java动态网页的基本原理。主要技能知识点:

(1)利用Socket响应用户的不同方法请求

(2)Java动态编译
(3)动态网页基本原理实现
服务器在解析时返回一个空字符串呢?
网站优化 • 优采云 发表了文章 • 0 个评论 • 49 次浏览 • 2022-07-01 08:05
php循环抓取网页内容:request->tojson();和cookie存储:session->tojson();然后tojson的返回值是keys(),因为发送给服务器后把重定向的keys()的地址抛弃了,被调用服务器会解析keys()获取用户发送的数据。tojson类似于做http爬虫。然后用file.incrementallitems();可以增加file类的容量。get方法包含的参数必须都是字符串,否则返回值是空字符串(要返回整数字符串,即1)。
继续看type('text/html');以及<a></a>
file是一个作用域(scope),用于动态设置包含html文档的方法。phpinfo和text_read是它的两个特例。对php来说是不行的;此外,session的值返回null。前者使用:htmlexamples...<a></a>...html...phpinfo...localsize...不过,phpinfo和text_read都不是php的默认字段。
差不多是因为这样一个原因,php标准库中没有text_read()函数,当从服务器请求html时,因为text_read()只能读,所以服务器不能正确返回这个字段,所以服务器在解析html时返回一个空字符串,为什么服务器会返回一个空字符串呢?因为php有一个__construct__方法,construct方法类似一个this,所以php对this不友好,所以会返回一个空字符串。
这里我们要用到大量的__this和__construct__的一些函数,同时我们也用到一些_this/__construct__对this的错误处理,所以我们现在很多地方都需要判断,服务器返回一个空字符串,不符合我们的设计。 查看全部
服务器在解析时返回一个空字符串呢?
php循环抓取网页内容:request->tojson();和cookie存储:session->tojson();然后tojson的返回值是keys(),因为发送给服务器后把重定向的keys()的地址抛弃了,被调用服务器会解析keys()获取用户发送的数据。tojson类似于做http爬虫。然后用file.incrementallitems();可以增加file类的容量。get方法包含的参数必须都是字符串,否则返回值是空字符串(要返回整数字符串,即1)。

继续看type('text/html');以及<a></a>
file是一个作用域(scope),用于动态设置包含html文档的方法。phpinfo和text_read是它的两个特例。对php来说是不行的;此外,session的值返回null。前者使用:htmlexamples...<a></a>...html...phpinfo...localsize...不过,phpinfo和text_read都不是php的默认字段。

差不多是因为这样一个原因,php标准库中没有text_read()函数,当从服务器请求html时,因为text_read()只能读,所以服务器不能正确返回这个字段,所以服务器在解析html时返回一个空字符串,为什么服务器会返回一个空字符串呢?因为php有一个__construct__方法,construct方法类似一个this,所以php对this不友好,所以会返回一个空字符串。
这里我们要用到大量的__this和__construct__的一些函数,同时我们也用到一些_this/__construct__对this的错误处理,所以我们现在很多地方都需要判断,服务器返回一个空字符串,不符合我们的设计。
php 循环抓取网页内容 _variables介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 85 次浏览 • 2022-06-29 18:54
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。 查看全部
php 循环抓取网页内容 _variables介绍
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture

_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。

对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
php 循环抓取网页内容 中软国际教育<暑期师资培训>体系化课程,重磅登场 | 携手产业
网站优化 • 优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2022-06-25 13:35
“动态网页”是与静态网页相对应的,也就是说,网页 URL不固定,能通过后台与用户交互。完成用户查询,提交等动作。常用的语言有ASP,PHP,JSP等。动态网页技术是区别于静态网页技术而言的。相比与传统的静态网页,动态网页有了明显的交互性、自动更新性,以及因时因人而变的灵活性。所谓“动态”并不是指放在网页上的动画图片,动态网页技术有以下几个特点:"交互性",网页会根据用户的要求和选择而动态改变和响应,将浏览器作为客户端界面,这将是今后WEB发展的大势所趋。"自动更新“,无须手动地更新HTML文档,便会自动生成新的页面,可以大大节省工作量。"因时因人而变",当不同的时间,不同的人访问同一网址时会产生不同的页面。本实验通过基础的处理流程展示Java动态网页的基本原理。主要技能知识点:
(1)利用Socket响应用户的不同方法请求
(2)Java动态编译
(3)动态网页基本原理实现 查看全部
php 循环抓取网页内容 中软国际教育体系化课程,重磅登场 | 携手产业
“动态网页”是与静态网页相对应的,也就是说,网页 URL不固定,能通过后台与用户交互。完成用户查询,提交等动作。常用的语言有ASP,PHP,JSP等。动态网页技术是区别于静态网页技术而言的。相比与传统的静态网页,动态网页有了明显的交互性、自动更新性,以及因时因人而变的灵活性。所谓“动态”并不是指放在网页上的动画图片,动态网页技术有以下几个特点:"交互性",网页会根据用户的要求和选择而动态改变和响应,将浏览器作为客户端界面,这将是今后WEB发展的大势所趋。"自动更新“,无须手动地更新HTML文档,便会自动生成新的页面,可以大大节省工作量。"因时因人而变",当不同的时间,不同的人访问同一网址时会产生不同的页面。本实验通过基础的处理流程展示Java动态网页的基本原理。主要技能知识点:
(1)利用Socket响应用户的不同方法请求
(2)Java动态编译
(3)动态网页基本原理实现
Python Web框架大列兵,写给初学者的Web框架介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 193 次浏览 • 2022-06-25 06:12
我们知道Web开发最重要的是选择合适的框架,一个好的框架可以极大的提高我们开发的效率,也能帮助我们的应用能按照需求快速迭代。Web框架的数量和质量是一个语言是否成熟的标志之一。PHP下有Larvarel、CodeIgniter,Yii、TP等著名框架使得PHP成为最流行的Web语言之一。Ruby借助其强大框架Rails以RoR(Ruby on Rails)生态开辟了一番天地,很多RoR应用以强大的功能和敏捷能力而闻名,比如知名Git服务器系统Gitlab。那么时下最流行的语言Python Web框架的情况怎么样呢?今天虫虫就来给大家介绍这个。
概述
Python和PHP一样,也有着大量的Web框架,其Web框架生态圈非常广泛和多样化。在进入具体主题之前,我们先介绍下Web框架。
Web框架是对常见通用功能的打包,比如Web权限认证模块、导航路由模块、HTTP解析模块、ORM模块以及做扩展使用的插件体系等,打包这些功能可以让开发人员轻松地创建Web应用程序。是一种高层次的代码和应用逻辑重用方法,可以极大的它减少了开发人员花在编写代码上的时间从而提高开发效率。通过提供现成的解决方案,Web应用程序框架可以帮助开发人员短时间内完成应用的开发并持续的迭代。
Django
说到Python的Web框架,无疑最想到的必然是Django。Django和Laravel最初都是借鉴了RoR的强大思想(动态、DDD、约定优于配置、低重复、及时反馈)。Django框架使用了类MVC的MVT(模型、视图、模板)模式,用Django ORM和数据库联系。
Django ORM内置的管理面板,可以轻松实现数据库内容的管理。使用很少的配置就可能,自动生成数据库模型。
视图可以包括函数和类,视图的URL路由分配在urls.py文件中完成,可以设计出完美优雅的URL调度。
Django的模板的系统则相当简单,甚至不支持直接嵌入代码,需要预先生成Tag、Filter才能调用。
Django支持强大的解决方案:
全栈模式,内置了大量所有必须的模块cache、session、feed、orm、geo、auth。
同时也支持"内置电池"(batteries included)模式。
Django是典型的"大而全"的逻辑,这可以极大的方便大多数开发者。但是这就导致其灵活性不足。要引入其他更好的第三方优秀组件就基本上很难,比如想要在Django里用SQLAlchemy或Mako,需要打上很多补丁,而且会导致管理面板,授权,会话处理或生成表单等功能都不能使用。
当然Django最人性化的地方是其强大的社区支持和详细文档完美的文档Django 书。文档在安装后就完全嵌入系统的各个部分,使用非常方便,这使得其开发的入门门槛很低。
最后给一个Django网站模型的示例:
Pyramid
Pyramid也是一个常用的热门Python Web框架,它源于Pylons和repoze.bfg模块,在吸取精华的基础上使得Pyramid快速成长为了一个成熟和稳定的框架。
虽然两者出现的时间差不多(2005),Pyramid和Django的设计思想则大相径庭。Pyramid非常灵活,很容易定制,可以非常自我的方式以创建特征。Pyramid不会强迫使用框架的习语,对于复杂或高度非标准的项目来说,这点非常有用。
虽然也内置ORM模块,但是更倡导使用成熟的SQLAlchemy ORM。你也可以按照喜好来定制,比如你可能喜欢peewee ORM,使用原始SQL查询或与NoSQL数据库集成。
Pyramid中所有选项都是开放式的,所以需要动手能力强一点,可能最初学者稍有点门槛。
Pyramid是一个自称"开始小,完成大,保持完备的框架。"(start small, finish big, stay finished framework.)。所以非常适合有一定经验丰富的开发人员。
Pyramid一个典型的"Hello Chongchong"应用示例:
web2py
web2py源于一个教学范例框架,其最关心的是是易于开发和部署。
Web2py框架也源于RoR和Django思想的启发,奉行约定优于配置的想法,web2py中有很多合理的默认值,允许开发人员快速启动。
Web2py框架自带了很多模块,比如内置服务器,生成HTML的帮助器,表单,验证器等等,但是Web2py多数据库引擎的支持很简单。其他更多内置的功能有:
jQuery和Ajax建站助手;
调度程序和cron;
双因子认证助手;
文本消息发送器;
事件工单系统,允许自动将生产环境中发生的问题分配给开发人员。
Web2py也宣称,提供全栈式解决方案,提供可能需要的一切模块。
Web2py在线提供了大量文档:
从零开始逐步指导入门,比如简要介绍Python语言。以友好的方式展示web2py的各个功能,包括大量代码示例和屏幕截图等。
尽管具有一定竞争优势,但web2py的社区远远小于Django和Pyramid。其官方邮件列表也不大活跃。另外web2py目前还不能和Python 3不兼容。
web2py一个典型的广告模型示例:
微框架
与大而全思想相反的设计思想是,小而精致的设计,这就是微框架。微框架的好处就是没有冗余,因而性能都很好。
Flask
Flask是除了Django外最流行的Python Web框架。Flask是一个微框架,具备了基本功能,也支持轻松的扩展。因此,Flask更适合做为胶水来用,来粘合各个Web库。
纯 Flask不支持任何存储,但是可以Flask-SQLAlchemy,Flask-MongoAlchemy和Flask-Redis等。类似的基本模板系统是Jinja2,可以使用Mako替换。
Flask框架的座右铭是轻量,"一次一滴"(one drop at a time),这也在其文档中得到全面反映。关于如何构建Flash应用程序可以通过点点滴滴方式学习。阅读几段文档后,就能适应其开发任务了。
在Flash中你不需要一次就学习很多东西,尤其高级的功能,知道你真正需要的时候再学不迟,这样可以避免无实践的"尴学"。
Flask的最大问题是,没有大量Flask扩展支持和功能打包。常常遇到扩展插件停更或者文档过时的情况,需要花费大量的精力处理这些情况。
Flask一个简单示例如下:
Falcon
Falcon 猎鹰也是一个比较流行的微框架。其目标是创建一个简洁、轻量的Web应用程序基础。官方宣称Falcon是一个裸壳(bare-metal),无限膨胀(bloat-free)的工具集,用于快速的构建后端代码和微服务。Falcon兼容Python 2和3,不用担心Python的版本问题。
Falcon的一大优势在于其性能非常高,非常快。其官方网站基准测试显示,其比Django或Flask等具有很高的性能优势(27~75倍)。
Falcon缺点是其打包模块有点太少,有路由,中间件,钩子,除此之外就不提供其他功能了(裸壳)。额外其他功能,比如验证等都需要开发人员来开发扩展。因为其设计中就假设用于构建REST API。
当然其高性能的高度定制的特点确实是一个很好的卖点。毕竟有时候"最简单的解决方案就是最好的方案"。
Falcon示例程序:
API Star
API Star是一个新的Web微框架,只支持Python 3,其特性使用了Python 3.5中引入的类型提示。API Star使用内置的类型提示实现以简洁、声明式的构建验证模式表示,然后绑定这些模式来请求处理函数。
API Star还具有兼容OpenAPI 3 的自动API生成文档功能。
API Star另一个突出的特性是依赖注入机制。这是一个更强大、更智能中间件的替代品。比如可以编写一个所谓的Component,它将使用当前经过身份验证来提供给用户视图。在视图级别,只需要明确声明它将需要User实例,其他事情API Star就会在幕后自动完成。
自动依赖注入优于常规中间件的优点是组件不会有其他未使用视图的开销。同样
API Star也可以以更传统,同步性的,兼容WSGI的方式在asyncio上运行。
最后与API Star捆绑在一起的其他模块都非常标准:比如使用jinja2,路由和事件挂钩进行模板化扩展支持。
总之API Star初生牛犊,发展可观。截止当前其GitHub存储库中有超过5271的星星。贡献者已经接近一百。PR的合并也非常快,是一个快速增长和协作的新兴框架。
基于异步和asyncio的框架
Python web网站通常很慢,为了提高性能,异步技术就成了灵丹妙药。Python也有很多这类的框架。
Twisted
Twisted是Python中最古老,最成熟的Python异步框架。Twisted最初产生于2002年,其核心是一个名为reactor的事件驱动网络引擎,用于调度和调用用户定义的回调。开始的时候开发人员必须通过定义函数并在操作成功和失败时分别传递它们来使用显式回调。
后来Twisted引入了inlineCallbacks ,用于编写异步代码程序,这些代码与常规同步代码一样简单易读。这个解决方案非常适合Python的语法,并且极大地影响了标准库asyncio中的现代异步工具包。
Twisted框架的最大优点是虽然本身只是一个捆绑很少的引擎,但支持许多其他扩展可用于扩展其功能,比如从低级网络编程(TCP/UDP)和高级应用程序(HTTP,IMAP,SHH等)。所以,Twisted天然适合编写专业服务,但不适合常规Web应用程序。开发人员必须自己编写很多东西才能实现Django中自带那些功能。Twisted目前开发和维护还很活跃,正在努力迁移代码到Python 3,其核心功能不久前被重写,但许多第三方模块还存在兼容性问题。
Twisted inlineCallbacks代码示例:
Sanic
Sanic是基于asyncio-Python的异步编程工具箱,与Python 3.4版本的标准库捆绑在一起。Sanic的开发基于Sanic需要掌握asyncio思想,涉及协程的理论知识,并发编程以及关于应用程序中数据流的推理。Sanic在处理长连接时特别有用,比如websocket,如果需要支持websockets或进行大量持久的外部API调用,Sanic是个非常不错的选择。
Sanic的另一个用例是编写 "glue-web App",它可以作为两个具有不兼容API的子系统之间的代理。
Sanic框架非常快。其中一个依赖项是Uvloop,它用来替换asyncio的内置事件循环的替代品。Uvloop是libuv的包装器,与Node.js相同的引擎。根据uvloop官方文档,可以让 asyncio的效率提高了2-4倍。
就功能方面Sanic模仿Flask,比如通过共享Blueprints的概念,微小的子应用程序,允许开发人员在更大的应用程序中拆分和组织其代码。对于光光是数据增删改查CRUD应用,Sanic也不是一个好的选择。
Sanic一个示例:
Japronto
在高性能编程领域,有著名的C10K甚至C10M问题,Python Web应用怎么实现每秒处理100W的请求呢?这就是Python把asyncio添加到标准库时想要实现的目标。Japronto是一个基于asyncio的微框架。通过使用uvloop和PicoHTTPParser Japronto实现了每秒处理100万个请求。Uvloop上面说了是基于libuv的asyncio后端,而PicoHTTPParser是用C编写的轻量级HTTP头解析器。
Japronto框架的所有核心组件也用C实现,还使用各种低层优化和技巧来调整性能。Japronto主要用于高性能特殊任务,它们无法通过大而冗余的主流框架实现。
Japronto还为REST API的微服务开发提供坚实的基础,开发人员只需要设置路由并确定哪些路由应使用同步或异步处理程序。
Japronto中"Hello world"应用示例:
查看全部
Python Web框架大列兵,写给初学者的Web框架介绍
我们知道Web开发最重要的是选择合适的框架,一个好的框架可以极大的提高我们开发的效率,也能帮助我们的应用能按照需求快速迭代。Web框架的数量和质量是一个语言是否成熟的标志之一。PHP下有Larvarel、CodeIgniter,Yii、TP等著名框架使得PHP成为最流行的Web语言之一。Ruby借助其强大框架Rails以RoR(Ruby on Rails)生态开辟了一番天地,很多RoR应用以强大的功能和敏捷能力而闻名,比如知名Git服务器系统Gitlab。那么时下最流行的语言Python Web框架的情况怎么样呢?今天虫虫就来给大家介绍这个。
概述
Python和PHP一样,也有着大量的Web框架,其Web框架生态圈非常广泛和多样化。在进入具体主题之前,我们先介绍下Web框架。
Web框架是对常见通用功能的打包,比如Web权限认证模块、导航路由模块、HTTP解析模块、ORM模块以及做扩展使用的插件体系等,打包这些功能可以让开发人员轻松地创建Web应用程序。是一种高层次的代码和应用逻辑重用方法,可以极大的它减少了开发人员花在编写代码上的时间从而提高开发效率。通过提供现成的解决方案,Web应用程序框架可以帮助开发人员短时间内完成应用的开发并持续的迭代。
Django
说到Python的Web框架,无疑最想到的必然是Django。Django和Laravel最初都是借鉴了RoR的强大思想(动态、DDD、约定优于配置、低重复、及时反馈)。Django框架使用了类MVC的MVT(模型、视图、模板)模式,用Django ORM和数据库联系。
Django ORM内置的管理面板,可以轻松实现数据库内容的管理。使用很少的配置就可能,自动生成数据库模型。
视图可以包括函数和类,视图的URL路由分配在urls.py文件中完成,可以设计出完美优雅的URL调度。
Django的模板的系统则相当简单,甚至不支持直接嵌入代码,需要预先生成Tag、Filter才能调用。
Django支持强大的解决方案:
全栈模式,内置了大量所有必须的模块cache、session、feed、orm、geo、auth。
同时也支持"内置电池"(batteries included)模式。
Django是典型的"大而全"的逻辑,这可以极大的方便大多数开发者。但是这就导致其灵活性不足。要引入其他更好的第三方优秀组件就基本上很难,比如想要在Django里用SQLAlchemy或Mako,需要打上很多补丁,而且会导致管理面板,授权,会话处理或生成表单等功能都不能使用。
当然Django最人性化的地方是其强大的社区支持和详细文档完美的文档Django 书。文档在安装后就完全嵌入系统的各个部分,使用非常方便,这使得其开发的入门门槛很低。
最后给一个Django网站模型的示例:
Pyramid
Pyramid也是一个常用的热门Python Web框架,它源于Pylons和repoze.bfg模块,在吸取精华的基础上使得Pyramid快速成长为了一个成熟和稳定的框架。
虽然两者出现的时间差不多(2005),Pyramid和Django的设计思想则大相径庭。Pyramid非常灵活,很容易定制,可以非常自我的方式以创建特征。Pyramid不会强迫使用框架的习语,对于复杂或高度非标准的项目来说,这点非常有用。
虽然也内置ORM模块,但是更倡导使用成熟的SQLAlchemy ORM。你也可以按照喜好来定制,比如你可能喜欢peewee ORM,使用原始SQL查询或与NoSQL数据库集成。
Pyramid中所有选项都是开放式的,所以需要动手能力强一点,可能最初学者稍有点门槛。
Pyramid是一个自称"开始小,完成大,保持完备的框架。"(start small, finish big, stay finished framework.)。所以非常适合有一定经验丰富的开发人员。
Pyramid一个典型的"Hello Chongchong"应用示例:
web2py
web2py源于一个教学范例框架,其最关心的是是易于开发和部署。
Web2py框架也源于RoR和Django思想的启发,奉行约定优于配置的想法,web2py中有很多合理的默认值,允许开发人员快速启动。
Web2py框架自带了很多模块,比如内置服务器,生成HTML的帮助器,表单,验证器等等,但是Web2py多数据库引擎的支持很简单。其他更多内置的功能有:
jQuery和Ajax建站助手;
调度程序和cron;
双因子认证助手;
文本消息发送器;
事件工单系统,允许自动将生产环境中发生的问题分配给开发人员。
Web2py也宣称,提供全栈式解决方案,提供可能需要的一切模块。
Web2py在线提供了大量文档:
从零开始逐步指导入门,比如简要介绍Python语言。以友好的方式展示web2py的各个功能,包括大量代码示例和屏幕截图等。
尽管具有一定竞争优势,但web2py的社区远远小于Django和Pyramid。其官方邮件列表也不大活跃。另外web2py目前还不能和Python 3不兼容。
web2py一个典型的广告模型示例:
微框架
与大而全思想相反的设计思想是,小而精致的设计,这就是微框架。微框架的好处就是没有冗余,因而性能都很好。
Flask
Flask是除了Django外最流行的Python Web框架。Flask是一个微框架,具备了基本功能,也支持轻松的扩展。因此,Flask更适合做为胶水来用,来粘合各个Web库。
纯 Flask不支持任何存储,但是可以Flask-SQLAlchemy,Flask-MongoAlchemy和Flask-Redis等。类似的基本模板系统是Jinja2,可以使用Mako替换。
Flask框架的座右铭是轻量,"一次一滴"(one drop at a time),这也在其文档中得到全面反映。关于如何构建Flash应用程序可以通过点点滴滴方式学习。阅读几段文档后,就能适应其开发任务了。
在Flash中你不需要一次就学习很多东西,尤其高级的功能,知道你真正需要的时候再学不迟,这样可以避免无实践的"尴学"。
Flask的最大问题是,没有大量Flask扩展支持和功能打包。常常遇到扩展插件停更或者文档过时的情况,需要花费大量的精力处理这些情况。
Flask一个简单示例如下:
Falcon
Falcon 猎鹰也是一个比较流行的微框架。其目标是创建一个简洁、轻量的Web应用程序基础。官方宣称Falcon是一个裸壳(bare-metal),无限膨胀(bloat-free)的工具集,用于快速的构建后端代码和微服务。Falcon兼容Python 2和3,不用担心Python的版本问题。
Falcon的一大优势在于其性能非常高,非常快。其官方网站基准测试显示,其比Django或Flask等具有很高的性能优势(27~75倍)。
Falcon缺点是其打包模块有点太少,有路由,中间件,钩子,除此之外就不提供其他功能了(裸壳)。额外其他功能,比如验证等都需要开发人员来开发扩展。因为其设计中就假设用于构建REST API。
当然其高性能的高度定制的特点确实是一个很好的卖点。毕竟有时候"最简单的解决方案就是最好的方案"。
Falcon示例程序:
API Star
API Star是一个新的Web微框架,只支持Python 3,其特性使用了Python 3.5中引入的类型提示。API Star使用内置的类型提示实现以简洁、声明式的构建验证模式表示,然后绑定这些模式来请求处理函数。
API Star还具有兼容OpenAPI 3 的自动API生成文档功能。
API Star另一个突出的特性是依赖注入机制。这是一个更强大、更智能中间件的替代品。比如可以编写一个所谓的Component,它将使用当前经过身份验证来提供给用户视图。在视图级别,只需要明确声明它将需要User实例,其他事情API Star就会在幕后自动完成。
自动依赖注入优于常规中间件的优点是组件不会有其他未使用视图的开销。同样
API Star也可以以更传统,同步性的,兼容WSGI的方式在asyncio上运行。
最后与API Star捆绑在一起的其他模块都非常标准:比如使用jinja2,路由和事件挂钩进行模板化扩展支持。
总之API Star初生牛犊,发展可观。截止当前其GitHub存储库中有超过5271的星星。贡献者已经接近一百。PR的合并也非常快,是一个快速增长和协作的新兴框架。
基于异步和asyncio的框架
Python web网站通常很慢,为了提高性能,异步技术就成了灵丹妙药。Python也有很多这类的框架。
Twisted
Twisted是Python中最古老,最成熟的Python异步框架。Twisted最初产生于2002年,其核心是一个名为reactor的事件驱动网络引擎,用于调度和调用用户定义的回调。开始的时候开发人员必须通过定义函数并在操作成功和失败时分别传递它们来使用显式回调。
后来Twisted引入了inlineCallbacks ,用于编写异步代码程序,这些代码与常规同步代码一样简单易读。这个解决方案非常适合Python的语法,并且极大地影响了标准库asyncio中的现代异步工具包。
Twisted框架的最大优点是虽然本身只是一个捆绑很少的引擎,但支持许多其他扩展可用于扩展其功能,比如从低级网络编程(TCP/UDP)和高级应用程序(HTTP,IMAP,SHH等)。所以,Twisted天然适合编写专业服务,但不适合常规Web应用程序。开发人员必须自己编写很多东西才能实现Django中自带那些功能。Twisted目前开发和维护还很活跃,正在努力迁移代码到Python 3,其核心功能不久前被重写,但许多第三方模块还存在兼容性问题。
Twisted inlineCallbacks代码示例:
Sanic
Sanic是基于asyncio-Python的异步编程工具箱,与Python 3.4版本的标准库捆绑在一起。Sanic的开发基于Sanic需要掌握asyncio思想,涉及协程的理论知识,并发编程以及关于应用程序中数据流的推理。Sanic在处理长连接时特别有用,比如websocket,如果需要支持websockets或进行大量持久的外部API调用,Sanic是个非常不错的选择。
Sanic的另一个用例是编写 "glue-web App",它可以作为两个具有不兼容API的子系统之间的代理。
Sanic框架非常快。其中一个依赖项是Uvloop,它用来替换asyncio的内置事件循环的替代品。Uvloop是libuv的包装器,与Node.js相同的引擎。根据uvloop官方文档,可以让 asyncio的效率提高了2-4倍。
就功能方面Sanic模仿Flask,比如通过共享Blueprints的概念,微小的子应用程序,允许开发人员在更大的应用程序中拆分和组织其代码。对于光光是数据增删改查CRUD应用,Sanic也不是一个好的选择。
Sanic一个示例:
Japronto
在高性能编程领域,有著名的C10K甚至C10M问题,Python Web应用怎么实现每秒处理100W的请求呢?这就是Python把asyncio添加到标准库时想要实现的目标。Japronto是一个基于asyncio的微框架。通过使用uvloop和PicoHTTPParser Japronto实现了每秒处理100万个请求。Uvloop上面说了是基于libuv的asyncio后端,而PicoHTTPParser是用C编写的轻量级HTTP头解析器。
Japronto框架的所有核心组件也用C实现,还使用各种低层优化和技巧来调整性能。Japronto主要用于高性能特殊任务,它们无法通过大而冗余的主流框架实现。
Japronto还为REST API的微服务开发提供坚实的基础,开发人员只需要设置路由并确定哪些路由应使用同步或异步处理程序。
Japronto中"Hello world"应用示例:
php 循环抓取网页内容 _variables介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 115 次浏览 • 2022-06-25 02:10
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
查看全部
php 循环抓取网页内容 _variables介绍
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
php 循环抓取网页内容 _variables介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 126 次浏览 • 2022-06-24 18:52
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
查看全部
php 循环抓取网页内容 _variables介绍
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
php 循环抓取网页内容 _variables介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 67 次浏览 • 2022-06-19 01:25
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
查看全部
php 循环抓取网页内容 _variables介绍
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
php 循环抓取网页内容 _variables介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 330 次浏览 • 2022-06-13 13:41
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
查看全部
php 循环抓取网页内容 _variables介绍
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
php 循环抓取网页内容 _variables介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2022-06-07 20:21
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
查看全部
php 循环抓取网页内容 _variables介绍
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
php 循环抓取网页内容 _variables介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 112 次浏览 • 2022-06-04 13:33
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
查看全部
php 循环抓取网页内容 _variables介绍
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
php 循环抓取网页内容 _variables介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 57 次浏览 • 2022-05-31 10:30
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
查看全部
php 循环抓取网页内容 _variables介绍
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
最新版本:php 抓取网页数据
网站优化 • 优采云 发表了文章 • 0 个评论 • 75 次浏览 • 2022-09-22 18:10
无论您是想从链接中获取部分数据,还是获取 XML 文件并将其导入数据库,甚至只是获取网页的内容,Reactor cURL 都是一个强大的 PHP 库。本文主要介绍如何使用这个 PHP 库。启用 cURL 设置 首先,我们必须确保我们的 PHP 启用了这个库。您可以使用 php_info() 函数获取此信息。复制代码 代码如下: 如果您可以在网页上看到以下输出,则说明 cURL 库已启用。如果你看到它,那么你需要设置你的 PHP 并启用这个库。如果你是windows平台的话,很简单,你需要改一下你的php.ini文件
最新版本:php如何设置网页编码
如何在php中设置网页编码:首先打开php文件;然后将代码添加为 "header("Content-Type:text/html;charset=utf-8");";然后保存。
推荐:《PHP 视频教程》
PHP设置页面字符集utf-8
这需要使用 header() 函数。该函数的作用是设置响应消息的内容。
如果想让浏览器按照utf-8编码处理页面,需要在响应消息中设置content-type字段。
content-type,用于定义网络文件的类型和网页的编码,决定了文件接收者会以什么形式和编码方式读取文件。
在 PHP 文件中插入以下代码行,但注意在 header() 函数之前不要有任何输出。
header("Content-Type:text/html;charset=utf-8"); 查看全部
最新版本:php 抓取网页数据

无论您是想从链接中获取部分数据,还是获取 XML 文件并将其导入数据库,甚至只是获取网页的内容,Reactor cURL 都是一个强大的 PHP 库。本文主要介绍如何使用这个 PHP 库。启用 cURL 设置 首先,我们必须确保我们的 PHP 启用了这个库。您可以使用 php_info() 函数获取此信息。复制代码 代码如下: 如果您可以在网页上看到以下输出,则说明 cURL 库已启用。如果你看到它,那么你需要设置你的 PHP 并启用这个库。如果你是windows平台的话,很简单,你需要改一下你的php.ini文件

最新版本:php如何设置网页编码
如何在php中设置网页编码:首先打开php文件;然后将代码添加为 "header("Content-Type:text/html;charset=utf-8");";然后保存。
推荐:《PHP 视频教程》

PHP设置页面字符集utf-8
这需要使用 header() 函数。该函数的作用是设置响应消息的内容。
如果想让浏览器按照utf-8编码处理页面,需要在响应消息中设置content-type字段。

content-type,用于定义网络文件的类型和网页的编码,决定了文件接收者会以什么形式和编码方式读取文件。
在 PHP 文件中插入以下代码行,但注意在 header() 函数之前不要有任何输出。
header("Content-Type:text/html;charset=utf-8");
php循环抓取网页内容,同时抓取下载页面文件..
网站优化 • 优采云 发表了文章 • 0 个评论 • 104 次浏览 • 2022-09-14 23:04
php循环抓取网页内容,同时抓取下载页面文件.每抓取一部分数据,就对页面内容做一些修改,比如页面里面第一个数据是姓名,你可以将他改成男,或者其他,这样用户就可以再登录,每一页修改一个,就完成了一次循环。
做爬虫一般用php:首先说说哪些网站是可以使用php进行爬虫的吧?从php五十大框架中可以看出,php爬虫框架有这么几个:模拟登录系统smartscrapy、requests、beautifulsoup、tornado/flask、selenium、pyspider等;动态网页处理引擎base64、html+xmlencoder系列、spider系列等。
当然了,spider系列还有一个requirejs,每个php的工程师或者小白都有可能对这两个框架熟悉,但是base64+requirejs你可能有时候用不上,因为需要配置的路径可能会比较多。flask:php最大的客户端框架,开发效率比python,java这些语言要高,可以从flask中源码学习。
总体来说,php爬虫支持浏览器端和服务器端都可以爬虫。爬虫是否可以用python爬取?因为python一般用于做web网站的后端语言,而php是一种后端语言,所以如果你一定要用python做爬虫可以尝试python-scrapy/python-scrapy是php/python用php写的爬虫框架,里面提供了python和php两种语言版本的爬虫程序。
上面说了在外网爬虫,那么简单说说在本地爬虫的问题吧。要求new一个网页之后,使用postman,get请求一个网站之后,那么可以对所有的页面进行分析,比如标题,内容等等。当然,如果你不用这些的话,那么可以通过javascript在网页中插入特殊符号进行简单分析。如果说你要爬取的是html格式的内容,那么可以做一些解析。
通过抓包工具可以分析一些内容是html还是xml,或者是json。以上说的这些操作,都是自己做,你把任何有爬虫需求的页面或者是文章都写成脚本,然后运行爬虫,那么都可以从网上抓取到有效的内容。 查看全部
php循环抓取网页内容,同时抓取下载页面文件..
php循环抓取网页内容,同时抓取下载页面文件.每抓取一部分数据,就对页面内容做一些修改,比如页面里面第一个数据是姓名,你可以将他改成男,或者其他,这样用户就可以再登录,每一页修改一个,就完成了一次循环。

做爬虫一般用php:首先说说哪些网站是可以使用php进行爬虫的吧?从php五十大框架中可以看出,php爬虫框架有这么几个:模拟登录系统smartscrapy、requests、beautifulsoup、tornado/flask、selenium、pyspider等;动态网页处理引擎base64、html+xmlencoder系列、spider系列等。
当然了,spider系列还有一个requirejs,每个php的工程师或者小白都有可能对这两个框架熟悉,但是base64+requirejs你可能有时候用不上,因为需要配置的路径可能会比较多。flask:php最大的客户端框架,开发效率比python,java这些语言要高,可以从flask中源码学习。

总体来说,php爬虫支持浏览器端和服务器端都可以爬虫。爬虫是否可以用python爬取?因为python一般用于做web网站的后端语言,而php是一种后端语言,所以如果你一定要用python做爬虫可以尝试python-scrapy/python-scrapy是php/python用php写的爬虫框架,里面提供了python和php两种语言版本的爬虫程序。
上面说了在外网爬虫,那么简单说说在本地爬虫的问题吧。要求new一个网页之后,使用postman,get请求一个网站之后,那么可以对所有的页面进行分析,比如标题,内容等等。当然,如果你不用这些的话,那么可以通过javascript在网页中插入特殊符号进行简单分析。如果说你要爬取的是html格式的内容,那么可以做一些解析。
通过抓包工具可以分析一些内容是html还是xml,或者是json。以上说的这些操作,都是自己做,你把任何有爬虫需求的页面或者是文章都写成脚本,然后运行爬虫,那么都可以从网上抓取到有效的内容。
php循环抓取网页内容接入last_each条件的主要节点函数
网站优化 • 优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2022-09-03 07:01
php循环抓取网页内容,每一页内容接入last_each条件,当在循环中查看并执行last_each条件时跳转。解析出来是链接首页内容,然后分析出来的链接内容是动态内容的主要节点,因此可以通过$status,$last_each_example来得到数据后进行循环。
为何不直接用我曾经写过的一个mysql代码,按照你的说法,那个函数基本上是可以对所有页面的动态链接实现预处理。
mysqlphp函数举例1.subst函数在sql语句中检查空值并返回数组。这些空值在mysql查询中被单独列出来。例如:>selectexposure,count(exposure)fromwork_web_downloadforurl_list_basedate;--theurl_list_basedate()函数返回url_list_basedate数组,包括空值,例如:>selectexposure,count(exposure)fromwork_web_downloadwhereurl_list_basedate>cn;2.get和post方法都需要使用一个请求头(header)。
get方法允许从域中读取内容,或仅从页面获取内容。所有数据都会经过dns,然后调用xmlhttprequest请求xml对象,得到的xml对象会用链接形式访问服务器。3.cookie(),zookeeper,redis都会获取xml对象xmlhttprequest4.上面方法一般适用于存储一些关键字或关键字串;如:"1""2""3"中的第一个字符;以及等等,请参考配置文件,以及文档说明。 查看全部
php循环抓取网页内容接入last_each条件的主要节点函数
php循环抓取网页内容,每一页内容接入last_each条件,当在循环中查看并执行last_each条件时跳转。解析出来是链接首页内容,然后分析出来的链接内容是动态内容的主要节点,因此可以通过$status,$last_each_example来得到数据后进行循环。

为何不直接用我曾经写过的一个mysql代码,按照你的说法,那个函数基本上是可以对所有页面的动态链接实现预处理。

mysqlphp函数举例1.subst函数在sql语句中检查空值并返回数组。这些空值在mysql查询中被单独列出来。例如:>selectexposure,count(exposure)fromwork_web_downloadforurl_list_basedate;--theurl_list_basedate()函数返回url_list_basedate数组,包括空值,例如:>selectexposure,count(exposure)fromwork_web_downloadwhereurl_list_basedate>cn;2.get和post方法都需要使用一个请求头(header)。
get方法允许从域中读取内容,或仅从页面获取内容。所有数据都会经过dns,然后调用xmlhttprequest请求xml对象,得到的xml对象会用链接形式访问服务器。3.cookie(),zookeeper,redis都会获取xml对象xmlhttprequest4.上面方法一般适用于存储一些关键字或关键字串;如:"1""2""3"中的第一个字符;以及等等,请参考配置文件,以及文档说明。
php循环抓取网页内容的小技巧,首先你需要有一个php的环境
网站优化 • 优采云 发表了文章 • 0 个评论 • 56 次浏览 • 2022-08-29 00:00
php循环抓取网页内容的小技巧,首先你需要有一个php的环境。也许centos环境没有问题,我们假设你就是在windows环境下进行了phpcloud训练。为了让爬虫时间更短些,有人建议做一个循环抓取模拟框架,用它来训练你的php程序。robotstxt替换掉你用多余的头文件,不然你写的php里面所有需要用到的网页内容都会用到它,也会很繁琐。
实践中,我们已经能基本满足需求了。你下次使用robotstxt开始抓取的时候需要修改框架的开头设置,这时你需要在程序部分或框架部分填写robotstxt的地址。http方面的话,不推荐用服务器的登录名作为你要抓取的页面的密码,用password就可以。在txt编码时我们需要注意的是,http协议的编码强制性hh13!,请自行检查。
需要特别注意,http协议对头像进行了混淆,可能需要你额外创建一个头像文件,并且要将使用代理端口进行认证;需要特别注意的是,由于http协议的安全性,不能获取用户的浏览器内容,所以你需要将json格式的网页地址使用accesstoken进行加密。获取时候必须先查一下是否有已经存在的accesstoken。
如果你只是想获取网页内容,不需要认证,使用代理端口就行了。认证的话,对一些应用必须用token认证,比如你需要获取一个地址信息,而你又不希望浏览器对地址本身做任何内容的改动;有的时候也需要认证请求人,比如你需要看到认证时候的名字。有两种解决方案,一是用人工智能机器人(类似于机器人抓取网页),二是你自己写出这样的结构化语句。
pc环境采用的是标准http协议,这里是可以设置的;移动端是由浏览器完成的,移动端使用的是http1.1协议,http1.1的话会返回你格式化后的html页面,对于http1.1来说并不适用于移动端。 查看全部
php循环抓取网页内容的小技巧,首先你需要有一个php的环境
php循环抓取网页内容的小技巧,首先你需要有一个php的环境。也许centos环境没有问题,我们假设你就是在windows环境下进行了phpcloud训练。为了让爬虫时间更短些,有人建议做一个循环抓取模拟框架,用它来训练你的php程序。robotstxt替换掉你用多余的头文件,不然你写的php里面所有需要用到的网页内容都会用到它,也会很繁琐。

实践中,我们已经能基本满足需求了。你下次使用robotstxt开始抓取的时候需要修改框架的开头设置,这时你需要在程序部分或框架部分填写robotstxt的地址。http方面的话,不推荐用服务器的登录名作为你要抓取的页面的密码,用password就可以。在txt编码时我们需要注意的是,http协议的编码强制性hh13!,请自行检查。
需要特别注意,http协议对头像进行了混淆,可能需要你额外创建一个头像文件,并且要将使用代理端口进行认证;需要特别注意的是,由于http协议的安全性,不能获取用户的浏览器内容,所以你需要将json格式的网页地址使用accesstoken进行加密。获取时候必须先查一下是否有已经存在的accesstoken。

如果你只是想获取网页内容,不需要认证,使用代理端口就行了。认证的话,对一些应用必须用token认证,比如你需要获取一个地址信息,而你又不希望浏览器对地址本身做任何内容的改动;有的时候也需要认证请求人,比如你需要看到认证时候的名字。有两种解决方案,一是用人工智能机器人(类似于机器人抓取网页),二是你自己写出这样的结构化语句。
pc环境采用的是标准http协议,这里是可以设置的;移动端是由浏览器完成的,移动端使用的是http1.1协议,http1.1的话会返回你格式化后的html页面,对于http1.1来说并不适用于移动端。
php循环抓取网页内容的三种操作姿势抓取文本类网页
网站优化 • 优采云 发表了文章 • 0 个评论 • 55 次浏览 • 2022-08-18 20:01
php循环抓取网页内容的三种操作姿势关于php循环抓取的三种操作姿势抓取文本类网页可能比抓取代码网页要稍微慢一点,主要是因为文本网页内容较多,大部分的php代码都在/var/lib/php中,一些特殊的php代码并没有引入,为了解决这个问题,有时候就采用php循环抓取网页内容。下面就列举出几种常见的php循环抓取网页内容的姿势。
以下的代码在上海博图php循环框架,总共只有不到128个字符,所以可以分别抓取1,2,3var/lib/php/php_sprintf_cmd(){php_sprintf_cmd('switchtowhichcontentcanbewrited.',‘switch’);}php_sprintf_cmd('endoffile',‘file’);php_sprintf_cmd('destroyfilesusingphp$filename```);php_sprintf_cmd('filename:file',‘filename’);php_sprintf_cmd('stopfiles',‘stop’);//不知道什么原因,其实这个函数可以返回完整的php代码php_fd_cmd(‘clearfile’,‘clear’);php_fd_cmd(‘allfileson’,‘all’);php_fd_cmd(‘endoffile’,‘end’);php_sprintf_cmd(‘startfiles',‘start’);//因为php_sprintf_cmd返回的是php代码的页面地址,是一个文本php_sprintf_cmd(‘startfiles',‘start’);php_sprintf_cmd(‘beginfiles’,‘begin’);php_sprintf_cmd(‘content='{.$data}'```);php_sprintf_cmd(‘destoryfiles',‘destory’);php_sprintf_cmd(‘endfiles',‘end’);php_sprintf_cmd(‘filename:file’,‘filename’);php_sprintf_cmd(‘endfiles',‘end’);php_sprintf_cmd(‘lookatthenextfile’,‘lookat’);php_sprintf_cmd(‘aboutthenextfile’,‘about’);php_sprintf_cmd(‘ifcontentlayoutisgreaterthan’,‘greater’);php_sprintf_cmd(‘aboutthenextfile’,‘about’);php_sprintf_cmd(‘whichmatchesthenextfile’,‘which’);php_sprintf_cmd(‘thenmatchesthenextfile’,‘then’);php_sprintf_cmd(‘ifmatchesthesubnet’,‘if’);php_sprintf_cmd(‘parametersinline’,‘parameters’);php_sprintf_cmd(‘content’,‘parameters’);php_sprintf_cmd(‘d。 查看全部
php循环抓取网页内容的三种操作姿势抓取文本类网页

php循环抓取网页内容的三种操作姿势关于php循环抓取的三种操作姿势抓取文本类网页可能比抓取代码网页要稍微慢一点,主要是因为文本网页内容较多,大部分的php代码都在/var/lib/php中,一些特殊的php代码并没有引入,为了解决这个问题,有时候就采用php循环抓取网页内容。下面就列举出几种常见的php循环抓取网页内容的姿势。

以下的代码在上海博图php循环框架,总共只有不到128个字符,所以可以分别抓取1,2,3var/lib/php/php_sprintf_cmd(){php_sprintf_cmd('switchtowhichcontentcanbewrited.',‘switch’);}php_sprintf_cmd('endoffile',‘file’);php_sprintf_cmd('destroyfilesusingphp$filename```);php_sprintf_cmd('filename:file',‘filename’);php_sprintf_cmd('stopfiles',‘stop’);//不知道什么原因,其实这个函数可以返回完整的php代码php_fd_cmd(‘clearfile’,‘clear’);php_fd_cmd(‘allfileson’,‘all’);php_fd_cmd(‘endoffile’,‘end’);php_sprintf_cmd(‘startfiles',‘start’);//因为php_sprintf_cmd返回的是php代码的页面地址,是一个文本php_sprintf_cmd(‘startfiles',‘start’);php_sprintf_cmd(‘beginfiles’,‘begin’);php_sprintf_cmd(‘content='{.$data}'```);php_sprintf_cmd(‘destoryfiles',‘destory’);php_sprintf_cmd(‘endfiles',‘end’);php_sprintf_cmd(‘filename:file’,‘filename’);php_sprintf_cmd(‘endfiles',‘end’);php_sprintf_cmd(‘lookatthenextfile’,‘lookat’);php_sprintf_cmd(‘aboutthenextfile’,‘about’);php_sprintf_cmd(‘ifcontentlayoutisgreaterthan’,‘greater’);php_sprintf_cmd(‘aboutthenextfile’,‘about’);php_sprintf_cmd(‘whichmatchesthenextfile’,‘which’);php_sprintf_cmd(‘thenmatchesthenextfile’,‘then’);php_sprintf_cmd(‘ifmatchesthesubnet’,‘if’);php_sprintf_cmd(‘parametersinline’,‘parameters’);php_sprintf_cmd(‘content’,‘parameters’);php_sprintf_cmd(‘d。
php循环抓取网页内容并批量删除后缀,实现首页内容去重
网站优化 • 优采云 发表了文章 • 0 个评论 • 61 次浏览 • 2022-07-30 03:02
php循环抓取网页内容并批量删除后缀,实现首页内容去重,并在批量删除的后缀前加一个#。
这里面有很多技巧的,在我的一个回答里有,
php循环抓取网页内容并批量删除后缀,
使用firebug抓取网页内容之后用ff对网页进行div级别元素的查找,查找到div元素之后进行div级别上的缩小或者查找父级元素。获取innerhtml后进行合并处理。
任何把网页的php页面代码用正则表达式匹配下就可以了,比如我要找javascript,
php循环抓取网页内容并批量删除后缀,实现首页内容去重,并在批量删除的后缀前加一个#。php循环抓取网页内容并批量删除后缀,实现首页内容去重,并在批量删除的后缀前加一个#。#数字与字母的结合使用。同时,$_get[0]匹配后缀是#的网页。
php循环抓取网页内容并批量删除后缀,实现首页内容去重,并在批量删除的后缀前加一个#。#数字与字母的结合使用。同时,$_get[0]匹配后缀是#的网页。#数字与字母的结合使用。
第一,可以用php对url进行href引用, 查看全部
php循环抓取网页内容并批量删除后缀,实现首页内容去重
php循环抓取网页内容并批量删除后缀,实现首页内容去重,并在批量删除的后缀前加一个#。
这里面有很多技巧的,在我的一个回答里有,

php循环抓取网页内容并批量删除后缀,
使用firebug抓取网页内容之后用ff对网页进行div级别元素的查找,查找到div元素之后进行div级别上的缩小或者查找父级元素。获取innerhtml后进行合并处理。
任何把网页的php页面代码用正则表达式匹配下就可以了,比如我要找javascript,

php循环抓取网页内容并批量删除后缀,实现首页内容去重,并在批量删除的后缀前加一个#。php循环抓取网页内容并批量删除后缀,实现首页内容去重,并在批量删除的后缀前加一个#。#数字与字母的结合使用。同时,$_get[0]匹配后缀是#的网页。
php循环抓取网页内容并批量删除后缀,实现首页内容去重,并在批量删除的后缀前加一个#。#数字与字母的结合使用。同时,$_get[0]匹配后缀是#的网页。#数字与字母的结合使用。
第一,可以用php对url进行href引用,
php 循环抓取网页内容 DA Techie | 一条“蟒蛇”的故事
网站优化 • 优采云 发表了文章 • 0 个评论 • 92 次浏览 • 2022-07-18 02:19
哈哈
第一个故事
What is Python?
白
1
What?
今天给大家介绍的是一只快速灵活的大蟒蛇一种编程语言Python。
引用官方的说法,Python(意为“蟒蛇”)是一种“解释型的、面向对象的、带有动态语义的高级程序设计语言”。
正如我们熟悉的C、C++或是Java一样,这也是一门编程语言。我们知道世界上还有很多编程语言,例如正常的语言C#、Ruby、PHP,也有神奇的中文编程语言如易语言、中蟒(中文Python的意思)。
程序猿的创造力是无穷的,如果熟悉了编译原理,就可以自己创造属于自己的语言。正如Guido挚爱的电视剧是Monty Python’s Flying Circus,他给自己的语言命名为Python。
从Python出现到今天,它的框架已经确立。Python语言以对象为核心组织代码,支持多种编程范式,采用动态类型,自动进行内存回收。Python的生态系统开始拓展到第三方包。这些包,如Django、web.py、wxpython、numpy、matplotlib、PIL,将Python升级成了物种丰富的热带雨林。
Python有哪些用途呢?
①Web开发(如Django、YouTube……)
②视频游戏开发(如EVE)
③桌面GUI
④软件开发(如Blender)
⑤人工智能和深度学习(如TensorFlow、Caffe等架构。
Python如今竟大行其道?
2017年7月20日,IEEE Spectrum 发布了第四届顶级编程语言交互排行榜。Python 的排名从去年开始就借助人工智能持续上升,现在它已经成为了第一名。
第二个故事
为什么使用Python
优劣分析篇
输12
1
易于学习
如果你听到周围有人说“一夜速成”“三行代码”“最新操作” ,那么他十有八成是在学习Python,因为Python的易于掌握,许多非信息技术专业的学科直接以Python作为入门语言。
对于学习了C、C++或Java的同学来说,Python就更易于掌握,Python的数据类型、操作语句、对象的使用、模块(库,相当于C++中的头文件)和文件操作都有很大的共通性。作为一门解释型的语言,Python甚至看上去更像伪码,接近人的自然表达,因此很容易上手。
例如,文件的读取:
2
优雅简洁
Python的设计哲学是“优雅”、“明确”、“简单”。Python对于语句控制范围的方法是缩进,取代了大括号和分号(在C++里巧妙使用分号和大括号,可以创造混乱或奇妙的代码图案),因此,Python代码相对整洁美观。因为没有分号,换行时要在结尾加上\。
同时,Python中可以直接使用变量,无需进行声明。另外,Python中一切皆对象(恩?对象?目光突然闪烁),因此一切都可以赋值给变量,或作为参数传递给函数。因为Python具有对象回收机制,所以在编写代码的过程中无需考虑释放内存空间。
关于所说的缩进:
3
充足的模块
Python语言的核心十分强大,同时还提供了很多有趣的工具,这些就是Python的模块,最常用的是它的标准库(standard library),同时还有一些外来的模块。
而且任何Python程序都可以作为模块导入,所以不仅可以使用Python的自带电池,还可以自己发电。
在使用模块时,要使用import语句,同时注意import-only-once,否则容易出现两个模块相互导入,那么就会无限循环。
以下是一些常用模块:
4
机器学习方面
Python在科学运算,数据整理还有出图像结果的模块有:
numpy, pandas, matplotlib。
在机器学习方面,scikit learn 是汇集了众多机器学习方法的模块,它支持各种各样的机器学习方法。
在神经网络方面有著名的tensorflow等等,以及caffe架构。
(图源)
5
胶水语言
Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。
6
物联网
Python随着物联网技术的普及将会进一步发展,目前Rasp-berry Pi等新型平台已经将其作为开发基础。
7
一些不足之处
①速度:作为一门解释型语言,其速度往往低于编译语言。如果在大型工程中核心代码需要考虑效率的提高,可以用C语言改写,Python对此兼容性很好。
②移动端:Python在移动计算领域表现不佳,目前利用Python开发的移动应用非常罕见。
③其他:例如没有指针;属于动态类语言,设计上存在一些问题;……
输入
第三个故事
Python
让我们开始飞起来
这时候,如果你的手头有台电脑,那么就可以开始和世界打个招呼了。
1、搭建环境:
①Windows:
访问。点击download,下载Windows版本的安装文件。
②Linux/Unix/Mac OS X:
打开终端,输入python,按下回车
③希望使用新版本的Python:
访问,根据系统下载相应的安装软件。
2、hello world:
来和世界打个招呼吧!
>>>print "hello world"
3、我们还可以试试字符串操作:
这时我们不能直接在终端写程序,因为Python不会将多行的语句编译,于是我们需要使用sublime或者Python自带的IDLE。以MacOS为例,可以在终端输入IDLE打开代码编辑器。
我们可以通过input( )读取输入值。然后对字符串进行简单的操作。
例如我们可以拼接:
'The '+'man '+'who '+'changed '+'China.' = 'The man who changed China.'
我们还可以做乘法:
'six ' * 3 = 'six six six '
我们还可以进行分割:
a = 'The man'
a[0:2] = 'Th' a[4] = m
也可以进行查找:
'who' in 'The man who changed China.'=True.
4、来试一试字典Dict的操作
Python有独特的字典结构,通过哈希表(hash table)实现。相当于说,字典是一个数组,而数组的索引是键经过哈希函数处理后得到的。哈希函数的目的是使键均匀地分布在数组中。由于不同的键可能具有相同的哈希值,即可能出现冲突,高级的哈希函数能够使冲突数目最小化。
这个字典的实现可以通过:
a = {'年轻':'simple','鸭嘴笔':'engineer','教授':'report'}
修改元素:a['年轻'] = young
添加元素:a[new key] = value
第四个故事
关于Python的数据类型
和一些拓展的应用
输12
Python的数据类型有:
基本类型:
整数、浮点数、布尔型……
顾名思义,这是基本的、熟悉的类型。变量可以直接使用,不需要声明。例如:
a = 666
print a
结果: 666
集合类型:
列表(list)、元组(tuple)、字符串:这是属于序列的典型结构,他们包含的元素都进行了编号(从0开始)。其中,列表是可变的,元组和字符串是不可变的(注意,这和C、C++是不同的)。通过分片的操作可以访问序列的一部分。
例如:a = [1,2,3,4,5] 就是一个list。
a.insert(3,6) 就可以在第3个位置插入6。
a[2]=8 就可以对list元素进行修改。
字典(dict):当索引不好用时,我们可以自己对数据建立索引,例如前文的例子。
此外,还有集合(set)等类型。
拓展应用:
①图形用户界面:可以参看wxPython(可以跨平台)、Tkinter(TK平台)或PythonWin(只能在Windows使用)、PyQt(Qt平台)等平台。
②数据库支持:可以参看PySQLite。
③网络编程:可以使用socket模块建立小型的服务器和客户机。
④ Web方面:例如进行屏幕抓取,CGI和Web服务开发。屏幕抓取是程序下载网页并从中提取信息的过程,在这里如果我们需要从动态的网页提取信息,那么这项技术就会十分有用,比如说提取一下验证的二维码,那么……
例如,我需要一个网页的所有内容:
from urllib2 import urlopen
doc = urlopen("").read()
print doc
⑤深度学习方面:例如minst(数字图像识别)的代码。
可以参看:
输入
第五个故事
结束啦
此处只是
参考文献部分
参考文献:
《Python基础教程》【挪】Magnus Lie Hetland
Introduction to Python 【THU】地精工程师
更多内容可以在知乎和github上找到,感兴趣的同学可以到github上进行happy的探索。
THU自动化系学生科协(ASTA)信息推送平台,搭建科研之路,带你走向人生巅峰 查看全部
php 循环抓取网页内容 DA Techie | 一条“蟒蛇”的故事
哈哈
第一个故事
What is Python?
白
1
What?
今天给大家介绍的是一只快速灵活的大蟒蛇一种编程语言Python。
引用官方的说法,Python(意为“蟒蛇”)是一种“解释型的、面向对象的、带有动态语义的高级程序设计语言”。
正如我们熟悉的C、C++或是Java一样,这也是一门编程语言。我们知道世界上还有很多编程语言,例如正常的语言C#、Ruby、PHP,也有神奇的中文编程语言如易语言、中蟒(中文Python的意思)。
程序猿的创造力是无穷的,如果熟悉了编译原理,就可以自己创造属于自己的语言。正如Guido挚爱的电视剧是Monty Python’s Flying Circus,他给自己的语言命名为Python。
从Python出现到今天,它的框架已经确立。Python语言以对象为核心组织代码,支持多种编程范式,采用动态类型,自动进行内存回收。Python的生态系统开始拓展到第三方包。这些包,如Django、web.py、wxpython、numpy、matplotlib、PIL,将Python升级成了物种丰富的热带雨林。
Python有哪些用途呢?
①Web开发(如Django、YouTube……)
②视频游戏开发(如EVE)
③桌面GUI
④软件开发(如Blender)
⑤人工智能和深度学习(如TensorFlow、Caffe等架构。
Python如今竟大行其道?
2017年7月20日,IEEE Spectrum 发布了第四届顶级编程语言交互排行榜。Python 的排名从去年开始就借助人工智能持续上升,现在它已经成为了第一名。
第二个故事
为什么使用Python
优劣分析篇
输12
1
易于学习
如果你听到周围有人说“一夜速成”“三行代码”“最新操作” ,那么他十有八成是在学习Python,因为Python的易于掌握,许多非信息技术专业的学科直接以Python作为入门语言。
对于学习了C、C++或Java的同学来说,Python就更易于掌握,Python的数据类型、操作语句、对象的使用、模块(库,相当于C++中的头文件)和文件操作都有很大的共通性。作为一门解释型的语言,Python甚至看上去更像伪码,接近人的自然表达,因此很容易上手。
例如,文件的读取:
2
优雅简洁
Python的设计哲学是“优雅”、“明确”、“简单”。Python对于语句控制范围的方法是缩进,取代了大括号和分号(在C++里巧妙使用分号和大括号,可以创造混乱或奇妙的代码图案),因此,Python代码相对整洁美观。因为没有分号,换行时要在结尾加上\。
同时,Python中可以直接使用变量,无需进行声明。另外,Python中一切皆对象(恩?对象?目光突然闪烁),因此一切都可以赋值给变量,或作为参数传递给函数。因为Python具有对象回收机制,所以在编写代码的过程中无需考虑释放内存空间。
关于所说的缩进:
3
充足的模块
Python语言的核心十分强大,同时还提供了很多有趣的工具,这些就是Python的模块,最常用的是它的标准库(standard library),同时还有一些外来的模块。
而且任何Python程序都可以作为模块导入,所以不仅可以使用Python的自带电池,还可以自己发电。
在使用模块时,要使用import语句,同时注意import-only-once,否则容易出现两个模块相互导入,那么就会无限循环。
以下是一些常用模块:

4
机器学习方面
Python在科学运算,数据整理还有出图像结果的模块有:
numpy, pandas, matplotlib。
在机器学习方面,scikit learn 是汇集了众多机器学习方法的模块,它支持各种各样的机器学习方法。
在神经网络方面有著名的tensorflow等等,以及caffe架构。
(图源)
5
胶水语言
Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。
6
物联网
Python随着物联网技术的普及将会进一步发展,目前Rasp-berry Pi等新型平台已经将其作为开发基础。
7
一些不足之处
①速度:作为一门解释型语言,其速度往往低于编译语言。如果在大型工程中核心代码需要考虑效率的提高,可以用C语言改写,Python对此兼容性很好。
②移动端:Python在移动计算领域表现不佳,目前利用Python开发的移动应用非常罕见。
③其他:例如没有指针;属于动态类语言,设计上存在一些问题;……
输入
第三个故事
Python
让我们开始飞起来
这时候,如果你的手头有台电脑,那么就可以开始和世界打个招呼了。
1、搭建环境:
①Windows:
访问。点击download,下载Windows版本的安装文件。
②Linux/Unix/Mac OS X:
打开终端,输入python,按下回车
③希望使用新版本的Python:
访问,根据系统下载相应的安装软件。
2、hello world:
来和世界打个招呼吧!
>>>print "hello world"
3、我们还可以试试字符串操作:
这时我们不能直接在终端写程序,因为Python不会将多行的语句编译,于是我们需要使用sublime或者Python自带的IDLE。以MacOS为例,可以在终端输入IDLE打开代码编辑器。
我们可以通过input( )读取输入值。然后对字符串进行简单的操作。
例如我们可以拼接:
'The '+'man '+'who '+'changed '+'China.' = 'The man who changed China.'
我们还可以做乘法:
'six ' * 3 = 'six six six '
我们还可以进行分割:
a = 'The man'
a[0:2] = 'Th' a[4] = m
也可以进行查找:
'who' in 'The man who changed China.'=True.

4、来试一试字典Dict的操作
Python有独特的字典结构,通过哈希表(hash table)实现。相当于说,字典是一个数组,而数组的索引是键经过哈希函数处理后得到的。哈希函数的目的是使键均匀地分布在数组中。由于不同的键可能具有相同的哈希值,即可能出现冲突,高级的哈希函数能够使冲突数目最小化。
这个字典的实现可以通过:
a = {'年轻':'simple','鸭嘴笔':'engineer','教授':'report'}
修改元素:a['年轻'] = young
添加元素:a[new key] = value
第四个故事
关于Python的数据类型
和一些拓展的应用
输12
Python的数据类型有:
基本类型:
整数、浮点数、布尔型……
顾名思义,这是基本的、熟悉的类型。变量可以直接使用,不需要声明。例如:
a = 666
print a
结果: 666
集合类型:
列表(list)、元组(tuple)、字符串:这是属于序列的典型结构,他们包含的元素都进行了编号(从0开始)。其中,列表是可变的,元组和字符串是不可变的(注意,这和C、C++是不同的)。通过分片的操作可以访问序列的一部分。
例如:a = [1,2,3,4,5] 就是一个list。
a.insert(3,6) 就可以在第3个位置插入6。
a[2]=8 就可以对list元素进行修改。
字典(dict):当索引不好用时,我们可以自己对数据建立索引,例如前文的例子。
此外,还有集合(set)等类型。
拓展应用:
①图形用户界面:可以参看wxPython(可以跨平台)、Tkinter(TK平台)或PythonWin(只能在Windows使用)、PyQt(Qt平台)等平台。
②数据库支持:可以参看PySQLite。
③网络编程:可以使用socket模块建立小型的服务器和客户机。
④ Web方面:例如进行屏幕抓取,CGI和Web服务开发。屏幕抓取是程序下载网页并从中提取信息的过程,在这里如果我们需要从动态的网页提取信息,那么这项技术就会十分有用,比如说提取一下验证的二维码,那么……
例如,我需要一个网页的所有内容:
from urllib2 import urlopen
doc = urlopen("").read()
print doc
⑤深度学习方面:例如minst(数字图像识别)的代码。
可以参看:
输入
第五个故事
结束啦
此处只是
参考文献部分
参考文献:
《Python基础教程》【挪】Magnus Lie Hetland
Introduction to Python 【THU】地精工程师
更多内容可以在知乎和github上找到,感兴趣的同学可以到github上进行happy的探索。
THU自动化系学生科协(ASTA)信息推送平台,搭建科研之路,带你走向人生巅峰
php 循环抓取网页内容 [Python从零到壹] 十
网站优化 • 优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2022-07-18 02:18
欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。
Python系列整体框架包括基础语法10篇、网络爬虫30篇、可视化分析10篇、机器学习20篇、大数据分析20篇、图像识别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的关注、点赞和转发就是对秀璋最大的支持,知识无价人有情,希望我们都能在人生路上共同成长。
前一篇文章讲述了Selenium基础技术,涉及基础入门、元素定位、常用方法和属性、鼠标操作、键盘操作和导航控制。本文将结合具体实例进行深入地分析,通过三个基于Selenium技术的爬虫,爬取Wikipedia、百度百科和互动百科消息盒的例子,从实际应用出发来学习利用。基础性文章,希望对您有所帮助。
在线百科是基于Wiki技术的、动态的、免费的、可自由访问和编辑的多语言百科全书的Web2.0知识库系统。它是互联网中公开的、最大数量的用户生成的知识库,并且具有知识面覆盖度广、结构化程度高、信息更新速度快和开放性好等优势。其中被广泛使用的三大在线百科包括Wikipedia、百度百科和互动百科。
文章目录:
下载地址:
作者新开的“娜璋AI安全之家”将专注于Python和安全技术,主要分享Web渗透、系统安全、人工智能、大数据分析、图像识别、恶意代码检测、CVE复现、威胁情报分析等文章。虽然作者是一名技术小白,但会保证每一篇文章都会很用心地撰写,希望这些基础性文章对你有所帮助,在Python和安全路上与大家一起进步。
一.三大在线百科
随着互联网和大数据的飞速发展,我们需要从海量信息中挖掘出有价值的信息,而在收集这些海量信息过程中,通常都会涉及到底层数据的抓取构建工作,比如多源知识库融合、知识图谱构建、计算引擎建立等。其中具有代表性的知识图谱应用包括谷歌公司的Knowledge Graph、Facebook推出的实体搜索服务(Graph Search)、百度公司的百度知心、搜狗公司的搜狗知立方等。这些应用的技术可能会有所区别,但相同的是它们在构建过程中都利用了Wikipedia、百度百科、互动百科等在线百科知识。所以本章将教大家分别爬取这三大在线百科。
百科是指天文、地理、自然、人文、宗教、信仰、文学等全部学科的知识的总称,它可以是综合性的,包含所有领域的相关内容;也可以是面向专业性的。接下来将介绍常见的三大在线百科,它们是信息抽取研究的重要语料库之一。
1.Wikipedia
“Wikipedia is a free online encyclopedia with the aim to allow anyone to edit articles.” 这是Wikipedia的官方介绍。Wikipedia是一个基于维基技术的多语言百科全书协作计划,用多种语言编写的网络百科全书。Wikipedia一词取自于该网站核心技术“Wiki”以及具有百科全书之意的“encyclopedia”共同创造出来的新混成词“Wikipedia”,接受任何人编辑。
在所有在线百科中,Wikipedia知识准确性最好,结构化最好,但是Wikipedia本以英文知识为主,涉及的中文知识很少。在线百科页面通常包括:Title(标题)、Description(摘要描述)、InfoBox(消息盒)、Categories(实体类别)、Crosslingual Links(跨语言链接)等。Wikipedia中实体“黄果树瀑布”的中文页面信息如图1所示。
图1所示的Wikipedia信息主要包括:
2.百度百科
百度百科是百度公司推出的一部内容开放、自由的网络百科全书平台。截至2017年4月,百度百科已经收录了超过1432万的词条,参与词条编辑的网友超过610万人,几乎涵盖了所有已知的知识领域。
百度百科旨在创造一个涵盖各领域知识的中文信息收集平台。百度百科强调用户的参与和奉献精神,充分调动互联网用户的力量,汇聚广大用户的头脑智慧,积极进行交流和分享。同时,百度百科实现与百度搜索、百度知道的结合,从不同的层次上满足用户对信息的需求。
与Wikipedia相比,百度百科所包含中文知识最多最广,但是准确性相对较差。百度百科页面也包括:Title(标题)、Description(摘要描述)、InfoBox(消息盒)、Categories(实体类别)、Crosslingual Links(跨语言链接)等。图2为百度百科“Python”网页知识,该网页的消息盒为中间部分,采用键值对(Key-value Pair)的形式,比如“外文名”对应的值为“Python”,“经典教材”对应的值为“Head First Python”等。
3.互动百科
互动百科()是中文百科网站的开拓与领军者,致力于为数亿中文用户免费提供海量、全面、及时的百科信息,并通过全新的维基平台不断改善用户对信息的创作、获取和共享方式。截止到2016年年底,互动百科已经发展成为由超过1100万用户共同打造的拥有1600万词条、2000万张图片、5万个微百科的百科网站,新媒体覆盖人群1000余万人,手机APP用户超2000万。
相对于百度百科而言,互动百科的准确性更高、结构化更好,在专业领域上知识质量较高,故研究者通常会选择互动百科作为主要语料之一。图3显示的是互动百科的首页。
互动百科的信息分为两种形式存储,一种是百科中结构化的信息盒,另一种是百科正文的自由文本。对于百科中的词条文章来说,只有少数词条含有结构化信息盒,但所有词条均含有自由文本。信息盒是采用结构化方式展现词条信息的形式,一个典型的百科信息盒展示例子如图4,显示了Python的InfoBox信息,采用键值对的形式呈现,比如Python的“设计人”为“Guido van Rossum”。
下面分别讲解Selenium技术爬取三大在线百科的消息盒,三大百科的分析方法略有不同。Wikipedia先从列表页面分别获取20国集团(简称G20)各国家的链接,再依次进行网页分析和信息爬取;百度百科调用Selenium自动操作,输入各种编程语言名,再进行访问定位爬取;互动百科采用分析网页的链接url,再去到不同的景点进行分析及信息抓取。
二.Selenium爬取百度百科知识
百度百科作为最大的中文在线百科或中文知识平台,它提供了各行各业的知识,可以供研究者从事各方面的研究。虽然词条的准确率不是最好,但依然可以为从事数据挖掘、知识图谱、自然语言处理、大数据等领域的学者提供很好的知识平台。
1.网页分析
本小节将详细讲解Selenium爬取百度百科消息盒的例子,爬取的主题为10个国家5A级景区,其中景区的名单定义在TXT文件中,然后再定向爬取它们的消息盒信息。其中网页分析的核心步骤如下:
(1) 调用Selenium自动搜索百科关键词
首先,调用Selenium技术访问百度百科首页,网址为:
图5为百度百科首页,其顶部为搜索框,输入相关词条如“故宫”,点击“进入词条”,可以得到故宫词条的详细信息。
然后,在浏览器鼠标选中“进入词条”按钮,右键鼠标点击“审查元素”,可以查看该按钮对应的HTML源代码,如图6所示。注意,不同浏览器查看网页控件或内容对应源代码的称呼是不同的,图中使用的是360安全浏览器,称呼为“审查元素”,而Chrome浏览器称为“检查”,QQ浏览器称为“检查”等。
“进入词条”对应的HTML核心代码如下所示:
调用Selenium函数可以获取输入框input控件。
然后自动输入“故宫”,获取按钮“进入词条”并自动点击,这里采用的方法是在键盘上输入回车键即可访问“故宫”界面,核心代码如下所示:
driver.get("http://baike.baidu.com/") <br />elem_inp=driver.find_element_by_xpath("//form[@id='searchForm']/input") <br />elem_inp.send_keys(name) <br />elem_inp.send_keys(Keys.RETURN) <br />
(2) 调用Selenium访问“故宫”页面并定位消息盒
第一步完成后,进入“故宫”页面然后找到中间消息盒InfoBox部分,右键鼠标并点击“审查元素”,返回结果如图7所示。
消息盒核心代码如下:
消息盒主要采用的形式存储,详细概括了“故宫”实体的信息。例如,属性“中文名称”对应值为“北京故宫”,属性“外文名称”对应值为“Fobidden City”。对应的HTML部分源代码如下。
整个消息盒位于< div class=“basic-info J-basic-info cmn-clearfix” >标签中,接下来是< dl >、< dt >、< dd >一组合HTML标签,其中消息盒div布局共包括两个< dl >…布局,一个是记录消息盒左边部分的内容,另一个< dl >记录了消息盒右部分的内容,每个< dl >标签里再定义属性和属性值,如图8所示。
注意:使用dt、dd最外层必须使用dl包裹,< dl >标签定义了定义列表(Definition List),< dt >标签定义列表中的项目,< dd >标签描述列表中的项目,此组合标签叫做表格标签,与table表格组合标签类似。
接下来调用Selenium扩展包的find_elements_by_xpath()函数分别定位属性和属性值,该函数返回多个属性及属性值集合,再通过for循环输出已定位的多个元素值。代码如下:
elem_name=driver.find_elements_by_xpath("//div[@class='basic-info J-basic-info cmn-clearfix']/dl/dt") <br />elem_value=driver.find_elements_by_xpath("//div[@class='basic-info J-basic-info cmn-clearfix']/dl/dd")<br />for e in elem_name:<br /> print(e.text)<br />for e in elem_value:<br /> print(e.text)<br />
此时,使用Selenium技术爬取百度百科国家5A级景区的分析方法就讲解完了,下面是这部分完整的代码及一些难点。
2.代码实现
注意,接下来我们尝试定义多个Python文件相互调用实现爬虫功能。完整代码包括两个文件,即:
test10_01_baidu.py
# -*- coding: utf-8 -*-<br />"""<br />test10_01_baidu.py<br /> 定义了主函数main并调用getinfo.py文件<br />By:Eastmount CSDN 2021-06-23<br />"""<br />import codecs <br />import getinfo #引用模块<br /><br />#主函数 <br />def main():<br /> #文件读取景点信息 <br /> source = open('data.txt','r',encoding='utf-8') <br /> for name in source: <br /> print(name)<br /> getinfo.getInfobox(name) <br /> print('End Read Files!') <br /> source.close()<br />if __name__ == '__main__':<br /> main()<br />
在代码中调用“import getinfo”代码导入getinfo.py文件,导入之后就可以在main函数中调用getinfo.py文件中的函数和属性,接着我们调用getinfo.py文件中的getInfobox()函数,执行爬取消息盒的操作。
getinfo.py
# coding=utf-8<br /><br />"""<br />getinfo.py:获取信息<br />By:Eastmount CSDN 2021-06-23<br />"""<br />import os <br />import codecs<br />import time<br />from selenium import webdriver <br />from selenium.webdriver.common.keys import Keys<br /><br />#getInfobox函数: 获取国家5A级景区消息盒 <br />def getInfobox(name): <br /> try: <br /> #访问百度百科并自动搜索<br /> driver = webdriver.Firefox() <br /> driver.get("http://baike.baidu.com/") <br /> elem_inp = driver.find_element_by_xpath("//form[@id='searchForm']/input") <br /> elem_inp.send_keys(name) <br /> elem_inp.send_keys(Keys.RETURN) <br /> time.sleep(1)<br /> print(driver.current_url)<br /> print(driver.title)<br /> <br /> #爬取消息盒InfoBox内容<br /> elem_name=driver.find_elements_by_xpath("//div[@class='basic-info J-basic-info cmn-clearfix']/dl/dt") <br /> elem_value=driver.find_elements_by_xpath("//div[@class='basic-info J-basic-info cmn-clearfix']/dl/dd")<br /> """<br /> for e in elem_name:<br /> print(e.text)<br /> for e in elem_value:<br /> print(e.text)<br /> """<br /><br /> #构建字段成对输出<br /> elem_dic = dict(zip(elem_name,elem_value)) <br /> for key in elem_dic: <br /> print(key.text,elem_dic[key].text)<br /> time.sleep(5)<br /> return<br /> <br /> except Exception as e: <br /> print("Error: ",e)<br /> finally: <br /> print('\n')<br /> driver.close() <br /><br />
比如爬取过程Firefox浏览器会自动搜索“故宫”页面,如下图所示:
最终输出结果如下图所示:
内容如下:
https://baike.baidu.com/item/北京故宫<br />北京故宫_百度百科<br />https://baike.baidu.com/item/% ... %3Bbr />北京故宫_百度百科<br />中文名 北京故宫<br />地理位置 北京市东城区景山前街4号 [91] <br />开放时间 4.1-10.31:08:20-17:00(停止售票16:00,最晚入园16:10) ;11.1-3.31:08:30-16:30(停止售票15:30,最晚入园15:40) ;除法定节假日外每周一闭馆 [6] [91] <br />景点级别 AAAAA级<br />门票价格 60元旺季/40元淡季 [7] <br />占地面积 72万平方米(建筑面积约15万平方米)<br />保护级别 世界文化遗产;第一批全国重点文物保护单位<br />批准单位 联合国教科文组织;中华人民共和国国务院<br />批 号 III-100<br />主要藏品 清明上河图、乾隆款金瓯永固杯、酗亚方樽<br />别 名 紫禁城 [8] <br />官方电话 010-85007057 [92]<br />
Python运行结果如下所示,其中data.txt文件中包括了常见的几个景点。
上述代码属性和属性值通过字典进行组合输出的,核心代码如下:
elem_dic = dict(zip(elem_name,elem_value)) <br />for key in elem_dic: <br /> print(key.text,elem_dic[key].text)<br />
同时,读者可以尝试调用本地的无界面浏览器PhantomJS进行爬取的,调用方法如下:
webdriver.PhantomJS(executable_path="C:\...\phantomjs.exe")<br />
课程作业:
三.Selenium爬取Wikipedia
在线百科是互联网中存在公开的最大数据量的用户生成数据集合,这些数据具有一定的结构,属于半结构化数据,最知名的三大在线百科包括Wikipedia 、百度百科、互动百科。首先,作者将介绍Selenium爬取Wikipedia的实例。
1.网页分析
第一个实例作者将详细讲解Selenium爬取20国家集团(G20)的第一段摘要信息,具体步骤如下:
(1) 从G20列表页面中获取各国超链接
20国集团列表网址如下,Wikipedia采用国家英文单词首写字母进行排序,比如“Japan”、“Italy”、“Brazil”等,每个国家都采用超链接的形式进行跳转。
首先,需要获取20个国家的超链接,然后再去到具体的页面进行爬取。选中一个国家的超链接,比如“China”,右键鼠标并点击“检查”按钮,可以获取对应的HTML源代码,如下所示。
其中超链接位于< div class=“mw-category-group” >布局的< ul >< li >< a >节点下,对应代码:
调用Selenium的find_elements_by_xpath()函数获取节点class属性为“mw-category-group”的超链接,它将返回多个元素。定位超链接的核心代码如下:
driver.get("https://en.wikipedia.org/wiki/ ... 6quot;) <br />elem=driver.find_elements_by_xpath("//div[@class='mw-category-group']/ul/li/a") <br />for e in elem:<br /> print(e.text)<br /> print(e.get_attribute("href"))<br />
函数find_elements_by_xpth()先解析HTML的DOM树形结构并定位到指定节点,并获取其元素。然后定义一个for循环,依次获取节点的内容和href属性,其中e.text表示节点的内容,例如下面节点之间的内容为China。
China<br />
同时,e.get_attribute(“href”)表示获取节点属性href对应的属性值,即“/wiki/China”,同理,e.get_attribute(“title”)可以获取标题title属性,得到值“China”。
此时将获取的超链接存储至变量中如下图,再依次定位到每个国家并获取所需内容。
(2) 调用Selenium定位并爬取各国页面消息盒
接下来开始访问具体的页面,比如中国:
如图所示,可以看到页面的URL、标题、摘要、内容、消息盒等,其中消息盒在途中右部分,包括国家全称、位置等。
下面采用对的形式进行描述,很简明精准地概括了一个网页实体,比如、等信息。通常获取这些信息之后,需要进行预处理操作,之后才能进行数据分析,后面章节将详细讲解。
访问到每个国家的页面后,接下来需要获取每个国家的第一段介绍,本小节讲解的爬虫内容可能比较简单,但是讲解的方法非常重要,包括如何定位节点及爬取知识。详情页面对应的HTML核心部分代码如下:
浏览器审查元素方法如图所示。
正文内容位于属性class为“mw-parser-output”的< div >节点下。在HTML中,< P >标签表示段落,通常用于标识正文,< b >标签表示加粗。获取第一段内容即定位第一个< p >节点即可。核心代码如下:
driver.get("https://en.wikipedia.org/wiki/China") <br />elem=driver.find_element_by_xpath("//div[@class='mw-parser-output']/p[2]").text <br />print elem<br />
注意,正文第一段内容位于第二个< p >段落,故获取p[2]即可。同时,如果读者想从源代码中获取消息盒,则需获取消息盒的位置并抓取数据,消息盒(InfoBox)内容在HTML对应为如下节点,记录了网页实体的核心信息。
...<br />
2.代码实现
完整代码参考文件test10_02.py,如下所示:
# coding=utf-8<br />#By:Eastmount CSDN 2021-06-23<br />import time <br />import re <br />import os <br />from selenium import webdriver <br />from selenium.webdriver.common.keys import Keys <br /><br />driver = webdriver.Firefox() <br />driver.get("https://en.wikipedia.org/wiki/ ... 6quot;) <br />elem = driver.find_elements_by_xpath("//div[@class='mw-category-group']/ul/li/a")<br />name = [] #国家名<br />urls = [] #国家超链接<br /><br />#爬取链接<br />for e in elem:<br /> print(e.text)<br /> print(e.get_attribute("href"))<br /> name.append(e.text)<br /> urls.append(e.get_attribute("href"))<br />print(name)<br />print(urls)<br /><br />#爬取内容<br />for url in urls:<br /> driver.get(url) <br /> elem = driver.find_element_by_xpath("//div[@class='mw-parser-output']/p[1]").text <br /> print(elem)<br />
其中,爬取的信息如图所示。
PS:该部分大家简单尝试即可,更推荐爬取百度百科、互动百科和搜狗百科。
四.Selenium爬取互动百科
几年过去,互动百科变成了快懂百科,但还好网页结构未变化。
1.网页分析
目前,在线百科已经发展为众多科研工作者从事语义分析、知识图谱构建、自然语言处理、搜索引擎和人工智能等领域的重要语料来源。互动百科作为最热门的在线百科之一,为研究者提供了强大的语料支持。
本小节将讲解一个爬取互动百科最热门的十个编程语言页面的摘要信息,通过该实例加深读者使用Selenium爬虫技术的印象,更加深入地剖析网络数据爬取的分析技巧。不同于Wikipedia先爬取词条列表超链接再爬取所需信息、百度百科输入词条进入相关页面再进行定向爬取,互动百科采用的方法是:
由于互动百科搜索不同词条对应的超链接是存在一定规律的,即采用“常用url+搜索的词条名”方式进行跳转,这里我们通过该方法设置不同的词条网页。具体步骤如下:
(1) 调用Selenium分析URL并搜索互动百科词条
我们首先分析互动百科搜索词条的一些规则,比如搜索人物“贵州”,对应的超链为:
对应页面如图所示,从图中可以看到,顶部的超链接URL、词条为“贵州”、第一段为“贵州”的摘要信息、“右边为对应的图片等信息。
同理,搜索编程语言“Python”,对应的超链接为:
可以得出一个简单的规则,即:
可以搜索对应的知识,如编程语言“Java”对应为:
(2) 访问热门Top10编程语言并爬取摘要
2016年,Github根据各语言过去12个月提交的PR数量进行排名,得出最受欢迎的Top10编程语言分别是:JavaScript、Java、Python、Ruby、PHP、C++、CSS、C#、C和GO语言。
然后,需要分布获取这十门语言的摘要信息。在浏览器中选中摘要部分,右键鼠标点击“审查元素”返回结果如图所示,可以在底部看到摘要部分对应的HTML源代码。
新版本的“快懂百科”内容如下图所示:
“Java”词条摘要部分对应的HTML核心代码如下所示:
调用Selenium的find_element_by_xpath()函数,可以获取摘要段落信息,核心代码如下。
driver = webdriver.Firefox()<br />url = "http://www.baike.com/wiki/" + name<br />driver.get(url)<br />elem = driver.find_element_by_xpath("//div[@class='summary']/div/span") <br />print(elem.text)<br />
这段代码的基本步骤是:
下面是完整的代码及详细讲解。
2.代码实现
完整代码为blog10_03.py如下所示,主函数main()中循环调用getgetAbstract()函数爬取Top10编程语言的摘要信息。
# coding=utf-8 <br />#By:Eastmount CSDN 2021-06-23 <br />import os <br />import codecs<br />from selenium import webdriver <br />from selenium.webdriver.common.keys import Keys <br /><br />driver = webdriver.Firefox()<br /><br />#获取摘要信息<br />def getAbstract(name): <br /> try:<br /> #新建文件夹及文件<br /> basePathDirectory = "Hudong_Coding" <br /> if not os.path.exists(basePathDirectory): <br /> os.makedirs(basePathDirectory) <br /> baiduFile = os.path.join(basePathDirectory,"HudongSpider.txt")<br /> #文件不存在新建,存在则追加写入<br /> if not os.path.exists(baiduFile): <br /> info = codecs.open(baiduFile,'w','utf-8') <br /> else: <br /> info = codecs.open(baiduFile,'a','utf-8') <br /><br /> url = "http://www.baike.com/wiki/" + name<br /> print(url)<br /> driver.get(url) <br /> elem = driver.find_elements_by_xpath("//div[@class='summary']/div/span")<br /> content = ""<br /> for e in elem:<br /> content += e.text<br /> print(content)<br /> info.writelines(content+'\r\n') <br /> <br /> except Exception as e: <br /> print("Error: ",e) <br /> finally: <br /> print('\n') <br /> info.write('\r\n') <br /> <br />#主函数 <br />def main():<br /> languages = ["JavaScript", "Java", "Python", "Ruby", "PHP",<br /> "C++", "CSS", "C#", "C", "GO"]<br /> print('开始爬取')<br /> for lg in languages: <br /> print(lg)<br /> getAbstract(lg) <br /> print('结束爬取')<br /><br />if __name__ == '__main__':<br /> main() <br />
其中“JavaScript”和“Java”编程语言的抓取结果如图所示,该段代码爬取了热门十门语言在互动百科中的摘要信息。
程序成功抓取了各个编程语言的摘要信息,如下图所示:
同时将数据存储至本地TXT文件中,这将有效为NLP和文本挖掘进行一步分析提供支撑。
写到这里,几种常见的百科数据抓取方法就介绍完毕了,希望您喜欢。
五.总结
在线百科被广泛应用于科研工作、知识图谱和搜索引擎构建、大小型公司数据集成、Web2.0知识库系统中,由于其公开、动态、可自由访问和编辑、拥有多语言版本等特点,它深受科研工作者和公司开发人员的喜爱,常见的在线百科包括Wikipedia、百度百科和互动百科等。
本文结合Selenium技术分别爬取了Wikipedia的段落内容、百度百科的消息盒和互动百科的摘要信息,并采用了三种分析方法,希望读者通过该章节的案例掌握Selenium技术爬取网页的方法。
Selenium用得更广泛的领域是自动化测试,它直接运行在浏览器中(如Firefox、Chrome、IE等),就像真实用户操作一样,对开发的网页进行各式各样的测试,它更是自动化测试方向的必备工具。希望读者能掌握这种技术的爬取方法,尤其是目标网页需要验证登录等情形。
该系列所有代码下载地址:
感谢在求学路上的同行者,不负遇见,勿忘初心。这周的留言感慨~
(By:娜璋 2021-08-20夜于景怡)
前文赏析:
第一部分 基础语法
第二部分 网络爬虫
参考文献 查看全部
php 循环抓取网页内容 [Python从零到壹] 十
欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。
Python系列整体框架包括基础语法10篇、网络爬虫30篇、可视化分析10篇、机器学习20篇、大数据分析20篇、图像识别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的关注、点赞和转发就是对秀璋最大的支持,知识无价人有情,希望我们都能在人生路上共同成长。
前一篇文章讲述了Selenium基础技术,涉及基础入门、元素定位、常用方法和属性、鼠标操作、键盘操作和导航控制。本文将结合具体实例进行深入地分析,通过三个基于Selenium技术的爬虫,爬取Wikipedia、百度百科和互动百科消息盒的例子,从实际应用出发来学习利用。基础性文章,希望对您有所帮助。
在线百科是基于Wiki技术的、动态的、免费的、可自由访问和编辑的多语言百科全书的Web2.0知识库系统。它是互联网中公开的、最大数量的用户生成的知识库,并且具有知识面覆盖度广、结构化程度高、信息更新速度快和开放性好等优势。其中被广泛使用的三大在线百科包括Wikipedia、百度百科和互动百科。
文章目录:
下载地址:
作者新开的“娜璋AI安全之家”将专注于Python和安全技术,主要分享Web渗透、系统安全、人工智能、大数据分析、图像识别、恶意代码检测、CVE复现、威胁情报分析等文章。虽然作者是一名技术小白,但会保证每一篇文章都会很用心地撰写,希望这些基础性文章对你有所帮助,在Python和安全路上与大家一起进步。
一.三大在线百科
随着互联网和大数据的飞速发展,我们需要从海量信息中挖掘出有价值的信息,而在收集这些海量信息过程中,通常都会涉及到底层数据的抓取构建工作,比如多源知识库融合、知识图谱构建、计算引擎建立等。其中具有代表性的知识图谱应用包括谷歌公司的Knowledge Graph、Facebook推出的实体搜索服务(Graph Search)、百度公司的百度知心、搜狗公司的搜狗知立方等。这些应用的技术可能会有所区别,但相同的是它们在构建过程中都利用了Wikipedia、百度百科、互动百科等在线百科知识。所以本章将教大家分别爬取这三大在线百科。
百科是指天文、地理、自然、人文、宗教、信仰、文学等全部学科的知识的总称,它可以是综合性的,包含所有领域的相关内容;也可以是面向专业性的。接下来将介绍常见的三大在线百科,它们是信息抽取研究的重要语料库之一。
1.Wikipedia
“Wikipedia is a free online encyclopedia with the aim to allow anyone to edit articles.” 这是Wikipedia的官方介绍。Wikipedia是一个基于维基技术的多语言百科全书协作计划,用多种语言编写的网络百科全书。Wikipedia一词取自于该网站核心技术“Wiki”以及具有百科全书之意的“encyclopedia”共同创造出来的新混成词“Wikipedia”,接受任何人编辑。
在所有在线百科中,Wikipedia知识准确性最好,结构化最好,但是Wikipedia本以英文知识为主,涉及的中文知识很少。在线百科页面通常包括:Title(标题)、Description(摘要描述)、InfoBox(消息盒)、Categories(实体类别)、Crosslingual Links(跨语言链接)等。Wikipedia中实体“黄果树瀑布”的中文页面信息如图1所示。
图1所示的Wikipedia信息主要包括:
2.百度百科
百度百科是百度公司推出的一部内容开放、自由的网络百科全书平台。截至2017年4月,百度百科已经收录了超过1432万的词条,参与词条编辑的网友超过610万人,几乎涵盖了所有已知的知识领域。
百度百科旨在创造一个涵盖各领域知识的中文信息收集平台。百度百科强调用户的参与和奉献精神,充分调动互联网用户的力量,汇聚广大用户的头脑智慧,积极进行交流和分享。同时,百度百科实现与百度搜索、百度知道的结合,从不同的层次上满足用户对信息的需求。
与Wikipedia相比,百度百科所包含中文知识最多最广,但是准确性相对较差。百度百科页面也包括:Title(标题)、Description(摘要描述)、InfoBox(消息盒)、Categories(实体类别)、Crosslingual Links(跨语言链接)等。图2为百度百科“Python”网页知识,该网页的消息盒为中间部分,采用键值对(Key-value Pair)的形式,比如“外文名”对应的值为“Python”,“经典教材”对应的值为“Head First Python”等。
3.互动百科
互动百科()是中文百科网站的开拓与领军者,致力于为数亿中文用户免费提供海量、全面、及时的百科信息,并通过全新的维基平台不断改善用户对信息的创作、获取和共享方式。截止到2016年年底,互动百科已经发展成为由超过1100万用户共同打造的拥有1600万词条、2000万张图片、5万个微百科的百科网站,新媒体覆盖人群1000余万人,手机APP用户超2000万。
相对于百度百科而言,互动百科的准确性更高、结构化更好,在专业领域上知识质量较高,故研究者通常会选择互动百科作为主要语料之一。图3显示的是互动百科的首页。
互动百科的信息分为两种形式存储,一种是百科中结构化的信息盒,另一种是百科正文的自由文本。对于百科中的词条文章来说,只有少数词条含有结构化信息盒,但所有词条均含有自由文本。信息盒是采用结构化方式展现词条信息的形式,一个典型的百科信息盒展示例子如图4,显示了Python的InfoBox信息,采用键值对的形式呈现,比如Python的“设计人”为“Guido van Rossum”。
下面分别讲解Selenium技术爬取三大在线百科的消息盒,三大百科的分析方法略有不同。Wikipedia先从列表页面分别获取20国集团(简称G20)各国家的链接,再依次进行网页分析和信息爬取;百度百科调用Selenium自动操作,输入各种编程语言名,再进行访问定位爬取;互动百科采用分析网页的链接url,再去到不同的景点进行分析及信息抓取。
二.Selenium爬取百度百科知识
百度百科作为最大的中文在线百科或中文知识平台,它提供了各行各业的知识,可以供研究者从事各方面的研究。虽然词条的准确率不是最好,但依然可以为从事数据挖掘、知识图谱、自然语言处理、大数据等领域的学者提供很好的知识平台。
1.网页分析
本小节将详细讲解Selenium爬取百度百科消息盒的例子,爬取的主题为10个国家5A级景区,其中景区的名单定义在TXT文件中,然后再定向爬取它们的消息盒信息。其中网页分析的核心步骤如下:
(1) 调用Selenium自动搜索百科关键词
首先,调用Selenium技术访问百度百科首页,网址为:
图5为百度百科首页,其顶部为搜索框,输入相关词条如“故宫”,点击“进入词条”,可以得到故宫词条的详细信息。
然后,在浏览器鼠标选中“进入词条”按钮,右键鼠标点击“审查元素”,可以查看该按钮对应的HTML源代码,如图6所示。注意,不同浏览器查看网页控件或内容对应源代码的称呼是不同的,图中使用的是360安全浏览器,称呼为“审查元素”,而Chrome浏览器称为“检查”,QQ浏览器称为“检查”等。
“进入词条”对应的HTML核心代码如下所示:
调用Selenium函数可以获取输入框input控件。
然后自动输入“故宫”,获取按钮“进入词条”并自动点击,这里采用的方法是在键盘上输入回车键即可访问“故宫”界面,核心代码如下所示:
driver.get("http://baike.baidu.com/") <br />elem_inp=driver.find_element_by_xpath("//form[@id='searchForm']/input") <br />elem_inp.send_keys(name) <br />elem_inp.send_keys(Keys.RETURN) <br />
(2) 调用Selenium访问“故宫”页面并定位消息盒
第一步完成后,进入“故宫”页面然后找到中间消息盒InfoBox部分,右键鼠标并点击“审查元素”,返回结果如图7所示。
消息盒核心代码如下:
消息盒主要采用的形式存储,详细概括了“故宫”实体的信息。例如,属性“中文名称”对应值为“北京故宫”,属性“外文名称”对应值为“Fobidden City”。对应的HTML部分源代码如下。
整个消息盒位于< div class=“basic-info J-basic-info cmn-clearfix” >标签中,接下来是< dl >、< dt >、< dd >一组合HTML标签,其中消息盒div布局共包括两个< dl >…布局,一个是记录消息盒左边部分的内容,另一个< dl >记录了消息盒右部分的内容,每个< dl >标签里再定义属性和属性值,如图8所示。
注意:使用dt、dd最外层必须使用dl包裹,< dl >标签定义了定义列表(Definition List),< dt >标签定义列表中的项目,< dd >标签描述列表中的项目,此组合标签叫做表格标签,与table表格组合标签类似。
接下来调用Selenium扩展包的find_elements_by_xpath()函数分别定位属性和属性值,该函数返回多个属性及属性值集合,再通过for循环输出已定位的多个元素值。代码如下:

elem_name=driver.find_elements_by_xpath("//div[@class='basic-info J-basic-info cmn-clearfix']/dl/dt") <br />elem_value=driver.find_elements_by_xpath("//div[@class='basic-info J-basic-info cmn-clearfix']/dl/dd")<br />for e in elem_name:<br /> print(e.text)<br />for e in elem_value:<br /> print(e.text)<br />
此时,使用Selenium技术爬取百度百科国家5A级景区的分析方法就讲解完了,下面是这部分完整的代码及一些难点。
2.代码实现
注意,接下来我们尝试定义多个Python文件相互调用实现爬虫功能。完整代码包括两个文件,即:
test10_01_baidu.py
# -*- coding: utf-8 -*-<br />"""<br />test10_01_baidu.py<br /> 定义了主函数main并调用getinfo.py文件<br />By:Eastmount CSDN 2021-06-23<br />"""<br />import codecs <br />import getinfo #引用模块<br /><br />#主函数 <br />def main():<br /> #文件读取景点信息 <br /> source = open('data.txt','r',encoding='utf-8') <br /> for name in source: <br /> print(name)<br /> getinfo.getInfobox(name) <br /> print('End Read Files!') <br /> source.close()<br />if __name__ == '__main__':<br /> main()<br />
在代码中调用“import getinfo”代码导入getinfo.py文件,导入之后就可以在main函数中调用getinfo.py文件中的函数和属性,接着我们调用getinfo.py文件中的getInfobox()函数,执行爬取消息盒的操作。
getinfo.py
# coding=utf-8<br /><br />"""<br />getinfo.py:获取信息<br />By:Eastmount CSDN 2021-06-23<br />"""<br />import os <br />import codecs<br />import time<br />from selenium import webdriver <br />from selenium.webdriver.common.keys import Keys<br /><br />#getInfobox函数: 获取国家5A级景区消息盒 <br />def getInfobox(name): <br /> try: <br /> #访问百度百科并自动搜索<br /> driver = webdriver.Firefox() <br /> driver.get("http://baike.baidu.com/") <br /> elem_inp = driver.find_element_by_xpath("//form[@id='searchForm']/input") <br /> elem_inp.send_keys(name) <br /> elem_inp.send_keys(Keys.RETURN) <br /> time.sleep(1)<br /> print(driver.current_url)<br /> print(driver.title)<br /> <br /> #爬取消息盒InfoBox内容<br /> elem_name=driver.find_elements_by_xpath("//div[@class='basic-info J-basic-info cmn-clearfix']/dl/dt") <br /> elem_value=driver.find_elements_by_xpath("//div[@class='basic-info J-basic-info cmn-clearfix']/dl/dd")<br /> """<br /> for e in elem_name:<br /> print(e.text)<br /> for e in elem_value:<br /> print(e.text)<br /> """<br /><br /> #构建字段成对输出<br /> elem_dic = dict(zip(elem_name,elem_value)) <br /> for key in elem_dic: <br /> print(key.text,elem_dic[key].text)<br /> time.sleep(5)<br /> return<br /> <br /> except Exception as e: <br /> print("Error: ",e)<br /> finally: <br /> print('\n')<br /> driver.close() <br /><br />
比如爬取过程Firefox浏览器会自动搜索“故宫”页面,如下图所示:
最终输出结果如下图所示:
内容如下:
https://baike.baidu.com/item/北京故宫<br />北京故宫_百度百科<br />https://baike.baidu.com/item/% ... %3Bbr />北京故宫_百度百科<br />中文名 北京故宫<br />地理位置 北京市东城区景山前街4号 [91] <br />开放时间 4.1-10.31:08:20-17:00(停止售票16:00,最晚入园16:10) ;11.1-3.31:08:30-16:30(停止售票15:30,最晚入园15:40) ;除法定节假日外每周一闭馆 [6] [91] <br />景点级别 AAAAA级<br />门票价格 60元旺季/40元淡季 [7] <br />占地面积 72万平方米(建筑面积约15万平方米)<br />保护级别 世界文化遗产;第一批全国重点文物保护单位<br />批准单位 联合国教科文组织;中华人民共和国国务院<br />批 号 III-100<br />主要藏品 清明上河图、乾隆款金瓯永固杯、酗亚方樽<br />别 名 紫禁城 [8] <br />官方电话 010-85007057 [92]<br />
Python运行结果如下所示,其中data.txt文件中包括了常见的几个景点。
上述代码属性和属性值通过字典进行组合输出的,核心代码如下:
elem_dic = dict(zip(elem_name,elem_value)) <br />for key in elem_dic: <br /> print(key.text,elem_dic[key].text)<br />
同时,读者可以尝试调用本地的无界面浏览器PhantomJS进行爬取的,调用方法如下:
webdriver.PhantomJS(executable_path="C:\...\phantomjs.exe")<br />
课程作业:
三.Selenium爬取Wikipedia
在线百科是互联网中存在公开的最大数据量的用户生成数据集合,这些数据具有一定的结构,属于半结构化数据,最知名的三大在线百科包括Wikipedia 、百度百科、互动百科。首先,作者将介绍Selenium爬取Wikipedia的实例。
1.网页分析
第一个实例作者将详细讲解Selenium爬取20国家集团(G20)的第一段摘要信息,具体步骤如下:
(1) 从G20列表页面中获取各国超链接
20国集团列表网址如下,Wikipedia采用国家英文单词首写字母进行排序,比如“Japan”、“Italy”、“Brazil”等,每个国家都采用超链接的形式进行跳转。
首先,需要获取20个国家的超链接,然后再去到具体的页面进行爬取。选中一个国家的超链接,比如“China”,右键鼠标并点击“检查”按钮,可以获取对应的HTML源代码,如下所示。
其中超链接位于< div class=“mw-category-group” >布局的< ul >< li >< a >节点下,对应代码:
调用Selenium的find_elements_by_xpath()函数获取节点class属性为“mw-category-group”的超链接,它将返回多个元素。定位超链接的核心代码如下:
driver.get("https://en.wikipedia.org/wiki/ ... 6quot;) <br />elem=driver.find_elements_by_xpath("//div[@class='mw-category-group']/ul/li/a") <br />for e in elem:<br /> print(e.text)<br /> print(e.get_attribute("href"))<br />
函数find_elements_by_xpth()先解析HTML的DOM树形结构并定位到指定节点,并获取其元素。然后定义一个for循环,依次获取节点的内容和href属性,其中e.text表示节点的内容,例如下面节点之间的内容为China。
China<br />
同时,e.get_attribute(“href”)表示获取节点属性href对应的属性值,即“/wiki/China”,同理,e.get_attribute(“title”)可以获取标题title属性,得到值“China”。
此时将获取的超链接存储至变量中如下图,再依次定位到每个国家并获取所需内容。
(2) 调用Selenium定位并爬取各国页面消息盒
接下来开始访问具体的页面,比如中国:
如图所示,可以看到页面的URL、标题、摘要、内容、消息盒等,其中消息盒在途中右部分,包括国家全称、位置等。
下面采用对的形式进行描述,很简明精准地概括了一个网页实体,比如、等信息。通常获取这些信息之后,需要进行预处理操作,之后才能进行数据分析,后面章节将详细讲解。
访问到每个国家的页面后,接下来需要获取每个国家的第一段介绍,本小节讲解的爬虫内容可能比较简单,但是讲解的方法非常重要,包括如何定位节点及爬取知识。详情页面对应的HTML核心部分代码如下:
浏览器审查元素方法如图所示。
正文内容位于属性class为“mw-parser-output”的< div >节点下。在HTML中,< P >标签表示段落,通常用于标识正文,< b >标签表示加粗。获取第一段内容即定位第一个< p >节点即可。核心代码如下:
driver.get("https://en.wikipedia.org/wiki/China") <br />elem=driver.find_element_by_xpath("//div[@class='mw-parser-output']/p[2]").text <br />print elem<br />
注意,正文第一段内容位于第二个< p >段落,故获取p[2]即可。同时,如果读者想从源代码中获取消息盒,则需获取消息盒的位置并抓取数据,消息盒(InfoBox)内容在HTML对应为如下节点,记录了网页实体的核心信息。
...<br />
2.代码实现

完整代码参考文件test10_02.py,如下所示:
# coding=utf-8<br />#By:Eastmount CSDN 2021-06-23<br />import time <br />import re <br />import os <br />from selenium import webdriver <br />from selenium.webdriver.common.keys import Keys <br /><br />driver = webdriver.Firefox() <br />driver.get("https://en.wikipedia.org/wiki/ ... 6quot;) <br />elem = driver.find_elements_by_xpath("//div[@class='mw-category-group']/ul/li/a")<br />name = [] #国家名<br />urls = [] #国家超链接<br /><br />#爬取链接<br />for e in elem:<br /> print(e.text)<br /> print(e.get_attribute("href"))<br /> name.append(e.text)<br /> urls.append(e.get_attribute("href"))<br />print(name)<br />print(urls)<br /><br />#爬取内容<br />for url in urls:<br /> driver.get(url) <br /> elem = driver.find_element_by_xpath("//div[@class='mw-parser-output']/p[1]").text <br /> print(elem)<br />
其中,爬取的信息如图所示。
PS:该部分大家简单尝试即可,更推荐爬取百度百科、互动百科和搜狗百科。
四.Selenium爬取互动百科
几年过去,互动百科变成了快懂百科,但还好网页结构未变化。
1.网页分析
目前,在线百科已经发展为众多科研工作者从事语义分析、知识图谱构建、自然语言处理、搜索引擎和人工智能等领域的重要语料来源。互动百科作为最热门的在线百科之一,为研究者提供了强大的语料支持。
本小节将讲解一个爬取互动百科最热门的十个编程语言页面的摘要信息,通过该实例加深读者使用Selenium爬虫技术的印象,更加深入地剖析网络数据爬取的分析技巧。不同于Wikipedia先爬取词条列表超链接再爬取所需信息、百度百科输入词条进入相关页面再进行定向爬取,互动百科采用的方法是:
由于互动百科搜索不同词条对应的超链接是存在一定规律的,即采用“常用url+搜索的词条名”方式进行跳转,这里我们通过该方法设置不同的词条网页。具体步骤如下:
(1) 调用Selenium分析URL并搜索互动百科词条
我们首先分析互动百科搜索词条的一些规则,比如搜索人物“贵州”,对应的超链为:
对应页面如图所示,从图中可以看到,顶部的超链接URL、词条为“贵州”、第一段为“贵州”的摘要信息、“右边为对应的图片等信息。
同理,搜索编程语言“Python”,对应的超链接为:
可以得出一个简单的规则,即:
可以搜索对应的知识,如编程语言“Java”对应为:
(2) 访问热门Top10编程语言并爬取摘要
2016年,Github根据各语言过去12个月提交的PR数量进行排名,得出最受欢迎的Top10编程语言分别是:JavaScript、Java、Python、Ruby、PHP、C++、CSS、C#、C和GO语言。
然后,需要分布获取这十门语言的摘要信息。在浏览器中选中摘要部分,右键鼠标点击“审查元素”返回结果如图所示,可以在底部看到摘要部分对应的HTML源代码。
新版本的“快懂百科”内容如下图所示:
“Java”词条摘要部分对应的HTML核心代码如下所示:
调用Selenium的find_element_by_xpath()函数,可以获取摘要段落信息,核心代码如下。
driver = webdriver.Firefox()<br />url = "http://www.baike.com/wiki/" + name<br />driver.get(url)<br />elem = driver.find_element_by_xpath("//div[@class='summary']/div/span") <br />print(elem.text)<br />
这段代码的基本步骤是:
下面是完整的代码及详细讲解。
2.代码实现
完整代码为blog10_03.py如下所示,主函数main()中循环调用getgetAbstract()函数爬取Top10编程语言的摘要信息。
# coding=utf-8 <br />#By:Eastmount CSDN 2021-06-23 <br />import os <br />import codecs<br />from selenium import webdriver <br />from selenium.webdriver.common.keys import Keys <br /><br />driver = webdriver.Firefox()<br /><br />#获取摘要信息<br />def getAbstract(name): <br /> try:<br /> #新建文件夹及文件<br /> basePathDirectory = "Hudong_Coding" <br /> if not os.path.exists(basePathDirectory): <br /> os.makedirs(basePathDirectory) <br /> baiduFile = os.path.join(basePathDirectory,"HudongSpider.txt")<br /> #文件不存在新建,存在则追加写入<br /> if not os.path.exists(baiduFile): <br /> info = codecs.open(baiduFile,'w','utf-8') <br /> else: <br /> info = codecs.open(baiduFile,'a','utf-8') <br /><br /> url = "http://www.baike.com/wiki/" + name<br /> print(url)<br /> driver.get(url) <br /> elem = driver.find_elements_by_xpath("//div[@class='summary']/div/span")<br /> content = ""<br /> for e in elem:<br /> content += e.text<br /> print(content)<br /> info.writelines(content+'\r\n') <br /> <br /> except Exception as e: <br /> print("Error: ",e) <br /> finally: <br /> print('\n') <br /> info.write('\r\n') <br /> <br />#主函数 <br />def main():<br /> languages = ["JavaScript", "Java", "Python", "Ruby", "PHP",<br /> "C++", "CSS", "C#", "C", "GO"]<br /> print('开始爬取')<br /> for lg in languages: <br /> print(lg)<br /> getAbstract(lg) <br /> print('结束爬取')<br /><br />if __name__ == '__main__':<br /> main() <br />
其中“JavaScript”和“Java”编程语言的抓取结果如图所示,该段代码爬取了热门十门语言在互动百科中的摘要信息。
程序成功抓取了各个编程语言的摘要信息,如下图所示:
同时将数据存储至本地TXT文件中,这将有效为NLP和文本挖掘进行一步分析提供支撑。
写到这里,几种常见的百科数据抓取方法就介绍完毕了,希望您喜欢。
五.总结
在线百科被广泛应用于科研工作、知识图谱和搜索引擎构建、大小型公司数据集成、Web2.0知识库系统中,由于其公开、动态、可自由访问和编辑、拥有多语言版本等特点,它深受科研工作者和公司开发人员的喜爱,常见的在线百科包括Wikipedia、百度百科和互动百科等。
本文结合Selenium技术分别爬取了Wikipedia的段落内容、百度百科的消息盒和互动百科的摘要信息,并采用了三种分析方法,希望读者通过该章节的案例掌握Selenium技术爬取网页的方法。
Selenium用得更广泛的领域是自动化测试,它直接运行在浏览器中(如Firefox、Chrome、IE等),就像真实用户操作一样,对开发的网页进行各式各样的测试,它更是自动化测试方向的必备工具。希望读者能掌握这种技术的爬取方法,尤其是目标网页需要验证登录等情形。
该系列所有代码下载地址:
感谢在求学路上的同行者,不负遇见,勿忘初心。这周的留言感慨~
(By:娜璋 2021-08-20夜于景怡)
前文赏析:
第一部分 基础语法
第二部分 网络爬虫
参考文献
php 循环抓取网页内容 中软国际教育<暑期师资培训>体系化课程,重磅登场 | 携手产业
网站优化 • 优采云 发表了文章 • 0 个评论 • 48 次浏览 • 2022-07-16 22:38
“动态网页”是与静态网页相对应的,也就是说,网页 URL不固定,能通过后台与用户交互。完成用户查询,提交等动作。常用的语言有ASP,PHP,JSP等。动态网页技术是区别于静态网页技术而言的。相比与传统的静态网页,动态网页有了明显的交互性、自动更新性,以及因时因人而变的灵活性。所谓“动态”并不是指放在网页上的动画图片,动态网页技术有以下几个特点:"交互性",网页会根据用户的要求和选择而动态改变和响应,将浏览器作为客户端界面,这将是今后WEB发展的大势所趋。"自动更新“,无须手动地更新HTML文档,便会自动生成新的页面,可以大大节省工作量。"因时因人而变",当不同的时间,不同的人访问同一网址时会产生不同的页面。本实验通过基础的处理流程展示Java动态网页的基本原理。主要技能知识点:
(1)利用Socket响应用户的不同方法请求
(2)Java动态编译
(3)动态网页基本原理实现 查看全部
php 循环抓取网页内容 中软国际教育体系化课程,重磅登场 | 携手产业
“动态网页”是与静态网页相对应的,也就是说,网页 URL不固定,能通过后台与用户交互。完成用户查询,提交等动作。常用的语言有ASP,PHP,JSP等。动态网页技术是区别于静态网页技术而言的。相比与传统的静态网页,动态网页有了明显的交互性、自动更新性,以及因时因人而变的灵活性。所谓“动态”并不是指放在网页上的动画图片,动态网页技术有以下几个特点:"交互性",网页会根据用户的要求和选择而动态改变和响应,将浏览器作为客户端界面,这将是今后WEB发展的大势所趋。"自动更新“,无须手动地更新HTML文档,便会自动生成新的页面,可以大大节省工作量。"因时因人而变",当不同的时间,不同的人访问同一网址时会产生不同的页面。本实验通过基础的处理流程展示Java动态网页的基本原理。主要技能知识点:

(1)利用Socket响应用户的不同方法请求

(2)Java动态编译
(3)动态网页基本原理实现
服务器在解析时返回一个空字符串呢?
网站优化 • 优采云 发表了文章 • 0 个评论 • 49 次浏览 • 2022-07-01 08:05
php循环抓取网页内容:request->tojson();和cookie存储:session->tojson();然后tojson的返回值是keys(),因为发送给服务器后把重定向的keys()的地址抛弃了,被调用服务器会解析keys()获取用户发送的数据。tojson类似于做http爬虫。然后用file.incrementallitems();可以增加file类的容量。get方法包含的参数必须都是字符串,否则返回值是空字符串(要返回整数字符串,即1)。
继续看type('text/html');以及<a></a>
file是一个作用域(scope),用于动态设置包含html文档的方法。phpinfo和text_read是它的两个特例。对php来说是不行的;此外,session的值返回null。前者使用:htmlexamples...<a></a>...html...phpinfo...localsize...不过,phpinfo和text_read都不是php的默认字段。
差不多是因为这样一个原因,php标准库中没有text_read()函数,当从服务器请求html时,因为text_read()只能读,所以服务器不能正确返回这个字段,所以服务器在解析html时返回一个空字符串,为什么服务器会返回一个空字符串呢?因为php有一个__construct__方法,construct方法类似一个this,所以php对this不友好,所以会返回一个空字符串。
这里我们要用到大量的__this和__construct__的一些函数,同时我们也用到一些_this/__construct__对this的错误处理,所以我们现在很多地方都需要判断,服务器返回一个空字符串,不符合我们的设计。 查看全部
服务器在解析时返回一个空字符串呢?
php循环抓取网页内容:request->tojson();和cookie存储:session->tojson();然后tojson的返回值是keys(),因为发送给服务器后把重定向的keys()的地址抛弃了,被调用服务器会解析keys()获取用户发送的数据。tojson类似于做http爬虫。然后用file.incrementallitems();可以增加file类的容量。get方法包含的参数必须都是字符串,否则返回值是空字符串(要返回整数字符串,即1)。

继续看type('text/html');以及<a></a>
file是一个作用域(scope),用于动态设置包含html文档的方法。phpinfo和text_read是它的两个特例。对php来说是不行的;此外,session的值返回null。前者使用:htmlexamples...<a></a>...html...phpinfo...localsize...不过,phpinfo和text_read都不是php的默认字段。

差不多是因为这样一个原因,php标准库中没有text_read()函数,当从服务器请求html时,因为text_read()只能读,所以服务器不能正确返回这个字段,所以服务器在解析html时返回一个空字符串,为什么服务器会返回一个空字符串呢?因为php有一个__construct__方法,construct方法类似一个this,所以php对this不友好,所以会返回一个空字符串。
这里我们要用到大量的__this和__construct__的一些函数,同时我们也用到一些_this/__construct__对this的错误处理,所以我们现在很多地方都需要判断,服务器返回一个空字符串,不符合我们的设计。
php 循环抓取网页内容 _variables介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 85 次浏览 • 2022-06-29 18:54
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。 查看全部
php 循环抓取网页内容 _variables介绍
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture

_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。

对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
php 循环抓取网页内容 中软国际教育<暑期师资培训>体系化课程,重磅登场 | 携手产业
网站优化 • 优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2022-06-25 13:35
“动态网页”是与静态网页相对应的,也就是说,网页 URL不固定,能通过后台与用户交互。完成用户查询,提交等动作。常用的语言有ASP,PHP,JSP等。动态网页技术是区别于静态网页技术而言的。相比与传统的静态网页,动态网页有了明显的交互性、自动更新性,以及因时因人而变的灵活性。所谓“动态”并不是指放在网页上的动画图片,动态网页技术有以下几个特点:"交互性",网页会根据用户的要求和选择而动态改变和响应,将浏览器作为客户端界面,这将是今后WEB发展的大势所趋。"自动更新“,无须手动地更新HTML文档,便会自动生成新的页面,可以大大节省工作量。"因时因人而变",当不同的时间,不同的人访问同一网址时会产生不同的页面。本实验通过基础的处理流程展示Java动态网页的基本原理。主要技能知识点:
(1)利用Socket响应用户的不同方法请求
(2)Java动态编译
(3)动态网页基本原理实现 查看全部
php 循环抓取网页内容 中软国际教育体系化课程,重磅登场 | 携手产业
“动态网页”是与静态网页相对应的,也就是说,网页 URL不固定,能通过后台与用户交互。完成用户查询,提交等动作。常用的语言有ASP,PHP,JSP等。动态网页技术是区别于静态网页技术而言的。相比与传统的静态网页,动态网页有了明显的交互性、自动更新性,以及因时因人而变的灵活性。所谓“动态”并不是指放在网页上的动画图片,动态网页技术有以下几个特点:"交互性",网页会根据用户的要求和选择而动态改变和响应,将浏览器作为客户端界面,这将是今后WEB发展的大势所趋。"自动更新“,无须手动地更新HTML文档,便会自动生成新的页面,可以大大节省工作量。"因时因人而变",当不同的时间,不同的人访问同一网址时会产生不同的页面。本实验通过基础的处理流程展示Java动态网页的基本原理。主要技能知识点:
(1)利用Socket响应用户的不同方法请求
(2)Java动态编译
(3)动态网页基本原理实现
Python Web框架大列兵,写给初学者的Web框架介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 193 次浏览 • 2022-06-25 06:12
我们知道Web开发最重要的是选择合适的框架,一个好的框架可以极大的提高我们开发的效率,也能帮助我们的应用能按照需求快速迭代。Web框架的数量和质量是一个语言是否成熟的标志之一。PHP下有Larvarel、CodeIgniter,Yii、TP等著名框架使得PHP成为最流行的Web语言之一。Ruby借助其强大框架Rails以RoR(Ruby on Rails)生态开辟了一番天地,很多RoR应用以强大的功能和敏捷能力而闻名,比如知名Git服务器系统Gitlab。那么时下最流行的语言Python Web框架的情况怎么样呢?今天虫虫就来给大家介绍这个。
概述
Python和PHP一样,也有着大量的Web框架,其Web框架生态圈非常广泛和多样化。在进入具体主题之前,我们先介绍下Web框架。
Web框架是对常见通用功能的打包,比如Web权限认证模块、导航路由模块、HTTP解析模块、ORM模块以及做扩展使用的插件体系等,打包这些功能可以让开发人员轻松地创建Web应用程序。是一种高层次的代码和应用逻辑重用方法,可以极大的它减少了开发人员花在编写代码上的时间从而提高开发效率。通过提供现成的解决方案,Web应用程序框架可以帮助开发人员短时间内完成应用的开发并持续的迭代。
Django
说到Python的Web框架,无疑最想到的必然是Django。Django和Laravel最初都是借鉴了RoR的强大思想(动态、DDD、约定优于配置、低重复、及时反馈)。Django框架使用了类MVC的MVT(模型、视图、模板)模式,用Django ORM和数据库联系。
Django ORM内置的管理面板,可以轻松实现数据库内容的管理。使用很少的配置就可能,自动生成数据库模型。
视图可以包括函数和类,视图的URL路由分配在urls.py文件中完成,可以设计出完美优雅的URL调度。
Django的模板的系统则相当简单,甚至不支持直接嵌入代码,需要预先生成Tag、Filter才能调用。
Django支持强大的解决方案:
全栈模式,内置了大量所有必须的模块cache、session、feed、orm、geo、auth。
同时也支持"内置电池"(batteries included)模式。
Django是典型的"大而全"的逻辑,这可以极大的方便大多数开发者。但是这就导致其灵活性不足。要引入其他更好的第三方优秀组件就基本上很难,比如想要在Django里用SQLAlchemy或Mako,需要打上很多补丁,而且会导致管理面板,授权,会话处理或生成表单等功能都不能使用。
当然Django最人性化的地方是其强大的社区支持和详细文档完美的文档Django 书。文档在安装后就完全嵌入系统的各个部分,使用非常方便,这使得其开发的入门门槛很低。
最后给一个Django网站模型的示例:
Pyramid
Pyramid也是一个常用的热门Python Web框架,它源于Pylons和repoze.bfg模块,在吸取精华的基础上使得Pyramid快速成长为了一个成熟和稳定的框架。
虽然两者出现的时间差不多(2005),Pyramid和Django的设计思想则大相径庭。Pyramid非常灵活,很容易定制,可以非常自我的方式以创建特征。Pyramid不会强迫使用框架的习语,对于复杂或高度非标准的项目来说,这点非常有用。
虽然也内置ORM模块,但是更倡导使用成熟的SQLAlchemy ORM。你也可以按照喜好来定制,比如你可能喜欢peewee ORM,使用原始SQL查询或与NoSQL数据库集成。
Pyramid中所有选项都是开放式的,所以需要动手能力强一点,可能最初学者稍有点门槛。
Pyramid是一个自称"开始小,完成大,保持完备的框架。"(start small, finish big, stay finished framework.)。所以非常适合有一定经验丰富的开发人员。
Pyramid一个典型的"Hello Chongchong"应用示例:
web2py
web2py源于一个教学范例框架,其最关心的是是易于开发和部署。
Web2py框架也源于RoR和Django思想的启发,奉行约定优于配置的想法,web2py中有很多合理的默认值,允许开发人员快速启动。
Web2py框架自带了很多模块,比如内置服务器,生成HTML的帮助器,表单,验证器等等,但是Web2py多数据库引擎的支持很简单。其他更多内置的功能有:
jQuery和Ajax建站助手;
调度程序和cron;
双因子认证助手;
文本消息发送器;
事件工单系统,允许自动将生产环境中发生的问题分配给开发人员。
Web2py也宣称,提供全栈式解决方案,提供可能需要的一切模块。
Web2py在线提供了大量文档:
从零开始逐步指导入门,比如简要介绍Python语言。以友好的方式展示web2py的各个功能,包括大量代码示例和屏幕截图等。
尽管具有一定竞争优势,但web2py的社区远远小于Django和Pyramid。其官方邮件列表也不大活跃。另外web2py目前还不能和Python 3不兼容。
web2py一个典型的广告模型示例:
微框架
与大而全思想相反的设计思想是,小而精致的设计,这就是微框架。微框架的好处就是没有冗余,因而性能都很好。
Flask
Flask是除了Django外最流行的Python Web框架。Flask是一个微框架,具备了基本功能,也支持轻松的扩展。因此,Flask更适合做为胶水来用,来粘合各个Web库。
纯 Flask不支持任何存储,但是可以Flask-SQLAlchemy,Flask-MongoAlchemy和Flask-Redis等。类似的基本模板系统是Jinja2,可以使用Mako替换。
Flask框架的座右铭是轻量,"一次一滴"(one drop at a time),这也在其文档中得到全面反映。关于如何构建Flash应用程序可以通过点点滴滴方式学习。阅读几段文档后,就能适应其开发任务了。
在Flash中你不需要一次就学习很多东西,尤其高级的功能,知道你真正需要的时候再学不迟,这样可以避免无实践的"尴学"。
Flask的最大问题是,没有大量Flask扩展支持和功能打包。常常遇到扩展插件停更或者文档过时的情况,需要花费大量的精力处理这些情况。
Flask一个简单示例如下:
Falcon
Falcon 猎鹰也是一个比较流行的微框架。其目标是创建一个简洁、轻量的Web应用程序基础。官方宣称Falcon是一个裸壳(bare-metal),无限膨胀(bloat-free)的工具集,用于快速的构建后端代码和微服务。Falcon兼容Python 2和3,不用担心Python的版本问题。
Falcon的一大优势在于其性能非常高,非常快。其官方网站基准测试显示,其比Django或Flask等具有很高的性能优势(27~75倍)。
Falcon缺点是其打包模块有点太少,有路由,中间件,钩子,除此之外就不提供其他功能了(裸壳)。额外其他功能,比如验证等都需要开发人员来开发扩展。因为其设计中就假设用于构建REST API。
当然其高性能的高度定制的特点确实是一个很好的卖点。毕竟有时候"最简单的解决方案就是最好的方案"。
Falcon示例程序:
API Star
API Star是一个新的Web微框架,只支持Python 3,其特性使用了Python 3.5中引入的类型提示。API Star使用内置的类型提示实现以简洁、声明式的构建验证模式表示,然后绑定这些模式来请求处理函数。
API Star还具有兼容OpenAPI 3 的自动API生成文档功能。
API Star另一个突出的特性是依赖注入机制。这是一个更强大、更智能中间件的替代品。比如可以编写一个所谓的Component,它将使用当前经过身份验证来提供给用户视图。在视图级别,只需要明确声明它将需要User实例,其他事情API Star就会在幕后自动完成。
自动依赖注入优于常规中间件的优点是组件不会有其他未使用视图的开销。同样
API Star也可以以更传统,同步性的,兼容WSGI的方式在asyncio上运行。
最后与API Star捆绑在一起的其他模块都非常标准:比如使用jinja2,路由和事件挂钩进行模板化扩展支持。
总之API Star初生牛犊,发展可观。截止当前其GitHub存储库中有超过5271的星星。贡献者已经接近一百。PR的合并也非常快,是一个快速增长和协作的新兴框架。
基于异步和asyncio的框架
Python web网站通常很慢,为了提高性能,异步技术就成了灵丹妙药。Python也有很多这类的框架。
Twisted
Twisted是Python中最古老,最成熟的Python异步框架。Twisted最初产生于2002年,其核心是一个名为reactor的事件驱动网络引擎,用于调度和调用用户定义的回调。开始的时候开发人员必须通过定义函数并在操作成功和失败时分别传递它们来使用显式回调。
后来Twisted引入了inlineCallbacks ,用于编写异步代码程序,这些代码与常规同步代码一样简单易读。这个解决方案非常适合Python的语法,并且极大地影响了标准库asyncio中的现代异步工具包。
Twisted框架的最大优点是虽然本身只是一个捆绑很少的引擎,但支持许多其他扩展可用于扩展其功能,比如从低级网络编程(TCP/UDP)和高级应用程序(HTTP,IMAP,SHH等)。所以,Twisted天然适合编写专业服务,但不适合常规Web应用程序。开发人员必须自己编写很多东西才能实现Django中自带那些功能。Twisted目前开发和维护还很活跃,正在努力迁移代码到Python 3,其核心功能不久前被重写,但许多第三方模块还存在兼容性问题。
Twisted inlineCallbacks代码示例:
Sanic
Sanic是基于asyncio-Python的异步编程工具箱,与Python 3.4版本的标准库捆绑在一起。Sanic的开发基于Sanic需要掌握asyncio思想,涉及协程的理论知识,并发编程以及关于应用程序中数据流的推理。Sanic在处理长连接时特别有用,比如websocket,如果需要支持websockets或进行大量持久的外部API调用,Sanic是个非常不错的选择。
Sanic的另一个用例是编写 "glue-web App",它可以作为两个具有不兼容API的子系统之间的代理。
Sanic框架非常快。其中一个依赖项是Uvloop,它用来替换asyncio的内置事件循环的替代品。Uvloop是libuv的包装器,与Node.js相同的引擎。根据uvloop官方文档,可以让 asyncio的效率提高了2-4倍。
就功能方面Sanic模仿Flask,比如通过共享Blueprints的概念,微小的子应用程序,允许开发人员在更大的应用程序中拆分和组织其代码。对于光光是数据增删改查CRUD应用,Sanic也不是一个好的选择。
Sanic一个示例:
Japronto
在高性能编程领域,有著名的C10K甚至C10M问题,Python Web应用怎么实现每秒处理100W的请求呢?这就是Python把asyncio添加到标准库时想要实现的目标。Japronto是一个基于asyncio的微框架。通过使用uvloop和PicoHTTPParser Japronto实现了每秒处理100万个请求。Uvloop上面说了是基于libuv的asyncio后端,而PicoHTTPParser是用C编写的轻量级HTTP头解析器。
Japronto框架的所有核心组件也用C实现,还使用各种低层优化和技巧来调整性能。Japronto主要用于高性能特殊任务,它们无法通过大而冗余的主流框架实现。
Japronto还为REST API的微服务开发提供坚实的基础,开发人员只需要设置路由并确定哪些路由应使用同步或异步处理程序。
Japronto中"Hello world"应用示例:
查看全部
Python Web框架大列兵,写给初学者的Web框架介绍
我们知道Web开发最重要的是选择合适的框架,一个好的框架可以极大的提高我们开发的效率,也能帮助我们的应用能按照需求快速迭代。Web框架的数量和质量是一个语言是否成熟的标志之一。PHP下有Larvarel、CodeIgniter,Yii、TP等著名框架使得PHP成为最流行的Web语言之一。Ruby借助其强大框架Rails以RoR(Ruby on Rails)生态开辟了一番天地,很多RoR应用以强大的功能和敏捷能力而闻名,比如知名Git服务器系统Gitlab。那么时下最流行的语言Python Web框架的情况怎么样呢?今天虫虫就来给大家介绍这个。
概述
Python和PHP一样,也有着大量的Web框架,其Web框架生态圈非常广泛和多样化。在进入具体主题之前,我们先介绍下Web框架。
Web框架是对常见通用功能的打包,比如Web权限认证模块、导航路由模块、HTTP解析模块、ORM模块以及做扩展使用的插件体系等,打包这些功能可以让开发人员轻松地创建Web应用程序。是一种高层次的代码和应用逻辑重用方法,可以极大的它减少了开发人员花在编写代码上的时间从而提高开发效率。通过提供现成的解决方案,Web应用程序框架可以帮助开发人员短时间内完成应用的开发并持续的迭代。
Django
说到Python的Web框架,无疑最想到的必然是Django。Django和Laravel最初都是借鉴了RoR的强大思想(动态、DDD、约定优于配置、低重复、及时反馈)。Django框架使用了类MVC的MVT(模型、视图、模板)模式,用Django ORM和数据库联系。
Django ORM内置的管理面板,可以轻松实现数据库内容的管理。使用很少的配置就可能,自动生成数据库模型。
视图可以包括函数和类,视图的URL路由分配在urls.py文件中完成,可以设计出完美优雅的URL调度。
Django的模板的系统则相当简单,甚至不支持直接嵌入代码,需要预先生成Tag、Filter才能调用。
Django支持强大的解决方案:
全栈模式,内置了大量所有必须的模块cache、session、feed、orm、geo、auth。
同时也支持"内置电池"(batteries included)模式。
Django是典型的"大而全"的逻辑,这可以极大的方便大多数开发者。但是这就导致其灵活性不足。要引入其他更好的第三方优秀组件就基本上很难,比如想要在Django里用SQLAlchemy或Mako,需要打上很多补丁,而且会导致管理面板,授权,会话处理或生成表单等功能都不能使用。
当然Django最人性化的地方是其强大的社区支持和详细文档完美的文档Django 书。文档在安装后就完全嵌入系统的各个部分,使用非常方便,这使得其开发的入门门槛很低。
最后给一个Django网站模型的示例:
Pyramid
Pyramid也是一个常用的热门Python Web框架,它源于Pylons和repoze.bfg模块,在吸取精华的基础上使得Pyramid快速成长为了一个成熟和稳定的框架。
虽然两者出现的时间差不多(2005),Pyramid和Django的设计思想则大相径庭。Pyramid非常灵活,很容易定制,可以非常自我的方式以创建特征。Pyramid不会强迫使用框架的习语,对于复杂或高度非标准的项目来说,这点非常有用。
虽然也内置ORM模块,但是更倡导使用成熟的SQLAlchemy ORM。你也可以按照喜好来定制,比如你可能喜欢peewee ORM,使用原始SQL查询或与NoSQL数据库集成。
Pyramid中所有选项都是开放式的,所以需要动手能力强一点,可能最初学者稍有点门槛。
Pyramid是一个自称"开始小,完成大,保持完备的框架。"(start small, finish big, stay finished framework.)。所以非常适合有一定经验丰富的开发人员。
Pyramid一个典型的"Hello Chongchong"应用示例:
web2py
web2py源于一个教学范例框架,其最关心的是是易于开发和部署。
Web2py框架也源于RoR和Django思想的启发,奉行约定优于配置的想法,web2py中有很多合理的默认值,允许开发人员快速启动。
Web2py框架自带了很多模块,比如内置服务器,生成HTML的帮助器,表单,验证器等等,但是Web2py多数据库引擎的支持很简单。其他更多内置的功能有:
jQuery和Ajax建站助手;
调度程序和cron;
双因子认证助手;
文本消息发送器;
事件工单系统,允许自动将生产环境中发生的问题分配给开发人员。
Web2py也宣称,提供全栈式解决方案,提供可能需要的一切模块。
Web2py在线提供了大量文档:
从零开始逐步指导入门,比如简要介绍Python语言。以友好的方式展示web2py的各个功能,包括大量代码示例和屏幕截图等。
尽管具有一定竞争优势,但web2py的社区远远小于Django和Pyramid。其官方邮件列表也不大活跃。另外web2py目前还不能和Python 3不兼容。
web2py一个典型的广告模型示例:
微框架
与大而全思想相反的设计思想是,小而精致的设计,这就是微框架。微框架的好处就是没有冗余,因而性能都很好。
Flask
Flask是除了Django外最流行的Python Web框架。Flask是一个微框架,具备了基本功能,也支持轻松的扩展。因此,Flask更适合做为胶水来用,来粘合各个Web库。
纯 Flask不支持任何存储,但是可以Flask-SQLAlchemy,Flask-MongoAlchemy和Flask-Redis等。类似的基本模板系统是Jinja2,可以使用Mako替换。
Flask框架的座右铭是轻量,"一次一滴"(one drop at a time),这也在其文档中得到全面反映。关于如何构建Flash应用程序可以通过点点滴滴方式学习。阅读几段文档后,就能适应其开发任务了。
在Flash中你不需要一次就学习很多东西,尤其高级的功能,知道你真正需要的时候再学不迟,这样可以避免无实践的"尴学"。
Flask的最大问题是,没有大量Flask扩展支持和功能打包。常常遇到扩展插件停更或者文档过时的情况,需要花费大量的精力处理这些情况。
Flask一个简单示例如下:
Falcon
Falcon 猎鹰也是一个比较流行的微框架。其目标是创建一个简洁、轻量的Web应用程序基础。官方宣称Falcon是一个裸壳(bare-metal),无限膨胀(bloat-free)的工具集,用于快速的构建后端代码和微服务。Falcon兼容Python 2和3,不用担心Python的版本问题。
Falcon的一大优势在于其性能非常高,非常快。其官方网站基准测试显示,其比Django或Flask等具有很高的性能优势(27~75倍)。
Falcon缺点是其打包模块有点太少,有路由,中间件,钩子,除此之外就不提供其他功能了(裸壳)。额外其他功能,比如验证等都需要开发人员来开发扩展。因为其设计中就假设用于构建REST API。
当然其高性能的高度定制的特点确实是一个很好的卖点。毕竟有时候"最简单的解决方案就是最好的方案"。
Falcon示例程序:
API Star
API Star是一个新的Web微框架,只支持Python 3,其特性使用了Python 3.5中引入的类型提示。API Star使用内置的类型提示实现以简洁、声明式的构建验证模式表示,然后绑定这些模式来请求处理函数。
API Star还具有兼容OpenAPI 3 的自动API生成文档功能。
API Star另一个突出的特性是依赖注入机制。这是一个更强大、更智能中间件的替代品。比如可以编写一个所谓的Component,它将使用当前经过身份验证来提供给用户视图。在视图级别,只需要明确声明它将需要User实例,其他事情API Star就会在幕后自动完成。
自动依赖注入优于常规中间件的优点是组件不会有其他未使用视图的开销。同样
API Star也可以以更传统,同步性的,兼容WSGI的方式在asyncio上运行。
最后与API Star捆绑在一起的其他模块都非常标准:比如使用jinja2,路由和事件挂钩进行模板化扩展支持。
总之API Star初生牛犊,发展可观。截止当前其GitHub存储库中有超过5271的星星。贡献者已经接近一百。PR的合并也非常快,是一个快速增长和协作的新兴框架。
基于异步和asyncio的框架
Python web网站通常很慢,为了提高性能,异步技术就成了灵丹妙药。Python也有很多这类的框架。
Twisted
Twisted是Python中最古老,最成熟的Python异步框架。Twisted最初产生于2002年,其核心是一个名为reactor的事件驱动网络引擎,用于调度和调用用户定义的回调。开始的时候开发人员必须通过定义函数并在操作成功和失败时分别传递它们来使用显式回调。
后来Twisted引入了inlineCallbacks ,用于编写异步代码程序,这些代码与常规同步代码一样简单易读。这个解决方案非常适合Python的语法,并且极大地影响了标准库asyncio中的现代异步工具包。
Twisted框架的最大优点是虽然本身只是一个捆绑很少的引擎,但支持许多其他扩展可用于扩展其功能,比如从低级网络编程(TCP/UDP)和高级应用程序(HTTP,IMAP,SHH等)。所以,Twisted天然适合编写专业服务,但不适合常规Web应用程序。开发人员必须自己编写很多东西才能实现Django中自带那些功能。Twisted目前开发和维护还很活跃,正在努力迁移代码到Python 3,其核心功能不久前被重写,但许多第三方模块还存在兼容性问题。
Twisted inlineCallbacks代码示例:
Sanic
Sanic是基于asyncio-Python的异步编程工具箱,与Python 3.4版本的标准库捆绑在一起。Sanic的开发基于Sanic需要掌握asyncio思想,涉及协程的理论知识,并发编程以及关于应用程序中数据流的推理。Sanic在处理长连接时特别有用,比如websocket,如果需要支持websockets或进行大量持久的外部API调用,Sanic是个非常不错的选择。
Sanic的另一个用例是编写 "glue-web App",它可以作为两个具有不兼容API的子系统之间的代理。
Sanic框架非常快。其中一个依赖项是Uvloop,它用来替换asyncio的内置事件循环的替代品。Uvloop是libuv的包装器,与Node.js相同的引擎。根据uvloop官方文档,可以让 asyncio的效率提高了2-4倍。
就功能方面Sanic模仿Flask,比如通过共享Blueprints的概念,微小的子应用程序,允许开发人员在更大的应用程序中拆分和组织其代码。对于光光是数据增删改查CRUD应用,Sanic也不是一个好的选择。
Sanic一个示例:
Japronto
在高性能编程领域,有著名的C10K甚至C10M问题,Python Web应用怎么实现每秒处理100W的请求呢?这就是Python把asyncio添加到标准库时想要实现的目标。Japronto是一个基于asyncio的微框架。通过使用uvloop和PicoHTTPParser Japronto实现了每秒处理100万个请求。Uvloop上面说了是基于libuv的asyncio后端,而PicoHTTPParser是用C编写的轻量级HTTP头解析器。
Japronto框架的所有核心组件也用C实现,还使用各种低层优化和技巧来调整性能。Japronto主要用于高性能特殊任务,它们无法通过大而冗余的主流框架实现。
Japronto还为REST API的微服务开发提供坚实的基础,开发人员只需要设置路由并确定哪些路由应使用同步或异步处理程序。
Japronto中"Hello world"应用示例:
php 循环抓取网页内容 _variables介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 115 次浏览 • 2022-06-25 02:10
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
查看全部
php 循环抓取网页内容 _variables介绍
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
php 循环抓取网页内容 _variables介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 126 次浏览 • 2022-06-24 18:52
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
查看全部
php 循环抓取网页内容 _variables介绍
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
php 循环抓取网页内容 _variables介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 67 次浏览 • 2022-06-19 01:25
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
查看全部
php 循环抓取网页内容 _variables介绍
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
php 循环抓取网页内容 _variables介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 330 次浏览 • 2022-06-13 13:41
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
查看全部
php 循环抓取网页内容 _variables介绍
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
php 循环抓取网页内容 _variables介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2022-06-07 20:21
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
查看全部
php 循环抓取网页内容 _variables介绍
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
php 循环抓取网页内容 _variables介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 112 次浏览 • 2022-06-04 13:33
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
查看全部
php 循环抓取网页内容 _variables介绍
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
php 循环抓取网页内容 _variables介绍
网站优化 • 优采云 发表了文章 • 0 个评论 • 57 次浏览 • 2022-05-31 10:30
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
查看全部
php 循环抓取网页内容 _variables介绍
技术总编:张计宝
导读
在stata的表达式中,除了外置变量之外,还有一种变量是内置变量,形式为“_variables”,它们是由stata创建和更新的内置系统变量,常见的有_n、_N、_b、_cons、_se、_pi、_rc等。需要提示的是,正是由于这些是系统内置变量,因此我们要避免使用这些单词来作为用户变量名,此外,stata还有许多内置变量也都是以下划线开头的,最好不要以“_”为第一个字元来定义变量。
1、_n和_N
_n和_N分别可以作为分组的计数器和总数用来索引观测值和生成数字序列,在处理数据时十分常用。举个简单的例子,在auto数据中,我们想分别给国产车和进口车进行编号并统计数量,那么就可以通过分组并使用_n和_N来实现:
clear allsysuse auto, clearbys foreign: gen count = _nbys foreign: gen total = _N
这样我们就得到了两个分组下每辆车的编号以及总数了:
可以看到在这个数据中。国产车一共有52辆,进口车有22辆。
2、_b、_cons、_se和_pi
_b[]常用于回归之后,用于提取模型中的某个估计参数。_cons是常数的意思,就是回归方程中1的截距项,间接引用时则代表截距项,如和_b结合使用:_b[_cons],代表提取模型截距项的估计值。_se[]用于提取模型某个系数的标准差。_pi代表圆周率Π的精确值,可直接用于三角函数的计算中。
3、_rc与capture
_rc可以看作是一个储存错误代码的暂元,当_rc等于0时代表程序成功执行且没有发生错误,反之即发生了错误。如果想要在不终止程序的前提下提取错误代码,就可以使用_rc来实现。例如在_rc前面加上display就可以直接显示当前程序的错误代码。
我们知道当capture后面的命令有错误时,会抑制其输出,并把错误代码存储在_rc中,因此在实际操作中经常结合二者来使用。在没有使用capture的情况下,如果没有发生错误,是不会返回错误代码的,而当发生错误时,会返回诸如r(111)此类的提示,这里r()中的数字就是_rc里储存的错误代码。错误代码的种类有很多,常见的有111(观测值不存在)、601(文件不存在)、109(类型不匹配)、199(命令不存在)等等,当遇到这些代码时,直接点击r(#)就可以查看错误原因类型,或者直接help r(#)也可以查看错误原因。
举个简单的例子,我们有时会为了避免重复而在创建文件夹时前面加上capture,表示如果该文件夹存在就跳过,如果不存在那么就创建。如果将创建文件夹的语句和“display _rc”一同运行,就可以看到文件夹是否成功新建,并且无需终止程序。如果想要输出的结果更加直观,可以设置提示语句:
cap mkdir "D:\mainwork\_variables介绍"if _rc != 0 {dis "该文件夹已存在!" //若错误代码不为0,输出“该文件夹已存在!”字样}
由于小编之前已经创建过该文件夹,这里重复创建发生了错误,因此得到了已存在的提示。更重要的是,在网络爬虫中,使用_rc可以避免由网络延时导致的程序错误。以抓取新浪财经网页中长江电力的公司公告为例(网址为:),我们可以看到单个页面共有30条公告,一共有47页。如果我们想要爬取单个页面的30条公告,只需直接抓取,然后就可以进行清洗和处理了。代码也很简单:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"copy "http://vip.stock.finance.sina. ... ot%3B temp.txt, replaceinfix strL v 1-100000 using temp.txt, clear //读入抓取到的网页内容
但如果我们需要爬取该公司所有的公告,就需要对页码进行循环,也就是网址最后的数字:
这时就会出现一个问题:在代码正确无误的情况下,却偶尔会出现报错。这是因为,在循环抓取网页时,有时网络的延迟会致使报错。那么,配合使用capture和_rc这对好朋友就能轻松解决这个爬虫过程中常见的问题了,具体代码如下:
clearcap mkdir "D:\mainwork\新浪上市公司公告"cd "D:\mainwork\新浪上市公司公告"forvalues p = 1/10000 { cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace while _rc != 0 { sleep 5000 //当错误代码不为0时,休息5秒再继续运行 cap copy "http://vip.stock.finance.sina. ... ge%3D`p'" temp.txt, replace }}
除此之外,我们还可以利用_rc的特性来显示错误提示,只需在_rc等于不同的值时,输出相应的错误原因即可。更多功能,一起来动手探索吧。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。