# encoding: utf-8
import os
import re
import subprocess
import sys

import chardet
import scrapy
from scrapy.http import Request
from scrapy.selector import HtmlXPathSelector
from scrapy.spider import BaseSpider
from scrapy.utils.url import urljoin_rfc

from mychardet import *

# print sys.getdefaultencoding()

# print sys.path

def get_default_to_codec():
    return mytogb18030

def getfirst(a):
#     print 'enter getfirst', repr(a)
    if a == None:
        return u''
    elif len(a) == 0:
        return u''
    b = a[0]
#     print repr(b)#, chardet.detect(b)
    return b

class Greasemonkey1Spider(scrapy.Spider):
    name = "test"
    allowed_domains = ["localhost"]
    start_urls = (
        'http://localhost/test',
    )

    def parseContext(self, response):
#         print "Enter parseContext: ", response.url
        hxs = response
        sel = hxs.xpath('//title/text()')
        if sel != None:
            titles = sel.extract()
            if len(titles) > 0: title = titles[0]
            else: title = ''

        sel = hxs.xpath('/html/body')
        if sel != None:
            bodys = sel.extract()
            if len(bodys) > 0: body = bodys[0]
            else: body = ''
#         print title, repr(body)

    def parse(self, response):
        baseurl = response.url
        print 'baseurl  = ',  baseurl
        self.parseContext(response)

        hxs  = response.xpath(r'//a')
        for path in hxs:
            titles = getfirst(path.xpath(r'text()').extract())
            urls = getfirst(path.xpath(r'@href').extract())
#             print titles, urls
            item_url = urljoin_rfc(baseurl, urls)
            yield Request(item_url,callback=self.parse)

if __name__ == '__main__':
    cmd = '''E:\Python27\Scripts\scrapy.exe crawl --nolog test'''
    cwd = os.path.split(__file__)[0]
    p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False, cwd=cwd)
    while None == p.poll():
        out, err = p.communicate()
#         print 'out, err', out, err, repr(out), repr(err)
        if err:
            print err
        elif out:
            print out

    print p.returncode

#     while not p.poll():
#         print p.stdout.read()
#         print p.stderr.read()

scrapy递归下载网站的更多相关文章

  1. wget递归下载网站资源

    wget -r -p -np -k http://archive.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/ 在下载https ...

  2. wget 递归下载整个网站(网站扒皮必备)

    有时间看到别人网站的页面比较漂亮,就想给扒皮下来,学习学习.分享一个我常用网站扒皮命令wget 这个命令可以以递归的方式下载整站,并可以将下载的页面中的链接转换为本地链接. wget加上参数之后,即可 ...

  3. wget 递归下载整个网站

    wget -r -p -np -k http://xxx.com/xxx -r,  --recursive(递归)          specify recursive download.(指定递归下 ...

  4. centos5.5get 递归下载整个网站

    这个命令可以以递归的方式下载整站,并可以将下载的页面中的链接转换为本地链接. wget加上参数之后,即可成为相当强大的下载工具. wget -r -p -np -k http://xxx.com/xx ...

  5. 一、scrapy的下载安装---Windows(安装软件太让我伤心了)

    写博客就和笔记一样真的很有用,你可以随时的翻阅.爬虫的爬虫原理与数据抓取.非结构化与结构化数据提取.动态HTML处理和简单的图像识别已经学完,就差整理博客了 开始学习scrapy了,所以重新建了个分类 ...

  6. [No00006B]方便的网络下载工具wget 可下载网站目录下的所有文件(可下载整个网站)

    wget是linux下命令行的下载工具,功能很强大,它能完成某些下载软件所不能做的,比如如果你想下载一个网页目录下的所有文件,如何做呢?网络用户有时候会遇到需要下载一批文件的情况,有时甚至需要把整个网 ...

  7. 批量下载网站图片的Python实用小工具(下)

    引子 在 批量下载网站图片的Python实用小工具 一文中,讲解了开发一个Python小工具来实现网站图片的并发批量拉取.不过那个工具仅限于特定网站的特定规则,本文将基于其代码实现,开发一个更加通用的 ...

  8. Scrapy——5 下载中间件常用函数、scrapy怎么对接selenium、常用的Setting内置设置有哪些

    Scrapy——5 下载中间件常用的函数 Scrapy怎样对接selenium 常用的setting内置设置 对接selenium实战 (Downloader Middleware)下载中间件常用函数 ...

  9. wget 批量下载网站目录下的文件

    执行如下命令就会自动下载 http://www.iyunwei.com/docs/ 下面的所有文件: wget -nd -r -l1 --no-parent http://www.iyunwei.co ...

随机推荐

  1. python-openpyxl操作excel

    python 读写 excel有很多选择,但是,方便操作的库不多,在我尝试了几个库之后,我觉得两个比较方便的库是xlrd/xlwt.openpyxl. 之所以推荐这两个库是因为这两个库分别操作的是不同 ...

  2. WCF入门一[WCF概述]

    一.什么是WCF WCF是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架.它使得开发者能够建立一个跨平台的.安全.可信赖.事务性的解决方案,且能与已有系统兼容协作 ...

  3. ST表学习

    啊谈不上学习了.复习一下原理留一下板子. $f\left[i,j \right]$表示以$i$为起点,区间长度为${2}^{j}$的区间最值.以最小值为例,即 $min\left(a\left [ k ...

  4. hihocoder #1394 : 网络流四·最小路径覆盖(最小路径覆盖)

    #1394 : 网络流四·最小路径覆盖 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 国庆期间正是旅游和游玩的高峰期. 小Hi和小Ho的学习小组为了研究课题,决定趁此机 ...

  5. Column 'sort' specified twice错误

    我使用的是mybatis框架出现的这个问题,如果你们也出现了这个问题的豪华,我想你们的sql代码一定是复制的吧,额哈哈哈

  6. windows系统如何查看某个端口被谁占用

    1.开始---->运行---->cmd,或者是window+R组合键,调出命令窗口 2.输入命令:netstat -ano,列出所有端口的情况.在列表中我们观察被占用的端口,比如是135, ...

  7. copyEvens

    public int[] copyEvens(int[] nums, int count) { int newIndex=0; int i=0; int newArray[] = new int[co ...

  8. JavaWeb项目中使用ajax上传文件

    1.jsp $("#cxsc").click(function(){ var bankId = $("#bankId").val(); var formdata ...

  9. initialization of 'zf' is skipped by 'case' label原因及解决方法

    原因:switch 的 case 中不能定义变量,不然就会报错.可能是变量的初始化会因为有时候case条件不被执行而跳过. 解决方法: 1:在case中用{}将代码括起来,这样在{}中就能定义变量了; ...

  10. 2 27re.py

    """ 匹配目标 """ # import re # content = 'Hello 123 4567 World_This is a R ...