基于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中设置变量作为默认值时容易遇到的错误
Apr 03 Python
Python selenium文件上传方法汇总
Nov 19 Python
Python序列操作之进阶篇
Dec 08 Python
python hough变换检测直线的实现方法
Jul 12 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
Aug 18 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
Oct 04 Python
Python如何实现动态数组
Nov 02 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
Jan 19 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
Feb 17 Python
浅谈python输出列表元素的所有排列形式
Feb 26 Python
Python内置函数及功能简介汇总
Oct 13 Python
Python classmethod装饰器原理及用法解析
Oct 17 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.ini 中文版
2006/10/28 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
php实现网页缓存的工具类分享
2015/07/14 PHP
PHP实现对数组分页处理实例详解
2017/02/07 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
php array 转json及java 转换 json数据格式操作示例
2019/11/13 PHP
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
js或jquery实现页面打印可局部打印
2014/03/27 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
AngularJS入门教程之AngularJS指令
2016/04/18 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
2016/09/17 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
javascript实现文字无缝滚动效果
2017/08/26 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
详解JWT token心得与使用实例
2019/08/02 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
[17:36]VG战队纪录片
2014/08/21 DOTA
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
opencv python 2D直方图的示例代码
2018/07/20 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
如何更换python默认编辑器的背景色
2020/08/10 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
双立人美国官方商店:ZWILLING集团餐具和炊具
2020/05/07 全球购物
信息部岗位职责
2013/11/12 职场文书
门诊挂号室室长岗位职责
2013/11/27 职场文书
新浪微博实习心得体会
2014/01/27 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
晚会闭幕词
2015/01/28 职场文书
机械生产实习心得体会
2016/01/22 职场文书
python中redis包操作数据库的教程
2022/04/19 Python