基于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下使用Txt2Html实现网页过滤代理的教程
Apr 11 Python
简述Python中的面向对象编程的概念
Apr 27 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
Jan 16 Python
Python实现判断并移除列表指定位置元素的方法
Apr 13 Python
python实现抖音视频批量下载
Jun 20 Python
python print输出延时,让其立刻输出的方法
Jan 07 Python
详解Python的数据库操作(pymysql)
Apr 04 Python
如何在django中添加日志功能
Feb 06 Python
Python networkx包的实现
Feb 14 Python
python+Selenium自动化测试——输入,点击操作
Mar 06 Python
python实现斗地主分牌洗牌
Jun 22 Python
Python中np.random.randint()参数详解及用法实例
Sep 23 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上传、管理照片示例
2006/10/09 PHP
跟我学Laravel之视图 & Response
2014/10/15 PHP
javascript下function声明一些小结
2007/12/28 Javascript
JavaScript中各种编码解码函数的区别和注意事项
2010/08/19 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
纯JS实现根据CSS的class选择DOM
2014/03/22 Javascript
javascript调试之DOM断点调试法使用技巧分享
2014/04/15 Javascript
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
2015/04/30 Javascript
原生js实现addclass,removeclass,toggleclasss实例
2016/11/24 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
js链表操作(实例讲解)
2017/08/29 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
浅谈Vue中render中的h箭头函数
2019/11/07 Javascript
使用Bootstrap做一个朝代历史表
2019/12/10 Javascript
[12:21]VICI vs TNC (BO3)
2018/06/07 DOTA
[56:56]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
Python文件及目录操作实例详解
2015/06/04 Python
Python中方法链的使用方法
2016/02/23 Python
儿童学习python的一些小技巧
2018/05/27 Python
python实现RabbitMQ的消息队列的示例代码
2018/11/08 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
2020/07/06 Python
观看《永远的雷锋》心得体会
2014/03/12 职场文书
内科护士节演讲稿
2014/09/11 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
贫困证明书范文
2015/06/16 职场文书
创业计划书之牛肉汤快餐店
2019/10/08 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python