php框架

php框架

一个简单的开源PHP爬虫框架『Phpfetcher』

采集交流优采云 发表了文章 • 0 个评论 • 444 次浏览 • 2020-05-27 08:02 • 来自相关话题

  报dom为空
  
  fanfank 文章作者
  完整的代码贴下来我看一下,或者在微博私信我,我帮你看一下
  
  aa
  //下面两行促使这个项目被下载出来后本文件能直接运行
  $demo_include_path = dirname(__FILE__) . ‘/../’;
  set_include_path(get_include_path() . PATH_SEPARATOR . $demo_include_path);
  require_once(‘phpfetcher.php’);
  class mycrawler extends Phpfetcher_Crawler_Default {
  public function handlePage($page) {
  var_dump($page);
  //打印处当前页面的第1个h1标题内荣(下标从0开始)
  $strFirstH1 = trim($page->sel(‘//title’, 0)->plaintext);
  if (!empty($strFirstH1)) {
  echo $page->sel(‘//title’, 0)->plaintext;
  echo “\n”;
  }
  }
  }
  $crawler = new mycrawler();
  $arrJobs = array(
  //任务的名子随意起,这里把名子叫qqnews
  //the key is the name of a job, here names it qqnews
  ‘qqnews’ => array(
  ‘start_page’ => ‘#8217;, //起始网页
  ‘link_rules’ => array(
  /*
  * 所有在这里列举的正则规则,只要能匹配到超链接,那么那条爬虫才会爬到那条超链接
  * Regex rules are listed here, the crawler will follow any hyperlinks once the regex matches
  */
  //’#news\.qq\.com/a/\d+/\d+\.htm$#’,
  ),
  //爬虫从开始页面算起,最多爬取的深度,设置为2表示爬取深度为1
  //Crawler’s max following depth, 1 stands for only crawl the start page
  ‘max_depth’ => 1,
  ) ,
  );
  $crawler->setFetchJobs($arrJobs)->run(); //这一行的疗效和下边两行的疗效一样
  其他的没变
  
  aa
  public function read() {
  $this->_strContent = curl_exec($this->_curlHandle);
  是_strContent取到了false造成的 这个是啥缘由呢Page default.php
  
  fanfank 文章作者
  我这儿返回的是403 forbidden,查了一下晓得缘由了,因为user_agent的问题csdn把爬虫给禁了。你可以这样更改:找到文件Phpfetcher/Page/Default.php,然后搜『user_agent』,把上面改掉,我改成『firefox』就可以了,当然你可以可以改得更真实一点,例如哪些『Mozilla/5.0 AppleWebKit』之类的
  有些网站会依照UA来屏蔽恳求,可能是因为个别UA有恶意功击的特点,或者一些爬虫之类的开源爬虫框架,之前百度有一段时间屏蔽360浏览器就是通过360浏览器里一些特定的UA来做到的,当然后来360浏览器把UA给更改嗯,就须要依照其它特点屏蔽了。
  所以你这儿先改一下user_agent吧。
  
  aa
  多谢哈
  试着改成Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0 也不行呢
  试了这儿的也不行 恐怕还是curl的问题
  
  fanfank 文章作者
  我这儿执行都是正常的,结果也能下来。还是通过微博私信说吧,这里说得刷屏了
  
  aa
  围脖id是?
  
  fanfank 文章作者
  另外是,你贴的代码上面,标点符号不对啊,你的start_page对应那一行的标点,怎么是英文的单冒号?后面的单冒号似乎也不是个单冒号吧?要全部用英语的单冒号才行。
  
  aa
  符号是对的哈 都是英语的 没句型错误
  
  joke
  为什么匹配的内容都一样?
  代码:
  sel(‘//span[@id=”text110″]’, 0)->plaintext);
  if (!empty($strFirstH1)) {
  echo “”;
  echo $page->sel(‘//span[@id=”text110″]’, 0)->plaintext;
  echo “”;
  echo “\n”;
  }
  }
  }
  $crawler = new mycrawler();
  $arrJobs = array(
  ‘joke’ => array(
  ‘start_page’ => ‘#8217;,
  ‘link_rules’ => array(
  ‘#/\woke\wtml/\w+/20151021\d+\.htm$#’,
  ),
  ‘max_depth’ => 2,
  ) ,
  );
  $crawler->setFetchJobs($arrJobs)->run();
  
  fanfank 文章作者
  你的代码没贴全,而且匹配的内容都一样我没很理解是哪些意思,这个问题有点长,你直接在微博私信我,我帮你看一下
  
  fanfank 文章作者
  已经修补了。之前的问题是爬虫不认识站内链接,例如有的超链接是『/entry』这样的,而不是『』。现在最新的Phpfetcher早已就能辨识站内链接,可以试一下
  
  joke
  谢谢 ,搞定了
  
  modejun
  楼主您好,问问假如我晓得了一个网站开源爬虫框架,但是要递交post参数,这个要如何弄呢,朋友提供一下思路
  
  fanfank 文章作者
  提交post参数,那觉得场景很特殊的,因为这个就不是单纯地按照链接爬取网页内容了,而且假如真的提供这个功能,针对什么样的链接什么样的参数,怎么递交,然后返回的内容是如何处理这种,目前我觉得似乎不太适宜爬虫做。或者你在微博私信我,告诉我你的使用场景是哪些,我瞧瞧是不是考虑找时间加进去
  
  modejun
  场景就是有一翻页时用ajax post递交的page参数,如果是get就太easy。还有顺便问问,如果翻页我明天试了要解决的话就是调节深度,但是似乎最大是20,还有就是更改正则循环调用setFetchJobs这个方式,总是觉得不是这么完美,有哪些好的思路解决翻页这个问题吗,现在公司在定方案我想多了解把这个框架的优势发挥下来,感谢了。
  
  fanfank 文章作者
  如果像你说的是个post恳求,那么它返回的应当不是一个HTML格式的文档,通常都是json格式的,然后由当前页面将异步返回的内容加载显示下来。
  你们的post恳求应当是有类似pn,rn等参数,如果大家仅仅是想领到post恳求的所有内容,可以直接写一个for循环,然后使用php的curl来直接发送post恳求获取每一个页面内容,可以不使用爬虫,因为这个爬虫基本原理是针对GET恳求返回的HTML页面的,然后手动抽取HTML的标签
  最大深度可以更改类『Phpfetcher_Crawler_Default』中的『MAX_DEPTH』变量,把20改成-1就没有限制了,不过建议还是设一个上限比较好
  可以不需要循环更改正则呀,设置正则规则的可以是一个链表,把上面的所有你认为合适的正则都列上就可以,除非说你的正则表达式还得依据页面的某个参数或则内容不同而更改,那这个情况还是相对特殊了一点···
  翻页的解决,如果是GET就用爬虫,如果是POST,那么直接for循环之后调用curl会更好。
  
  ;;;
  好像不错
  
  ;;;
  能不能写个DOM选择器和技巧的文档,最好支持css选择DOM标签,有子节点,父节点,兄弟节点选择才好
  
  fanfank 文章作者
  在这个项目的github页面:,中文说明的第2节上面,有介绍dom选择器的文档
  
  jeremy
  博主。。为什么https的页面没办法恳求呢? 查看全部

  报dom为空
  
  fanfank 文章作者
  完整的代码贴下来我看一下,或者在微博私信我,我帮你看一下
  
  aa
  //下面两行促使这个项目被下载出来后本文件能直接运行
  $demo_include_path = dirname(__FILE__) . ‘/../’;
  set_include_path(get_include_path() . PATH_SEPARATOR . $demo_include_path);
  require_once(‘phpfetcher.php’);
  class mycrawler extends Phpfetcher_Crawler_Default {
  public function handlePage($page) {
  var_dump($page);
  //打印处当前页面的第1个h1标题内荣(下标从0开始)
  $strFirstH1 = trim($page->sel(‘//title’, 0)->plaintext);
  if (!empty($strFirstH1)) {
  echo $page->sel(‘//title’, 0)->plaintext;
  echo “\n”;
  }
  }
  }
  $crawler = new mycrawler();
  $arrJobs = array(
  //任务的名子随意起,这里把名子叫qqnews
  //the key is the name of a job, here names it qqnews
  ‘qqnews’ => array(
  ‘start_page’ => ‘#8217;, //起始网页
  ‘link_rules’ => array(
  /*
  * 所有在这里列举的正则规则,只要能匹配到超链接,那么那条爬虫才会爬到那条超链接
  * Regex rules are listed here, the crawler will follow any hyperlinks once the regex matches
  */
  //’#news\.qq\.com/a/\d+/\d+\.htm$#’,
  ),
  //爬虫从开始页面算起,最多爬取的深度,设置为2表示爬取深度为1
  //Crawler’s max following depth, 1 stands for only crawl the start page
  ‘max_depth’ => 1,
  ) ,
  );
  $crawler->setFetchJobs($arrJobs)->run(); //这一行的疗效和下边两行的疗效一样
  其他的没变
  
  aa
  public function read() {
  $this->_strContent = curl_exec($this->_curlHandle);
  是_strContent取到了false造成的 这个是啥缘由呢Page default.php
  
  fanfank 文章作者
  我这儿返回的是403 forbidden,查了一下晓得缘由了,因为user_agent的问题csdn把爬虫给禁了。你可以这样更改:找到文件Phpfetcher/Page/Default.php,然后搜『user_agent』,把上面改掉,我改成『firefox』就可以了,当然你可以可以改得更真实一点,例如哪些『Mozilla/5.0 AppleWebKit』之类的
  有些网站会依照UA来屏蔽恳求,可能是因为个别UA有恶意功击的特点,或者一些爬虫之类的开源爬虫框架,之前百度有一段时间屏蔽360浏览器就是通过360浏览器里一些特定的UA来做到的,当然后来360浏览器把UA给更改嗯,就须要依照其它特点屏蔽了。
  所以你这儿先改一下user_agent吧。
  
  aa
  多谢哈
  试着改成Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0 也不行呢
  试了这儿的也不行 恐怕还是curl的问题
  
  fanfank 文章作者
  我这儿执行都是正常的,结果也能下来。还是通过微博私信说吧,这里说得刷屏了
  
  aa
  围脖id是?
  
  fanfank 文章作者
  另外是,你贴的代码上面,标点符号不对啊,你的start_page对应那一行的标点,怎么是英文的单冒号?后面的单冒号似乎也不是个单冒号吧?要全部用英语的单冒号才行。
  
  aa
  符号是对的哈 都是英语的 没句型错误
  
  joke
  为什么匹配的内容都一样?
  代码:
  sel(‘//span[@id=”text110″]’, 0)->plaintext);
  if (!empty($strFirstH1)) {
  echo “”;
  echo $page->sel(‘//span[@id=”text110″]’, 0)->plaintext;
  echo “”;
  echo “\n”;
  }
  }
  }
  $crawler = new mycrawler();
  $arrJobs = array(
  ‘joke’ => array(
  ‘start_page’ => ‘#8217;,
  ‘link_rules’ => array(
  ‘#/\woke\wtml/\w+/20151021\d+\.htm$#’,
  ),
  ‘max_depth’ => 2,
  ) ,
  );
  $crawler->setFetchJobs($arrJobs)->run();
  
  fanfank 文章作者
  你的代码没贴全,而且匹配的内容都一样我没很理解是哪些意思,这个问题有点长,你直接在微博私信我,我帮你看一下
  
  fanfank 文章作者
  已经修补了。之前的问题是爬虫不认识站内链接,例如有的超链接是『/entry』这样的,而不是『』。现在最新的Phpfetcher早已就能辨识站内链接,可以试一下
  
  joke
  谢谢 ,搞定了
  
  modejun
  楼主您好,问问假如我晓得了一个网站开源爬虫框架,但是要递交post参数,这个要如何弄呢,朋友提供一下思路
  
  fanfank 文章作者
  提交post参数,那觉得场景很特殊的,因为这个就不是单纯地按照链接爬取网页内容了,而且假如真的提供这个功能,针对什么样的链接什么样的参数,怎么递交,然后返回的内容是如何处理这种,目前我觉得似乎不太适宜爬虫做。或者你在微博私信我,告诉我你的使用场景是哪些,我瞧瞧是不是考虑找时间加进去
  
  modejun
  场景就是有一翻页时用ajax post递交的page参数,如果是get就太easy。还有顺便问问,如果翻页我明天试了要解决的话就是调节深度,但是似乎最大是20,还有就是更改正则循环调用setFetchJobs这个方式,总是觉得不是这么完美,有哪些好的思路解决翻页这个问题吗,现在公司在定方案我想多了解把这个框架的优势发挥下来,感谢了。
  
  fanfank 文章作者
  如果像你说的是个post恳求,那么它返回的应当不是一个HTML格式的文档,通常都是json格式的,然后由当前页面将异步返回的内容加载显示下来。
  你们的post恳求应当是有类似pn,rn等参数,如果大家仅仅是想领到post恳求的所有内容,可以直接写一个for循环,然后使用php的curl来直接发送post恳求获取每一个页面内容,可以不使用爬虫,因为这个爬虫基本原理是针对GET恳求返回的HTML页面的,然后手动抽取HTML的标签
  最大深度可以更改类『Phpfetcher_Crawler_Default』中的『MAX_DEPTH』变量,把20改成-1就没有限制了,不过建议还是设一个上限比较好
  可以不需要循环更改正则呀,设置正则规则的可以是一个链表,把上面的所有你认为合适的正则都列上就可以,除非说你的正则表达式还得依据页面的某个参数或则内容不同而更改,那这个情况还是相对特殊了一点···
  翻页的解决,如果是GET就用爬虫,如果是POST,那么直接for循环之后调用curl会更好。
  
  ;;;
  好像不错
  
  ;;;
  能不能写个DOM选择器和技巧的文档,最好支持css选择DOM标签,有子节点,父节点,兄弟节点选择才好
  
  fanfank 文章作者
  在这个项目的github页面:,中文说明的第2节上面,有介绍dom选择器的文档
  
  jeremy
  博主。。为什么https的页面没办法恳求呢?

phpspider: 《我用爬虫三天时间“偷了”知乎一百万用户

采集交流优采云 发表了文章 • 0 个评论 • 424 次浏览 • 2020-05-20 08:01 • 来自相关话题

  《我用爬虫三天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言 》所使用的程序
  phpspider是一个爬虫开发框架。使用本框架爬虫技术用什么语言,你不用了解爬虫的底层技术实现,爬虫被网站屏蔽、有些网站需要登入或验证码识别才会爬取等问题。简单几行PHP代码,就可以创建自己的爬虫,利用框架封装的多进程Worker解释器,代码更简练,执行效率更高速率更快。
  demo目录下有一些特定网站的爬取规则,只要你安装了PHP环境,代码就可以在命令行下直接跑。 对爬虫感兴趣的开发者可以加QQ群一起讨论:147824717。
  下面以糗事百科为例, 来看一下我们的爬虫长哪些样子:
  $configs = array(
 'name' => '糗事百科',
 'domains' => array(
 'qiushibaike.com',
 'www.qiushibaike.com'
 ),
 'scan_urls' => array(
 'http://www.qiushibaike.com/'
 ),
 'content_url_regexes' => array(
 "http://www.qiushibaike.com/article/\d+"
 ),
 'list_url_regexes' => array(
 "http://www.qiushibaike.com/8hr/page/\d+\?s=\d+"
 ),
 'fields' => array(
 array(
 // 抽取内容页的文章内容
 'name' => "article_content",
 'selector' => "//*[@id='single-next-link']",
 'required' => true
 ),
 array(
 // 抽取内容页的文章作者
 'name' => "article_author",
 'selector' => "//div[contains(@class,'author')]//h2",
 'required' => true
 ),
 ),
);
$spider = new phpspider($configs);
$spider->start();
  爬虫的整体框架就是这样, 首先定义了一个$configs链表, 里面设置了待爬网站的一些信息, 然后通过调用$spider = new phpspider($configs);和$spider->start();来配置并启动爬虫.
  
  更多详尽内容爬虫技术用什么语言,移步到:
  开发文档 查看全部

  《我用爬虫三天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言 》所使用的程序
  phpspider是一个爬虫开发框架。使用本框架爬虫技术用什么语言,你不用了解爬虫的底层技术实现,爬虫被网站屏蔽、有些网站需要登入或验证码识别才会爬取等问题。简单几行PHP代码,就可以创建自己的爬虫,利用框架封装的多进程Worker解释器,代码更简练,执行效率更高速率更快。
  demo目录下有一些特定网站的爬取规则,只要你安装了PHP环境,代码就可以在命令行下直接跑。 对爬虫感兴趣的开发者可以加QQ群一起讨论:147824717。
  下面以糗事百科为例, 来看一下我们的爬虫长哪些样子:
  $configs = array(
 'name' => '糗事百科',
 'domains' => array(
 'qiushibaike.com',
 'www.qiushibaike.com'
 ),
 'scan_urls' => array(
 'http://www.qiushibaike.com/'
 ),
 'content_url_regexes' => array(
 "http://www.qiushibaike.com/article/\d+"
 ),
 'list_url_regexes' => array(
 "http://www.qiushibaike.com/8hr/page/\d+\?s=\d+"
 ),
 'fields' => array(
 array(
 // 抽取内容页的文章内容
 'name' => "article_content",
 'selector' => "//*[@id='single-next-link']",
 'required' => true
 ),
 array(
 // 抽取内容页的文章作者
 'name' => "article_author",
 'selector' => "//div[contains(@class,'author')]//h2",
 'required' => true
 ),
 ),
);
$spider = new phpspider($configs);
$spider->start();
  爬虫的整体框架就是这样, 首先定义了一个$configs链表, 里面设置了待爬网站的一些信息, 然后通过调用$spider = new phpspider($configs);和$spider->start();来配置并启动爬虫.
  
  更多详尽内容爬虫技术用什么语言,移步到:
  开发文档

一个简单的开源PHP爬虫框架『Phpfetcher』

采集交流优采云 发表了文章 • 0 个评论 • 444 次浏览 • 2020-05-27 08:02 • 来自相关话题

  报dom为空
  
  fanfank 文章作者
  完整的代码贴下来我看一下,或者在微博私信我,我帮你看一下
  
  aa
  //下面两行促使这个项目被下载出来后本文件能直接运行
  $demo_include_path = dirname(__FILE__) . ‘/../’;
  set_include_path(get_include_path() . PATH_SEPARATOR . $demo_include_path);
  require_once(‘phpfetcher.php’);
  class mycrawler extends Phpfetcher_Crawler_Default {
  public function handlePage($page) {
  var_dump($page);
  //打印处当前页面的第1个h1标题内荣(下标从0开始)
  $strFirstH1 = trim($page->sel(‘//title’, 0)->plaintext);
  if (!empty($strFirstH1)) {
  echo $page->sel(‘//title’, 0)->plaintext;
  echo “\n”;
  }
  }
  }
  $crawler = new mycrawler();
  $arrJobs = array(
  //任务的名子随意起,这里把名子叫qqnews
  //the key is the name of a job, here names it qqnews
  ‘qqnews’ => array(
  ‘start_page’ => ‘#8217;, //起始网页
  ‘link_rules’ => array(
  /*
  * 所有在这里列举的正则规则,只要能匹配到超链接,那么那条爬虫才会爬到那条超链接
  * Regex rules are listed here, the crawler will follow any hyperlinks once the regex matches
  */
  //’#news\.qq\.com/a/\d+/\d+\.htm$#’,
  ),
  //爬虫从开始页面算起,最多爬取的深度,设置为2表示爬取深度为1
  //Crawler’s max following depth, 1 stands for only crawl the start page
  ‘max_depth’ => 1,
  ) ,
  );
  $crawler->setFetchJobs($arrJobs)->run(); //这一行的疗效和下边两行的疗效一样
  其他的没变
  
  aa
  public function read() {
  $this->_strContent = curl_exec($this->_curlHandle);
  是_strContent取到了false造成的 这个是啥缘由呢Page default.php
  
  fanfank 文章作者
  我这儿返回的是403 forbidden,查了一下晓得缘由了,因为user_agent的问题csdn把爬虫给禁了。你可以这样更改:找到文件Phpfetcher/Page/Default.php,然后搜『user_agent』,把上面改掉,我改成『firefox』就可以了,当然你可以可以改得更真实一点,例如哪些『Mozilla/5.0 AppleWebKit』之类的
  有些网站会依照UA来屏蔽恳求,可能是因为个别UA有恶意功击的特点,或者一些爬虫之类的开源爬虫框架,之前百度有一段时间屏蔽360浏览器就是通过360浏览器里一些特定的UA来做到的,当然后来360浏览器把UA给更改嗯,就须要依照其它特点屏蔽了。
  所以你这儿先改一下user_agent吧。
  
  aa
  多谢哈
  试着改成Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0 也不行呢
  试了这儿的也不行 恐怕还是curl的问题
  
  fanfank 文章作者
  我这儿执行都是正常的,结果也能下来。还是通过微博私信说吧,这里说得刷屏了
  
  aa
  围脖id是?
  
  fanfank 文章作者
  另外是,你贴的代码上面,标点符号不对啊,你的start_page对应那一行的标点,怎么是英文的单冒号?后面的单冒号似乎也不是个单冒号吧?要全部用英语的单冒号才行。
  
  aa
  符号是对的哈 都是英语的 没句型错误
  
  joke
  为什么匹配的内容都一样?
  代码:
  sel(‘//span[@id=”text110″]’, 0)->plaintext);
  if (!empty($strFirstH1)) {
  echo “”;
  echo $page->sel(‘//span[@id=”text110″]’, 0)->plaintext;
  echo “”;
  echo “\n”;
  }
  }
  }
  $crawler = new mycrawler();
  $arrJobs = array(
  ‘joke’ => array(
  ‘start_page’ => ‘#8217;,
  ‘link_rules’ => array(
  ‘#/\woke\wtml/\w+/20151021\d+\.htm$#’,
  ),
  ‘max_depth’ => 2,
  ) ,
  );
  $crawler->setFetchJobs($arrJobs)->run();
  
  fanfank 文章作者
  你的代码没贴全,而且匹配的内容都一样我没很理解是哪些意思,这个问题有点长,你直接在微博私信我,我帮你看一下
  
  fanfank 文章作者
  已经修补了。之前的问题是爬虫不认识站内链接,例如有的超链接是『/entry』这样的,而不是『』。现在最新的Phpfetcher早已就能辨识站内链接,可以试一下
  
  joke
  谢谢 ,搞定了
  
  modejun
  楼主您好,问问假如我晓得了一个网站开源爬虫框架,但是要递交post参数,这个要如何弄呢,朋友提供一下思路
  
  fanfank 文章作者
  提交post参数,那觉得场景很特殊的,因为这个就不是单纯地按照链接爬取网页内容了,而且假如真的提供这个功能,针对什么样的链接什么样的参数,怎么递交,然后返回的内容是如何处理这种,目前我觉得似乎不太适宜爬虫做。或者你在微博私信我,告诉我你的使用场景是哪些,我瞧瞧是不是考虑找时间加进去
  
  modejun
  场景就是有一翻页时用ajax post递交的page参数,如果是get就太easy。还有顺便问问,如果翻页我明天试了要解决的话就是调节深度,但是似乎最大是20,还有就是更改正则循环调用setFetchJobs这个方式,总是觉得不是这么完美,有哪些好的思路解决翻页这个问题吗,现在公司在定方案我想多了解把这个框架的优势发挥下来,感谢了。
  
  fanfank 文章作者
  如果像你说的是个post恳求,那么它返回的应当不是一个HTML格式的文档,通常都是json格式的,然后由当前页面将异步返回的内容加载显示下来。
  你们的post恳求应当是有类似pn,rn等参数,如果大家仅仅是想领到post恳求的所有内容,可以直接写一个for循环,然后使用php的curl来直接发送post恳求获取每一个页面内容,可以不使用爬虫,因为这个爬虫基本原理是针对GET恳求返回的HTML页面的,然后手动抽取HTML的标签
  最大深度可以更改类『Phpfetcher_Crawler_Default』中的『MAX_DEPTH』变量,把20改成-1就没有限制了,不过建议还是设一个上限比较好
  可以不需要循环更改正则呀,设置正则规则的可以是一个链表,把上面的所有你认为合适的正则都列上就可以,除非说你的正则表达式还得依据页面的某个参数或则内容不同而更改,那这个情况还是相对特殊了一点···
  翻页的解决,如果是GET就用爬虫,如果是POST,那么直接for循环之后调用curl会更好。
  
  ;;;
  好像不错
  
  ;;;
  能不能写个DOM选择器和技巧的文档,最好支持css选择DOM标签,有子节点,父节点,兄弟节点选择才好
  
  fanfank 文章作者
  在这个项目的github页面:,中文说明的第2节上面,有介绍dom选择器的文档
  
  jeremy
  博主。。为什么https的页面没办法恳求呢? 查看全部

  报dom为空
  
  fanfank 文章作者
  完整的代码贴下来我看一下,或者在微博私信我,我帮你看一下
  
  aa
  //下面两行促使这个项目被下载出来后本文件能直接运行
  $demo_include_path = dirname(__FILE__) . ‘/../’;
  set_include_path(get_include_path() . PATH_SEPARATOR . $demo_include_path);
  require_once(‘phpfetcher.php’);
  class mycrawler extends Phpfetcher_Crawler_Default {
  public function handlePage($page) {
  var_dump($page);
  //打印处当前页面的第1个h1标题内荣(下标从0开始)
  $strFirstH1 = trim($page->sel(‘//title’, 0)->plaintext);
  if (!empty($strFirstH1)) {
  echo $page->sel(‘//title’, 0)->plaintext;
  echo “\n”;
  }
  }
  }
  $crawler = new mycrawler();
  $arrJobs = array(
  //任务的名子随意起,这里把名子叫qqnews
  //the key is the name of a job, here names it qqnews
  ‘qqnews’ => array(
  ‘start_page’ => ‘#8217;, //起始网页
  ‘link_rules’ => array(
  /*
  * 所有在这里列举的正则规则,只要能匹配到超链接,那么那条爬虫才会爬到那条超链接
  * Regex rules are listed here, the crawler will follow any hyperlinks once the regex matches
  */
  //’#news\.qq\.com/a/\d+/\d+\.htm$#’,
  ),
  //爬虫从开始页面算起,最多爬取的深度,设置为2表示爬取深度为1
  //Crawler’s max following depth, 1 stands for only crawl the start page
  ‘max_depth’ => 1,
  ) ,
  );
  $crawler->setFetchJobs($arrJobs)->run(); //这一行的疗效和下边两行的疗效一样
  其他的没变
  
  aa
  public function read() {
  $this->_strContent = curl_exec($this->_curlHandle);
  是_strContent取到了false造成的 这个是啥缘由呢Page default.php
  
  fanfank 文章作者
  我这儿返回的是403 forbidden,查了一下晓得缘由了,因为user_agent的问题csdn把爬虫给禁了。你可以这样更改:找到文件Phpfetcher/Page/Default.php,然后搜『user_agent』,把上面改掉,我改成『firefox』就可以了,当然你可以可以改得更真实一点,例如哪些『Mozilla/5.0 AppleWebKit』之类的
  有些网站会依照UA来屏蔽恳求,可能是因为个别UA有恶意功击的特点,或者一些爬虫之类的开源爬虫框架,之前百度有一段时间屏蔽360浏览器就是通过360浏览器里一些特定的UA来做到的,当然后来360浏览器把UA给更改嗯,就须要依照其它特点屏蔽了。
  所以你这儿先改一下user_agent吧。
  
  aa
  多谢哈
  试着改成Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0 也不行呢
  试了这儿的也不行 恐怕还是curl的问题
  
  fanfank 文章作者
  我这儿执行都是正常的,结果也能下来。还是通过微博私信说吧,这里说得刷屏了
  
  aa
  围脖id是?
  
  fanfank 文章作者
  另外是,你贴的代码上面,标点符号不对啊,你的start_page对应那一行的标点,怎么是英文的单冒号?后面的单冒号似乎也不是个单冒号吧?要全部用英语的单冒号才行。
  
  aa
  符号是对的哈 都是英语的 没句型错误
  
  joke
  为什么匹配的内容都一样?
  代码:
  sel(‘//span[@id=”text110″]’, 0)->plaintext);
  if (!empty($strFirstH1)) {
  echo “”;
  echo $page->sel(‘//span[@id=”text110″]’, 0)->plaintext;
  echo “”;
  echo “\n”;
  }
  }
  }
  $crawler = new mycrawler();
  $arrJobs = array(
  ‘joke’ => array(
  ‘start_page’ => ‘#8217;,
  ‘link_rules’ => array(
  ‘#/\woke\wtml/\w+/20151021\d+\.htm$#’,
  ),
  ‘max_depth’ => 2,
  ) ,
  );
  $crawler->setFetchJobs($arrJobs)->run();
  
  fanfank 文章作者
  你的代码没贴全,而且匹配的内容都一样我没很理解是哪些意思,这个问题有点长,你直接在微博私信我,我帮你看一下
  
  fanfank 文章作者
  已经修补了。之前的问题是爬虫不认识站内链接,例如有的超链接是『/entry』这样的,而不是『』。现在最新的Phpfetcher早已就能辨识站内链接,可以试一下
  
  joke
  谢谢 ,搞定了
  
  modejun
  楼主您好,问问假如我晓得了一个网站开源爬虫框架,但是要递交post参数,这个要如何弄呢,朋友提供一下思路
  
  fanfank 文章作者
  提交post参数,那觉得场景很特殊的,因为这个就不是单纯地按照链接爬取网页内容了,而且假如真的提供这个功能,针对什么样的链接什么样的参数,怎么递交,然后返回的内容是如何处理这种,目前我觉得似乎不太适宜爬虫做。或者你在微博私信我,告诉我你的使用场景是哪些,我瞧瞧是不是考虑找时间加进去
  
  modejun
  场景就是有一翻页时用ajax post递交的page参数,如果是get就太easy。还有顺便问问,如果翻页我明天试了要解决的话就是调节深度,但是似乎最大是20,还有就是更改正则循环调用setFetchJobs这个方式,总是觉得不是这么完美,有哪些好的思路解决翻页这个问题吗,现在公司在定方案我想多了解把这个框架的优势发挥下来,感谢了。
  
  fanfank 文章作者
  如果像你说的是个post恳求,那么它返回的应当不是一个HTML格式的文档,通常都是json格式的,然后由当前页面将异步返回的内容加载显示下来。
  你们的post恳求应当是有类似pn,rn等参数,如果大家仅仅是想领到post恳求的所有内容,可以直接写一个for循环,然后使用php的curl来直接发送post恳求获取每一个页面内容,可以不使用爬虫,因为这个爬虫基本原理是针对GET恳求返回的HTML页面的,然后手动抽取HTML的标签
  最大深度可以更改类『Phpfetcher_Crawler_Default』中的『MAX_DEPTH』变量,把20改成-1就没有限制了,不过建议还是设一个上限比较好
  可以不需要循环更改正则呀,设置正则规则的可以是一个链表,把上面的所有你认为合适的正则都列上就可以,除非说你的正则表达式还得依据页面的某个参数或则内容不同而更改,那这个情况还是相对特殊了一点···
  翻页的解决,如果是GET就用爬虫,如果是POST,那么直接for循环之后调用curl会更好。
  
  ;;;
  好像不错
  
  ;;;
  能不能写个DOM选择器和技巧的文档,最好支持css选择DOM标签,有子节点,父节点,兄弟节点选择才好
  
  fanfank 文章作者
  在这个项目的github页面:,中文说明的第2节上面,有介绍dom选择器的文档
  
  jeremy
  博主。。为什么https的页面没办法恳求呢?

phpspider: 《我用爬虫三天时间“偷了”知乎一百万用户

采集交流优采云 发表了文章 • 0 个评论 • 424 次浏览 • 2020-05-20 08:01 • 来自相关话题

  《我用爬虫三天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言 》所使用的程序
  phpspider是一个爬虫开发框架。使用本框架爬虫技术用什么语言,你不用了解爬虫的底层技术实现,爬虫被网站屏蔽、有些网站需要登入或验证码识别才会爬取等问题。简单几行PHP代码,就可以创建自己的爬虫,利用框架封装的多进程Worker解释器,代码更简练,执行效率更高速率更快。
  demo目录下有一些特定网站的爬取规则,只要你安装了PHP环境,代码就可以在命令行下直接跑。 对爬虫感兴趣的开发者可以加QQ群一起讨论:147824717。
  下面以糗事百科为例, 来看一下我们的爬虫长哪些样子:
  $configs = array(
 'name' => '糗事百科',
 'domains' => array(
 'qiushibaike.com',
 'www.qiushibaike.com'
 ),
 'scan_urls' => array(
 'http://www.qiushibaike.com/'
 ),
 'content_url_regexes' => array(
 "http://www.qiushibaike.com/article/\d+"
 ),
 'list_url_regexes' => array(
 "http://www.qiushibaike.com/8hr/page/\d+\?s=\d+"
 ),
 'fields' => array(
 array(
 // 抽取内容页的文章内容
 'name' => "article_content",
 'selector' => "//*[@id='single-next-link']",
 'required' => true
 ),
 array(
 // 抽取内容页的文章作者
 'name' => "article_author",
 'selector' => "//div[contains(@class,'author')]//h2",
 'required' => true
 ),
 ),
);
$spider = new phpspider($configs);
$spider->start();
  爬虫的整体框架就是这样, 首先定义了一个$configs链表, 里面设置了待爬网站的一些信息, 然后通过调用$spider = new phpspider($configs);和$spider->start();来配置并启动爬虫.
  
  更多详尽内容爬虫技术用什么语言,移步到:
  开发文档 查看全部

  《我用爬虫三天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言 》所使用的程序
  phpspider是一个爬虫开发框架。使用本框架爬虫技术用什么语言,你不用了解爬虫的底层技术实现,爬虫被网站屏蔽、有些网站需要登入或验证码识别才会爬取等问题。简单几行PHP代码,就可以创建自己的爬虫,利用框架封装的多进程Worker解释器,代码更简练,执行效率更高速率更快。
  demo目录下有一些特定网站的爬取规则,只要你安装了PHP环境,代码就可以在命令行下直接跑。 对爬虫感兴趣的开发者可以加QQ群一起讨论:147824717。
  下面以糗事百科为例, 来看一下我们的爬虫长哪些样子:
  $configs = array(
 'name' => '糗事百科',
 'domains' => array(
 'qiushibaike.com',
 'www.qiushibaike.com'
 ),
 'scan_urls' => array(
 'http://www.qiushibaike.com/'
 ),
 'content_url_regexes' => array(
 "http://www.qiushibaike.com/article/\d+"
 ),
 'list_url_regexes' => array(
 "http://www.qiushibaike.com/8hr/page/\d+\?s=\d+"
 ),
 'fields' => array(
 array(
 // 抽取内容页的文章内容
 'name' => "article_content",
 'selector' => "//*[@id='single-next-link']",
 'required' => true
 ),
 array(
 // 抽取内容页的文章作者
 'name' => "article_author",
 'selector' => "//div[contains(@class,'author')]//h2",
 'required' => true
 ),
 ),
);
$spider = new phpspider($configs);
$spider->start();
  爬虫的整体框架就是这样, 首先定义了一个$configs链表, 里面设置了待爬网站的一些信息, 然后通过调用$spider = new phpspider($configs);和$spider->start();来配置并启动爬虫.
  
  更多详尽内容爬虫技术用什么语言,移步到:
  开发文档

官方客服QQ群

微信人工客服

QQ人工客服


线