scrapy递归下载网站
# 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递归下载网站的更多相关文章
- wget递归下载网站资源
wget -r -p -np -k http://archive.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/ 在下载https ...
- wget 递归下载整个网站(网站扒皮必备)
有时间看到别人网站的页面比较漂亮,就想给扒皮下来,学习学习.分享一个我常用网站扒皮命令wget 这个命令可以以递归的方式下载整站,并可以将下载的页面中的链接转换为本地链接. wget加上参数之后,即可 ...
- wget 递归下载整个网站
wget -r -p -np -k http://xxx.com/xxx -r, --recursive(递归) specify recursive download.(指定递归下 ...
- centos5.5get 递归下载整个网站
这个命令可以以递归的方式下载整站,并可以将下载的页面中的链接转换为本地链接. wget加上参数之后,即可成为相当强大的下载工具. wget -r -p -np -k http://xxx.com/xx ...
- 一、scrapy的下载安装---Windows(安装软件太让我伤心了)
写博客就和笔记一样真的很有用,你可以随时的翻阅.爬虫的爬虫原理与数据抓取.非结构化与结构化数据提取.动态HTML处理和简单的图像识别已经学完,就差整理博客了 开始学习scrapy了,所以重新建了个分类 ...
- [No00006B]方便的网络下载工具wget 可下载网站目录下的所有文件(可下载整个网站)
wget是linux下命令行的下载工具,功能很强大,它能完成某些下载软件所不能做的,比如如果你想下载一个网页目录下的所有文件,如何做呢?网络用户有时候会遇到需要下载一批文件的情况,有时甚至需要把整个网 ...
- 批量下载网站图片的Python实用小工具(下)
引子 在 批量下载网站图片的Python实用小工具 一文中,讲解了开发一个Python小工具来实现网站图片的并发批量拉取.不过那个工具仅限于特定网站的特定规则,本文将基于其代码实现,开发一个更加通用的 ...
- Scrapy——5 下载中间件常用函数、scrapy怎么对接selenium、常用的Setting内置设置有哪些
Scrapy——5 下载中间件常用的函数 Scrapy怎样对接selenium 常用的setting内置设置 对接selenium实战 (Downloader Middleware)下载中间件常用函数 ...
- wget 批量下载网站目录下的文件
执行如下命令就会自动下载 http://www.iyunwei.com/docs/ 下面的所有文件: wget -nd -r -l1 --no-parent http://www.iyunwei.co ...
随机推荐
- python-openpyxl操作excel
python 读写 excel有很多选择,但是,方便操作的库不多,在我尝试了几个库之后,我觉得两个比较方便的库是xlrd/xlwt.openpyxl. 之所以推荐这两个库是因为这两个库分别操作的是不同 ...
- WCF入门一[WCF概述]
一.什么是WCF WCF是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架.它使得开发者能够建立一个跨平台的.安全.可信赖.事务性的解决方案,且能与已有系统兼容协作 ...
- ST表学习
啊谈不上学习了.复习一下原理留一下板子. $f\left[i,j \right]$表示以$i$为起点,区间长度为${2}^{j}$的区间最值.以最小值为例,即 $min\left(a\left [ k ...
- hihocoder #1394 : 网络流四·最小路径覆盖(最小路径覆盖)
#1394 : 网络流四·最小路径覆盖 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 国庆期间正是旅游和游玩的高峰期. 小Hi和小Ho的学习小组为了研究课题,决定趁此机 ...
- Column 'sort' specified twice错误
我使用的是mybatis框架出现的这个问题,如果你们也出现了这个问题的豪华,我想你们的sql代码一定是复制的吧,额哈哈哈
- windows系统如何查看某个端口被谁占用
1.开始---->运行---->cmd,或者是window+R组合键,调出命令窗口 2.输入命令:netstat -ano,列出所有端口的情况.在列表中我们观察被占用的端口,比如是135, ...
- copyEvens
public int[] copyEvens(int[] nums, int count) { int newIndex=0; int i=0; int newArray[] = new int[co ...
- JavaWeb项目中使用ajax上传文件
1.jsp $("#cxsc").click(function(){ var bankId = $("#bankId").val(); var formdata ...
- initialization of 'zf' is skipped by 'case' label原因及解决方法
原因:switch 的 case 中不能定义变量,不然就会报错.可能是变量的初始化会因为有时候case条件不被执行而跳过. 解决方法: 1:在case中用{}将代码括起来,这样在{}中就能定义变量了; ...
- 2 27re.py
""" 匹配目标 """ # import re # content = 'Hello 123 4567 World_This is a R ...