copider 模仿scrapy的一些写法,当然我这个是单进程的,不是异步的

1.目录 copider/copider.py

#coding=utf-8

'''
Created on 2015年10月8日 @author: snt1
''' import urllib2
import lxml.html
import StringIO class Spider(object):
def __init__(self, url, meta=None):
self.URL = url
self.META = meta
self.TEXTMARK = self.get(url)
self.SEL = self.selector(doc=self.TEXTMARK) def get(self, url):
try:
req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36')
shtml = urllib2.urlopen(req, timeout=15).read()
except Exception, e:
print e,"...next.." data = StringIO.StringIO(shtml)
HTML = data.read()
return(HTML) # 返回html
@property
def html(self):
return self.TEXTMARK @property
def url(self):
return self.URL @property
def meta(self):
return self.META def selector(self, doc=None):
if doc:
HTML = doc
else:
HTML = self.HTML
return lxml.html.fromstring(HTML) def xpath(self, rule):
iter_list = self.SEL.xpath(rule)
attrList = []
try:
for ele in iter_list:
attrList.append(ele.attrib)
#attrList.append(ele.attrib)
return attrList
except Exception, e:
return iter_list def Request(url, func, **meta):
if meta:
response=Spider(url,meta['meta'])
else:
response=Spider(url)
func(response)

2.copider/aero.py

#coding=utf-8

'''
Created on 2015年10月8日 @author: snt1
''' import re
import time
from copider import Spider, Request class AeroCopider(object): name = "aero"
storeId = "554b14c97b010cc731e81b35" # 站点ID
allowed_domains = ["www.xxxx.com"] root_url = 'http://www.xxxx.com'
category_url = root_url + '/category/index.jsp?numResultsPerPage=100&categoryId=%s'
cap_category_url = root_url + '/family/index.jsp?categoryId=%s&page=%d&numResultsPerPage=100'
url_dicts = {'':'Girls', '':'Guys'} def __init__(self):
self.start_urls() def start_urls(self):
for fid in self.url_dicts.keys():
url = self.category_url %fid
response = Spider(url)
node_a = response.xpath('//*[@id="sidebar-left"]/div/dl[2]/dd//dt/a/@href')
node_text = response.xpath('//*[@id="sidebar-left"]/div/dl[2]/dd//dt/a/text()') url_list, cid_list = [],[]
for num, preparing in enumerate(node_a):
parttern = re.compile(r'family.jsp\?categoryId=')
if parttern.search(preparing):
chd_url = self.root_url+preparing
pattern_sub = re.compile('&cp=.*?$')
chd_url = pattern_sub.sub('', chd_url, re.S|re.I|re.M) pattern_fin = re.compile(r'family.jsp\?categoryId=(\d+)')
cid = pattern_fin.findall(chd_url)[0]
url_list.append(chd_url)
cid_list.append(cid)
print(u'产品分类链接:%s -> %s' %(node_text[num], chd_url))
cateid = cid_list[num]
Request(chd_url, self.parse_page, meta={'cateid':cateid})
print def parse_page(self, response):
#total_page = response.xpath('//div[@class="pagination"]/ul/li/a[@rel="nofollow"]/text()')
total_items = int(response.xpath('//*[@id="main-wrap"]//li[@class="count"]/span/text()')[0])
mod, rem = divmod(total_items, 100)
if mod > 1:
if rem > 0:
mod += 1
else:
mod = 1 total_page = mod
print(u'产品总分页数: %s -> %s' %(total_page,response.url)) cateid = response.meta['cateid']
for page in range(1, total_page+1):
url = self.cap_category_url %(cateid, page)
Request(url, self.parse_product) def parse_product(self, response):
product = response.xpath('//*[@id="products"]//h4/a/@href')
print(u'以下来自哪个页面:%s' %response.url)
print(u'产品:%s个 -> 路径:%s' %(len(product), product)) if __name__ == '__main__':
AeroCopider()

自己写一个爬虫 copider的更多相关文章

  1. 用Node+wechaty写一个爬虫脚本每天定时给女(男)朋友发微信暖心话

    wechatBot 微信每日说,每日自动发送微信消息给你心爱的人 项目介绍 灵感来源 在掘金看到了一篇<用Node + EJS写一个爬虫脚本每天定时女朋友发一封暖心邮件>后, 在评论区偶然 ...

  2. 用python写一个爬虫——爬取性感小姐姐

    忍着鼻血写代码 今天写一个简单的网上爬虫,爬取一个叫妹子图的网站里面所有妹子的图片. 然后试着先爬取了三页,大概有七百多张图片吧!各个诱人的很,有兴趣的同学可以一起来爬一下,大佬级程序员勿喷,简单爬虫 ...

  3. Python:Scrapy(二) 实例分析与总结、写一个爬虫的一般步骤

    学习自:Scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 - 知乎 Python Scrapy 爬虫框架实例(一) - Blue·Sky - 博客园 1.声明Item 爬虫爬取的目标是从非 ...

  4. 用Scrapy写一个爬虫

    昨天用python谢了一个简单爬虫,抓取页面图片: 但实际用到的爬虫需要处理很多复杂的环境,也需要更加的智能,重复发明轮子的事情不能干, 再说python向来以爬虫作为其擅长的一个领域,想必有许多成熟 ...

  5. 用 Python + itchat 写一个爬虫脚本每天定时给女朋友发微信暖心话

    https://github.com/sfyc23/EverydayWechat.git

  6. 爬虫入门 手写一个Java爬虫

    本文内容 涞源于  罗刚 老师的 书籍 << 自己动手写网络爬虫一书 >> ; 本文将介绍 1: 网络爬虫的是做什么的?  2: 手动写一个简单的网络爬虫; 1: 网络爬虫是做 ...

  7. 用node.js写一个简单爬虫,并将数据导出为 excel 文件

    引子 最近折腾node,最开始像无头苍蝇一样到处找资料,然而多数没什么卵用,都在瞎比比.在一阵瞎搞后,我来分享一下初步学习node的三个过程: 1 撸一遍NODE入门,对其有个基本的了解: 2 撸一遍 ...

  8. 用Python写一个小爬虫吧!

    学习了一段时间的web前端,感觉有点看不清前进的方向,于是就写了一个小爬虫,爬了51job上前端相关的岗位,看看招聘方对技术方面的需求,再有针对性的学习. 我在此之前接触过Python,也写过一些小脚 ...

  9. 用node.js从零开始去写一个简单的爬虫

    如果你不会Python语言,正好又是一个node.js小白,看完这篇文章之后,一定会觉得受益匪浅,感受到自己又新get到了一门技能,如何用node.js从零开始去写一个简单的爬虫,十分钟时间就能搞定, ...

随机推荐

  1. Java的动态代理(DynamicProxy)

    代理的概述 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 代理模式UML图 ...

  2. 前段集成解决方案grunt+yeoman初步认识

    1.什么是前段集成解决方案? 将前端研发领域中各种分散的技术元素集中在一起,并对常见的前端开发问题.不足.缺陷和需求,所提出的一种解决问题的方案 2.yeoman 应用的架构,模型!  相当于一个生成 ...

  3. 大家好 这个事我的BLOG 站点 欢迎大家 訪问和公布文章技术的 和评论 交流技术使用

    地址 http://microlmj.gotoip3.com/blog/article!showAllArticleForPageTest.action ssh+mysql+java+tomcat+b ...

  4. 推断client手机类型,并跳转到对应的app下载页面

    实现的原理,是检測浏览器的 USER-AGENT 这个header,然后依据正則表達式来确定client类型. 假设都不匹配,Fallback回退策略是显示相应的页面.让用户自己选择. 适合採用二维码 ...

  5. BC - Zball in Tina Town (质数 + 找规律)

    Zball in Tina Town  Accepts: 541  Submissions: 2463  Time Limit: 3000/1500 MS (Java/Others)  Memory ...

  6. oc67--NSString1

    // // main.m // NSString基本概念 // Foundation框架,苹果有80多个框架,Foundation有125个头文件. #import <Foundation/Fo ...

  7. Xshell配色方案啊【学习笔记】

    自己移植从putty版本移植到Xshell的配色方案,效果不错,看上去挺舒服. [myisayme] text(bold)=eaeaea magenta(bold)=ff55ff text=fffff ...

  8. Ip获取请求ip

    public class IPAdress { public static bool isIP(string str1) { || str1.Length > ) return false; s ...

  9. B2761 [JLOI2011]不重复数字 离散化

    就是一道离散化的裸题,但是在写的时候遇到了一些不可描述的问题,但是还是很顺利的. 题干: Description 给出N个数,要求把其中重复的去掉,只保留第一次出现的数. 例如,给出的数为1 ,其中2 ...

  10. istio-禁用/允许sidecar设置

    一.在namespace设置自动注入: 给 default 命名空间设置标签:istio-injection=enabled: $ kubectl label namespace default is ...