基于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 相关文章推荐
windows系统中python使用rar命令压缩多个文件夹示例
May 06 Python
python使用urllib2实现发送带cookie的请求
Apr 28 Python
python处理csv数据动态显示曲线实例代码
Jan 23 Python
安装python3的时候就是输入python3死活没有反应的解决方法
Jan 24 Python
浅谈Pandas 排序之后索引的问题
Jun 07 Python
Python 正则表达式匹配字符串中的http链接方法
Dec 25 Python
VSCode Python开发环境配置的详细步骤
Feb 22 Python
Python的几种主动结束程序方式
Nov 22 Python
Jupyter加载文件的实现方法
Apr 14 Python
python 匿名函数与三元运算学习笔记
Oct 23 Python
Python命令行参数定义及需要注意的地方
Nov 30 Python
Python字符串常规操作小结
Apr 03 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多层数组与对象的转换实例代码
2013/08/05 PHP
php使用百度翻译api示例分享
2014/01/31 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
2015/03/18 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
python进程与线程小结实例分析
2018/11/11 PHP
从sohu弄下来的flash中展示图片的代码
2007/04/27 Javascript
JS是否可以跨文件同时控制多个iframe页面的应用技巧
2007/12/16 Javascript
利用js对象弹出一个层
2008/03/26 Javascript
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
浅谈Sizzle的“编译原理”
2015/04/14 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
2016/10/09 Javascript
详解VUE项目中安装和使用vant组件
2019/04/28 Javascript
el-select数据过多懒加载的解决(loadmore)
2019/05/29 Javascript
JointJS JavaScript流程图绘制框架解析
2019/08/15 Javascript
Element InputNumber计数器的使用方法
2020/07/27 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
Python并行分布式框架Celery详解
2018/10/15 Python
python 两个数据库postgresql对比
2019/10/21 Python
Python3+Selenium+Chrome实现自动填写WPS表单
2020/02/12 Python
python中selenium库的基本使用详解
2020/07/31 Python
全方位了解CSS3的Regions扩展
2015/08/07 HTML / CSS
英国和爱尔兰的自炊式豪华度假小屋:Rural Retreats
2018/06/08 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
全球异乡人的跨境社交电商平台:Kouhigh口嗨网
2020/07/24 全球购物
个人校本研修方案
2014/05/26 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
JS异步堆栈追踪之为什么await胜过Promise
2021/04/28 Javascript
python热力图实现的完整实例
2022/06/25 Python