基于scrapy实现的简单蜘蛛采集程序


Posted in Python onApril 17, 2015

本文实例讲述了基于scrapy实现的简单蜘蛛采集程序。分享给大家供大家参考。具体如下:

# Standard Python library imports
# 3rd party imports
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
# My imports
from poetry_analysis.items import PoetryAnalysisItem
HTML_FILE_NAME = r'.+\.html'
class PoetryParser(object):
  """
  Provides common parsing method for poems formatted this one specific way.
  """
  date_pattern = r'(\d{2} \w{3,9} \d{4})'
 
  def parse_poem(self, response):
    hxs = HtmlXPathSelector(response)
    item = PoetryAnalysisItem()
    # All poetry text is in pre tags
    text = hxs.select('//pre/text()').extract()
    item['text'] = ''.join(text)
    item['url'] = response.url
    # head/title contains title - a poem by author
    title_text = hxs.select('//head/title/text()').extract()[0]
    item['title'], item['author'] = title_text.split(' - ')
    item['author'] = item['author'].replace('a poem by', '')
    for key in ['title', 'author']:
      item[key] = item[key].strip()
    item['date'] = hxs.select("//p[@class='small']/text()").re(date_pattern)
    return item
class PoetrySpider(CrawlSpider, PoetryParser):
  name = 'example.com_poetry'
  allowed_domains = ['www.example.com']
  root_path = 'someuser/poetry/'
  start_urls = ['http://www.example.com/someuser/poetry/recent/',
         'http://www.example.com/someuser/poetry/less_recent/']
  rules = [Rule(SgmlLinkExtractor(allow=[start_urls[0] + HTML_FILE_NAME]),
                  callback='parse_poem'),
       Rule(SgmlLinkExtractor(allow=[start_urls[1] + HTML_FILE_NAME]),
                  callback='parse_poem')]

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python使用PIL缩放网络图片并保存的方法
Apr 24 Python
python开发之IDEL(Python GUI)的使用方法图文详解
Nov 12 Python
简述Python中的进程、线程、协程
Mar 18 Python
Python使用微信SDK实现的微信支付功能示例
Jun 30 Python
通过Python 获取Android设备信息的轻量级框架
Dec 18 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
Jan 24 Python
python3 实现对图片进行局部切割的方法
Dec 05 Python
django2.2安装错误最全的解决方案(小结)
Sep 24 Python
Python 内置函数globals()和locals()对比详解
Dec 23 Python
PyTorch实现重写/改写Dataset并载入Dataloader
Jul 14 Python
python 还原梯度下降算法实现一维线性回归
Oct 22 Python
Python Pandas模块实现数据的统计分析的方法
Jun 24 Python
在Python的Django框架中实现Hacker News的一些功能
Apr 17 #Python
由Python运算π的值深入Python中科学计算的实现
Apr 17 #Python
在Python中实现贪婪排名算法的教程
Apr 17 #Python
在Linux下调试Python代码的各种方法
Apr 17 #Python
Python脚本在Appium库上对移动应用实现自动化测试
Apr 17 #Python
Python中生成器和yield语句的用法详解
Apr 17 #Python
使用Python脚本在Linux下实现部分Bash Shell的教程
Apr 17 #Python
You might like
部署PHP时的4个配置修改说明
2015/10/19 PHP
Zend Studio使用技巧两则
2016/04/01 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
使用php自动备份数据库表的实现方法
2017/07/28 PHP
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
JQuery设置文本框和密码框得到焦点时的样式
2013/08/30 Javascript
jQuery结合ajax实现动态加载文本内容
2015/05/19 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
探究Python多进程编程下线程之间变量的共享问题
2015/05/05 Python
解析Python中的__getitem__专有方法
2016/06/27 Python
使用Django Form解决表单数据无法动态刷新的两种方法
2017/07/14 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
flask框架自定义url转换器操作详解
2020/01/25 Python
使用python实现多维数据降维操作
2020/02/24 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
python 检测图片是否有马赛克
2020/12/01 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
建筑施工实习自我鉴定
2013/09/19 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
村级四风对照检查材料
2014/08/24 职场文书
社区班子个人对照检查材料思想汇报
2014/10/07 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
python3 删除所有自定义变量的操作
2021/04/08 Python
python 判断文件或文件夹是否存在
2022/03/18 Python
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js