创建项目后
1、实现登录
2、设置请求头和配置,这里使用自定义的配置,可以把经常用的东西放里面
自定义配置代码
import random,redis
from hashlib import md5
Interval = random.randint(0, 1) + random.random()
wechat_settings = {
'LOG_FILE': 'wechat_spider.log', ## 日志文件
'LOG_ENABLE' : True,
'LOG_ENCODING':'utf-8',
'LOG_LEVEL' : 'DEBUG', ## DEBUG,WARNING
#下载器从同一网站下载连续页面之前应等待的时间(以秒为单位)。这可以用来限制爬行速度,以避免过于严重地击中服务器。
'DOWNLOAD_DELAY':Interval, ## 下载延时
'DOWNLOAD_TIMEOUT':30, ## 超时限制
"DEFAULT_REQUEST_HEADERS": ## 请求头
{
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
'user_agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv2.0.1) Gecko/20100101 Firefox/4.0.1',
},
'MONGO_URI':'localhost',
'MONGO_DATABASE' : 'wechat',
'ITEM_PIPELINES':{
'wechat.pipelines.MongoPipeline':301,
}
}
DUPEFILTER_REDIS_KEY = 'wechat:dupefilter'
import hashlib
def get_md5(value):
a_md5 = hashlib.md5(value.encode('utf-8').hexdigest())
return a_md5
#返回为true,表示重复
def seen_value(value):
#链接数据库
server = redis.Redis()
#加入redis的集合,返回true表示已经有了加不进去
if server.sadd(DUPEFILTER_REDIS_KEY,value)==0:
return True
return False
3、获取信息:
判断返回的html内容是否存在,先md5加密唯一性,再判断之前的set中有没有,如果插入set成功就是有了
4、pipeline存入数据库:代码
import pymongo
class MongoPipeline(object):
def __init__(self, mongo_uri, mongo_db):
self.mongo_uri = mongo_uri
self.mongo_db = mongo_db
@classmethod
def from_crawler(cls, crawler):
return cls(
mongo_uri=crawler.settings.get('MONGO_URI'),
mongo_db=crawler.settings.get('MONGO_DATABASE','items')
)
def open_spider(self, spider):
self.client = pymongo.MongoClient(self.mongo_uri)
self.db = self.client[self.mongo_db]
def close_spider(self, spider):
self.client.close()
def process_item(self, item, spider):
print(item)
#再次判断有没有重复的url,如果有就更新,没有就插入
self.db['lentu'].update({'detail_url':item['detail_url']},{'$set':dict(item)},True)
return item
或者
import pymongo
class MycsdnPipeline(object):
def __init__(self):
self.client = pymongo.MongoClient('localhost')
self.db = self.client['myscnd']
def process_item(self, item, spider):
self.db['scnd'].insert(item)
return item