#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2018-09-10 20:19:29
# Project: reo
from pyspider.libs.base_handler import *
class Handler(BaseHandler):
crawl_config = {
}
# on_start(self) 程序的入口,当点击左侧绿色区域右上角的 run 按钮时首先会调用这个函数
@every(minutes=24 * 60)
def on_start(self):
# 用于创建一个爬取任务,url 为目标地址,callback 为抓取到数据后的回调函数
self.crawl('www.reeoo.com', callback=self.index_page, validate_cert=False)
# 参数为 Response 对象
# response.doc 为 pyquery 对象,pyquery和jQuery类似,,主要用来方便地抓取返回的html文档中对应标签的数据
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
# for each in response.doc('a[href^="http"]').items():
# self.crawl(each.attr.href, callback=self.detail_page, validate_cert=False)
for each in response.doc('div[class="thumb"]').items():
detail_url = each('a').attr.href
print(detail_url)
self.crawl(detail_url, callback=self.detail_page, validate_cert=False)
@config(priority=2)
# 返回一个 dict 对象作为结果,结果会自动保存到默认的 resultdb 中,也可以通过重载方法把结果数据存储到指定的数据库,
def detail_page(self, response):
header = response.doc('body > article > section > header')
title = header('h1').text()
tags = []
for each in header.items('a'):
tags.append(each.text())
content = response.doc('div[id="post_content"]')
description = content('blockquote > p').text()
website_url = content('a').attr.href
image_url_list = []
for each in content.items('img[data-src]'):
image_url_list.append(each.attr('data-src'))
return {
"title": title,
"tags": tags,
"description": description,
"image_url_list": image_url_list,
"website_url": website_url,
}
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2018-09-10 20:19:29
# Project: reo
from pyspider.libs.base_handler import *
import urllib
class Handler(BaseHandler):
crawl_config = {
}
# on_start(self) 程序的入口,当点击左侧绿色区域右上角的 run 按钮时首先会调用这个函数
@every(minutes=24 * 60)
def on_start(self):
# 用于创建一个爬取任务,url 为目标地址,callback 为抓取到数据后的回调函数
self.crawl('http://www.mzitu.com/150114', callback=self.index_page, validate_cert=False)
# 参数为 Response 对象
# response.doc 为 pyquery 对象,pyquery和jQuery类似,,主要用来方便地抓取返回的html文档中对应标签的数据
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
# for each in response.doc('a[href^="http"]').items():
# self.crawl(each.attr.href, callback=self.detail_page, validate_cert=False)
for each in response.doc('.main-image img').items():
detail_url = each('img').attr.src
print(detail_url)
# 网络上图片的地址
#img_src =detail_url
# 将远程数据下载到本地,第二个参数就是要保存到本地的文件名
#urllib.request.urlretrieve(img_src,'D:\\1.jpg')
for each in response.doc('.pagenavi > a:last-child').items():
# 根据拿到的下一页url继续调用detail_page函数,获取下一页的图片和下一页中的下一页
self.crawl(each.attr.href, callback=self.index_page, validate_cert=False)
#self.crawl(detail_url, callback=self.detail_page, validate_cert=False)
@config(priority=2)
# 返回一个 dict 对象作为结果,结果会自动保存到默认的 resultdb 中,也可以通过重载方法把结果数据存储到指定的数据库,
def detail_page(self, response):
return {
"title": "title",
}
# #header = response.doc('body > article > section > header')
# #
# # title = header('h1').text()
# #
# # tags = []
# # for each in header.items('a'):
# # tags.append(each.text())
# #
# # content = response.doc('div[id="post_content"]')
# # description = content('blockquote > p').text()
# #
# # website_url = content('a').attr.href
# #
# # image_url_list = []
# # for each in content.items('img[data-src]'):
# # image_url_list.append(each.attr('data-src'))
# #
# return {
# "title": title,
# "tags": tags,
# "description": description,
# "image_url_list": image_url_list,
# "website_url": website_url,
# }
# !/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2018-09-13 21:28:59
# Project: test003
from pyspider.libs.base_handler import *
import urllib.request
import time
class Handler(BaseHandler):
crawl_config = {
}
@every(minutes=24 * 60)
def on_start(self):
self.crawl(
'https://www.163.com/',
fetch_type='js', callback=self.index_page, validate_cert=False,js_viewport_height=12000)
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
count = 0;
for each in response.doc('img').items():
detail_url = each('img').attr.src
print(detail_url)
work_path = 'E:\\phantomjsTest\\temp\\' + str(count) + '.jpg'
count = count + 1
if detail_url:
urllib.request.urlretrieve(detail_url, work_path)
else:
print('is none')
# urllib.request.urlretrieve(detail_url, work_path)
@config(priority=2)
def detail_page(self, response):
return {
"url": response.url,
"title": response.doc('title').text(),
}
分享到:
相关推荐
- 命令行启动示例: ```bash pyspider start ``` - **常用操作**: - 创建新的爬虫项目。 - 编辑爬虫脚本。 - 在Web UI中查看爬取结果。 #### 三、PySpider的高级用法 ##### 3.1 self.crawl - **定义**: `...
示例代码更改如下: ```python # 原始代码 async def my_function(): result = await some_async_operation() # 修改后的代码 def my_function(): result = shark.some_async_operation() ``` **注意事项**: ...
8. `examples`: 示例代码,帮助初学者快速上手。 三、pyspider核心概念 1. **Task**: 任务是爬虫的基本单位,定义了要抓取的URL和处理逻辑。 2. **Fetcher**: 负责发送HTTP请求,获取网页内容,支持GET、POST等方法...
- 示例代码:https://github.com/binux/pyspider/tree/master/examples - 论坛与社区:https://github.com/binux/pyspider/issues 通过深入学习和实践pyspider-v0.3.10,开发者可以快速掌握Python爬虫技术,构建...
5. **代码示例**: 以下是一个简单的pyspider爬虫脚本片段,用于获取知乎首页的热门问题: ```python def on_start(self): self.crawl('https://www.zhihu.com/', callback=self.index_page) def index_page...
**三、Pyspider实战示例** 1. **创建新项目**:在Web UI中新建项目,编写`__init__.py`脚本,如: ```python def on_start(): self.crawl('http://example.com', callback=self.parse) def parse(self, ...
最后,文档中还提到了一些在请求头中常见的字段,如Host和Cookie,但是在提供的示例代码中并没有包含这些字段。在实际应用中,可以根据需要添加或修改这些字段,以更好地模拟浏览器的请求行为。例如,可以随机生成...
丰富的文档和示例代码也帮助新用户快速上手。 总的来说,PySpider是一款优秀的Python爬虫工具,它的强大功能和易用性使其在开源软件领域占有一席之地。无论是个人学习还是企业级应用,PySpider都能成为开发者得力的...
此外,对于复杂和大规模的爬虫项目,我们可能需要使用到分布式爬虫,例如使用Scrapy-Cluster或PySpider,它们能将任务分散到多台机器上,提高爬取速度和应对高并发的能力。 总的来说,“Python爬虫-使用Python开发...
from pyspider.libs.base_handler import * class Handler(BaseHandler): crawl_config = { } @every(minutes=24 * 60) def on_start(self): self.crawl('http://scrapy.org/', callback=self.index_page) ...
这条命令将会从清华大学提供的镜像中下载并安装`pyspider`这个库。 #### 永久更改默认镜像源 如果希望所有通过`pip`安装的软件包都能自动使用国内镜像源,可以通过编辑`pip`的配置文件来实现永久修改。 - **Linux...
- **简介**:pyspider 是一个功能齐全的分布式爬虫系统。它支持JavaScript渲染页面,适合爬取复杂的网站。 - **安装命令**:`pip install pyspider` #### 14. cola - **简介**:cola 在给定的信息中并未明确指出是...
在“spider-flow”这个文件名中,我们可以推测这可能是一个关于爬虫流程的实现或者设计,可能包含了如何构建和管理爬虫流程的示例或教程。它可能涵盖了如何定义任务、设置爬取规则、处理数据、以及如何通过图形化...
**注意**:上述示例中的命令并不恰当,因为它试图安装 `pyspider` 这个包,而实际上只需要更换镜像源即可。正确的做法是直接更换镜像源,而不是结合某个特定的安装命令。 ##### 2.2 永久更改 pip 配置文件 为了...
数据结构和算法是 Python 开发的基础,下面通过具体的代码示例回顾了几个经典算法: - **排序算法**:冒泡排序和归并排序 - 冒泡排序是一种简单的排序方法,通过重复地遍历待排序的数列,一次比较两个元素,如果...