爬虫 微信公众登录和爬取,内容去重

创建项目后
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值