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. 学习——Git及VersionControl

    一.Git基本介绍 1.Git是什么? Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.用以有效.高速的处理从很小到非常大的项目版本管理.Git 是 Linus To ...

  2. Eclipse代码/目录虚线对齐设置

    前提: 我的Eclipse版本如下: 比这个版本新或者旧都可以实现如下效果. 实现步骤: 在代码上显示虚线设置有如下方法: 1.如果不使用插件,Eclipse是不支持虚线的,只能是横条的点状,效果如下 ...

  3. SQL Server 性能优化实战系列(文章索引) : 桦仔

    http://www.cnblogs.com/gaizai/archive/2012/01/20/2327814.html

  4. Java中基于HTTP协议网络编程

    java中为我们的网络支持提供了java.net包,能够使我们以编程的方式来訪问Web服务功能,这篇博客,就跟大家分享一下.Java中的网络编程的知识.主要是学习下该java.net包下的API. U ...

  5. UML中类图的四种关系及其代码实现

    在uml图中 最复杂的也就是泛化,实现.依赖,关联.这四种关系了,假设弄清了这几种关系那么在理解UML图的时候就会变得轻车熟路了! 假设你对着几种关系一点都不熟悉的话能够看一下uml中的四种关系.这篇 ...

  6. android 使用post 提交

    1.使用post 方式提交时不要把须要传递的參数写在URL 中,一定要使用 BasicNameValuePair 这个类来完毕 创建我想发送一个类似Get 方式的一个URL ---------- ht ...

  7. ​网页图表Highcharts实践教程之标签组与加载动画

    ​网页图表Highcharts实践教程之标签组与加载动画 Highcharts标签组 在图表的大部分元素都提供了标签功能.但非常多时候,我们须要额外说明一些信息.这个时候借助原有的图表元素的标签功能就 ...

  8. 第一章--linux基础

    (一):linux系统根文件夹结构 Unix-like系统中的"文件系统"的概念包含两个意思,第一个是"根文件系统",第二个是"存储类文件系统&quo ...

  9. 一看就懂系列之 由浅入深聊一聊php的垃圾回收机制

    前言 是的,平时经常听到大牛说到的gc,就是垃圾回收器,全称Garbage Collection. 早期版本,准确地说是5.3之前(不包括5.3)的垃圾回收机制,是没有专门的垃圾回收器的.只是简单的判 ...

  10. hdu 1248 寒冰王座(暴力)

    寒冰王座 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...