curl爬虫(php的curl怎么爬取网页内容)
本文目录
- php的curl怎么爬取网页内容
- 如何优雅地使用c语言编写爬虫
- 如何用爬虫爬网络代理服务器地址
- php中curl爬虫 怎么样通过网页获取所有链接
- 各种语言写网络爬虫有什么优点缺点
- PHP的curl模块和python的pycurl模块的区别
php的curl怎么爬取网页内容
创建一个新cURL资源
设置URL和相应的选项
抓取URL并把它传递给浏览器
关闭cURL资源,并且释放系统资源
代码案例:
如何优雅地使用c语言编写爬虫
大家在平时或多或少地都会有编写网络爬虫的需求。一般来说,编写爬虫的首选自然非python莫属,除此之外,java等语言也是不错的选择。选择上述语言的原因不仅仅在于它们均有非常不错的网络请求库和字符串处理库,还在于基于上述语言的爬虫框架非常之多和完善。良好的爬虫框架可以确保爬虫程序的稳定性,以及编写程序的便捷性。所以,这个cspider爬虫库的使命在于,我们能够使用c语言,依然能够优雅地编写爬虫程序。爬虫的特性配置方便。使用一句设置函数,即可定义user agent,cookie,timeout,proxy以及抓取线程和解析线程的最大数量。程序逻辑独立。用户可以分别定义爬虫的解析函数,和数据持久化函数。并且对于解析到的新url,用户可以使用cspider提供的addUrl函数,将其加入到任务队列中。便捷的字符串处理。cspider中提供了基于pcre的简单的正则表达式函数,基于libxml2的xpath解析函数,以及用于解析json的cJSON库。高效的抓取。cspider基于libuv调度抓取线程和解析线程,使用curl作为其网络请求库。使用cspider的步骤获取cspider_t。自定义user agent,cookie,timeout,proxy以及抓取线程和解析线程的最大数量。添加初始要抓取的url到任务队列。编写解析函数和数据持久化函数。启动爬虫。例子先来看下简单的爬虫例子,会在后面详细讲解例子。#include《cspider/spider.h》/*自定义的解析函数,d为获取到的html页面字符串*/void p(cspider_t *cspider, char *d, void *user_data) {char *get;//xpath解析htmlint size = xpath(d, "//body/div/li/strong/a", get, 100);int i;for (i = 0; i 《 size; i++) {//将获取到的电影名称,持久化saveString(cspider, get);}}/*数据持久化函数,对上面解析函数中调用的saveString()函数传入的数据,进行进一步的保存*/void s(void *str, void *user_data) {char *get = (char *)str;FILE *file = (FILE*)user_data;fprintf(file, "%s\n", get);return;}int main() {//初始化spidercspider_t *spider = init_cspider();char *agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:42.0) Gecko/20100101 Firefox/42.0";//char *cookie = "bid=s3/yuH5Jd/I; ll=108288; viewed=1130500_24708145_6433169_4843567_1767120_5318823_1899158_1271597; __utma=30149280.927537245.1446813674.1446983217.1449139583.4; __utmz=30149280.1449139583.4.4.utmcsr=accounts.douban.com|utmccn=(referral)|utmcmd=referral|utmcct=/login; ps=y; ue=965166527@qq.com; dbcl2=58742090:QgZ2PSLiDLQ; ck=T9Wn; push_noty_num=0; push_doumail_num=7; ap=1; __utmb=30149280.0.10.1449139583; __utmc=30149280";//设置要抓取页面的urlcs_setopt_url(spider, "so.tv.sohu.com/list_p1100_p20_p3_u5185_u5730_p40_p5_p6_p77_p80_p9_2d1_p101_p11.html");//设置user agentcs_setopt_useragent(spider, agent);//cs_setopt_cookie(spider, cookie);//传入解析函数和数据持久化函数的指针cs_setopt_process(spider, p, NULL);//s函数的user_data指针指向stdoutcs_setopt_save(spider, s, stdout);//设置线程数量cs_setopt_threadnum(spider, DOWNLOAD, 2);cs_setopt_threadnum(spider, SAVE, 2);//FILE *fp = fopen("log", "wb+");//cs_setopt_logfile(spider, fp);//开始爬虫return cs_run(spider);}例子讲解cspider_t *spider = init_cspider();获取初始的cspider。cs_setopt_xxx这类函数可以用来进行初始化设置。其中要注意的是: cs_setopt_process(spider,p,NULL);与cs_setopt_save(spider,s,stdout);,它们分别设置了解析函数p和数据持久化函数s,这两个函数需要用户自己实现,还有用户自定义的指向上下文信息user_data的指针。在解析函数中,用户要定义解析的规则,并对解析得到的字符串可以调用saveString进行持久化,或者是调用addUrl将url加入到任务队列中。在saveString中传入的字符串会在用户自定义的数据持久函数中得到处理。此时,用户可以选择输出到文件或数据库等。最后调用cs_run(spider)即可启动爬虫。具体的API参数可在这里查看
如何用爬虫爬网络代理服务器地址
网络数据量越来越大,从网页中获取信息变得越来越困难,如何有效地抓取并利用信息,已成为网络爬虫一个巨大的挑战。下面IPIDEA为大家讲明爬虫代理IP的使用方法。
1. 利用爬虫脚本每天定时爬取代理网站上的ip,写入MongoDB或者其他的数据库中,这张表作为原始表。
2. 使用之前需要做一步测试,就是测试这个ip是否有效,方法就是利用curl访问一个网站查看返回值,需要创建一张新表,循环读取原始表有效则插入,验证之后将其从原始表中删除,验证的同时能够利用响应时间来计算这个ip的质量,和最大使用次数,有一个算法能够参考一种基于连接代理优化管理的多线程网络爬虫处理方法。
3. 把有效的ip写入ip代理池的配置文件,重新加载配置文件。
4.让爬虫程序去指定的dailiy的服务ip和端口,进行爬取。
php中curl爬虫 怎么样通过网页获取所有链接
本文承接上面两篇,本篇中的示例要调用到前两篇中的函数,做一个简单的URL采集。一般php采集网络数据会用file_get_contents、file和cURL。不过据说cURL会比file_get_contents、file更快更专业,更适合采集。今天就试试用cURL来获取网页上的所有链接。示例如下:《?php/* * 使用curl 采集hao123.com下的所有链接。 */include_once(’function.php’);$ch = curl_init();***隐藏网址***// 只需返回HTTP headercurl_setopt($ch, CURLOPT_HEADER, 1);// 页面内容我们并不需要// curl_setopt($ch, CURLOPT_NOBODY, 1);// 返回结果,而不是输出它curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$html = curl_exec($ch);$info = curl_getinfo($ch);if ($html === false) {echo "cURL Error: " . curl_error($ch);}curl_close($ch);$linkarr = _striplinks($html);// 主机部分,补全用***隐藏网址***if (is_array($linkarr)) {foreach ($linkarr as $k =》 $v) {$linkresult = _expandlinks($v, $host);}}printf("《p》此页面的所有链接为:《/p》《pre》%s《/pre》n", var_export($linkresult , true));?》function.php内容如下(即为上两篇中两个函数的合集):《?phpfunction _striplinks($document) {preg_match_all("’《s*as.*?hrefs*=s*(+))’isx", $document, $links);// catenate the non-empty matches from the conditional subpatternwhile (list($key, $val) = each($links)) {if (!empty($val))$match = $val;} while (list($key, $val) = each($links)) {if (!empty($val))$match = $val;}// return the linksreturn $match;}/*===================================================================*Function:_expandlinksPurpose:expand each link into a fully qualified URLInput:$linksthe links to qualify$URIthe full URI to get the base fromOutput:$expandedLinksthe expanded links*===================================================================*/function _expandlinks($links,$URI){$URI_PARTS = parse_url($URI);$host = $URI_PARTS;preg_match("/^+/",$URI,$match);$match = preg_replace("|/);$match = preg_replace("|/$|","",$match);$match_part = parse_url($match);$match_root =$match_part;***隐藏网址***"|^(/)|i",***隐藏网址***"|/./|","|/+/../|");$replace = array("",$match_root."/",$match."/","/","/");$expandedLinks = preg_replace($search,$replace,$links);return $expandedLinks;}?》
各种语言写网络爬虫有什么优点缺点
优点:1.语言比较简单,PHP 是非常随意的一种语言。写起来容易让把精力放在要做的事情上,而不是各种语法规则等等。2.各种功能模块齐全,这里分两部分:(1)网页下载:curl 等扩展库;(2)文档解析:dom、xpath、tidy、各种转码工具,可能跟题主的问题不太一样,爬虫需要提取正文,所以需要很复杂的文本处理,所以各种方便的文本处理工具容易上手。缺点:并发处理能力较弱:由于当时 PHP 没有线程、进程功能,要想实现并发需要借用多路服用模型,PHP 使用的是 select 模型。实现其来比较麻烦,可能是因为水平问题的程序经常出现一些错误,导致漏抓。
PHP的curl模块和python的pycurl模块的区别
php的curl,是在php发布程序的ext文件中,作为一个php自带的支持,需要改写php的配置文件,修改php.ini,将;extension=php_curl.dll前的分号去掉。python的pycurl,不是python自带的支持程序,python在做爬虫一般都是用urllib,urllib2,twisted等,比较少的使用pycurl.安装略.c的curl,是前面2个语言的curl父程序,是c的curl才有了php的curl和python的pycurl,同时,python的pycurl文档说明了只实现了部分功能,即是一个c的curl的阉割版。泪奔,原来用了那么长时间的东西,连冰山一角都没触碰,或者python的pycurl也只是会用其中的一个或少数几个功能。
更多文章:
irrevocable(irrevocable,irrecoverable 词义区别)
2024年7月2日 23:14
default null(Oracle中data_default列为null和不为null,分别代表什么含义)
2024年7月1日 21:20
hit的过去式(hit的动词原形,动词过去式,动词过去分词怎么读)
2024年5月16日 18:30
show out(show …for 和 show … to 怎么区分)
2023年6月24日 08:20
sql怎么连接数据库(SQL数据库的表与表之间的关系怎么连接(sql表与表之间如何建立关联))
2024年7月19日 01:55
css鼠标滑过(css中如何定义鼠标经过改变图片,并且可以有链接点击)
2024年7月14日 05:48
黑色手机端网页模板(我自己的网站,但是模板的背景偏黑,导致字体不明显,请问改什么代码可以改变背景的颜色,十分感谢大家)
2024年7月24日 05:38
mysql有必要学吗(mysql究竟有什么用,学了SQL SEVER还用得着学它吗)
2024年9月9日 02:45
金色字体代码(平面设计中的金色字体是怎么调的,RGB或者CMYK值是多少)
2024年7月2日 16:10