51Testing软件测试论坛

标题: Pyspider使用过程教程以及若干问题记录 [打印本页]

作者: 测试积点老人    时间: 2018-11-29 13:35
标题: Pyspider使用过程教程以及若干问题记录
本帖最后由 测试积点老人 于 2018-11-29 13:47 编辑

使用教程
[attach]119675[/attach]

[attach]119676[/attach]

[attach]119677[/attach]

[attach]119678[/attach]
[attach]119680[/attach]

[attach]119681[/attach]

4, pyspider中的操作界面截图 Case2
代码示例如下:
  1. #!/usr/bin/env python
  2. # -*- encoding: utf-8 -*-
  3. # Created on 2018-08-13 13:22:16
  4. # Project: repospider

  5. from pyspider.libs.base_handler import *


  6. class Handler(BaseHandler):
  7.     crawl_config = {
  8.     }

  9.     @every(minutes=24 * 60)
  10.     def on_start(self):
  11.         self.crawl('http://www.reeoo.com', callback=self.index_page)

  12.     @config(age=10 * 24 * 60 * 60)
  13.     def index_page(self, response):
  14.         for each in response.doc('div[class="thumb"]').items():

  15.             detail_url = each('a').attr('href')
  16.             print(detail_url)
  17.             self.crawl(detail_url, callback=self.detail_page)

  18.     @config(priority=2)
  19.     def detail_page(self, response):
  20.         header = response.doc('body > article > section > header')
  21.         title = header('h1').text()

  22.         tags = []
  23.         for each in header.items('a'):
  24.             tags.append(each.text())

  25.         content = response.doc('div[id="post_content"]')
  26.         description = content('blockquote > p').text()

  27.         website_url = content('a').attr.href

  28.         image_url_list = []
  29.         for each in content.items('img[data-src]'):
  30.            image_url_list.append(each.attr('data-src'))

  31.         return {
  32.             "title": title,
  33.             "tags": tags,
  34.             "description": description,
  35.             "image_url_list": image_url_list,
  36.             "website_url": website_url
复制代码

问题记录1.
问题1
问题的错误信息:
  1. Exception: HTTP 599: Unable to communicate securely with peer: requested domain name does not match the server's certificate.
复制代码

解决的办法:

将代码中的基于https开头的地址,切换为http即可。实际的url地址还是https。

办法2: 设置crawl的参数 validate_cert=False

使用Pyspider过程中的nginx代理
将Nginx的端口直接映射到web服务的端口:
  1. vim /etc/nginx/nginx/conf
复制代码

文件的内容修改如下:
“`
server {
listen 8080;
server_name localhost;
root /usr/share/nginx/html;
  1.   location  / {
  2.          proxy_pass http://127.0.0.1:5000;
  3.      }

  4.     error_page 404 /404.html;
  5.         location = /40x.html {
  6.     }

  7.     error_page 500 502 503 504 /50x.html;
  8.         location = /50x.html {
  9.     }
  10. }
复制代码

“ 将nginx代理的主机8080映射为内部的5000端口。
pyspider中的操作界面截图 Case1
  1. #!/usr/bin/env python
  2. # -*- encoding: utf-8 -*-
  3. # Created on 2018-08-13 14:05:23
  4. # Project: test

  5. from pyspider.libs.base_handler import *


  6. class Handler(BaseHandler):
  7.     crawl_config = {
  8.     }

  9.     @every(minutes=24 * 60)
  10.     def on_start(self):
  11.         self.crawl('http://reeoo.com/', callback=self.index_page)

  12.     @config(age=10 * 24 * 60 * 60)
  13.     def index_page(self, response):
  14.         for each in response.doc('a[href^="http"]').items():
  15.             self.crawl(each.attr.href, callback=self.detail_page)

  16.     @config(priority=2)
  17.     def detail_page(self, response):
  18.         return {
  19.             "url": response.url,
  20.             "title": response.doc('title').text(),
  21.         }
复制代码








欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2