IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> python爬虫:爬取url+入库mongodb 通用模板 -> 正文阅读

[大数据]python爬虫:爬取url+入库mongodb 通用模板

爬虫代码spider.py:

import requests
from lxml import etree

from save_mongodb import MongoClient


class Spider(object):
    def __init__(self):
        self.url = 'http://www.xxx.com/'
        self.mongo = MongoClient()
        self.name = 'xxx'
        self.headers = {}

    def spider_url(self): # 爬取url列表
        response = requests.get(url=self.url,headers=self.headers)
        html = etree.HTML(response.text)
        url_list = html.xpath('//a/@href')
        for i in range(len(url_list) - 1, -1, -1):
            if 'javascript' in url_list[i] or url_list[i] == '' or '@' in url_list[i] or '.jpg' in url_list[
                i] or '.png' in \
                    url_list[i]:
                url_list.pop(i)
            elif 'http' not in url_list[i]:
                url_list[i] = 'http:' + url_list[i]
        return url_list

    def save_url(self): # 保存url
        url_list = self.spider_url()
        for url in url_list:
            item = dict()
            item['url'] = url
            item['source'] = self.name
            self.mongo.add_document(item, self.name)
        print(self.name + '入库完毕,入库url个数:' + str(len(url_list)))


if __name__ == '__main__':
    sp = Spider()
    sp.save_url()

数据库应用代码save_mongodb.py:

import datetime

import pymongo

from config import MONGO_DB_HOST, MONGO_DB, password, username


class MongoClient(object):

    def __init__(self, mongo_uri=MONGO_DB_HOST, port=27017, mongo_db=MONGO_DB):
        # self.mongo_uri = 'mongodb://{}:{}@{}/admin?connectTimeoutMS=300&ssl=false&minPoolSize=2&maxPoolSize=10&readConcernLevel=majority&readPreference=secondary&authMechanism=SCRAM-SHA-1&localThresholdMS=30'.format(
        #     username, password, mongo_uri)
        self.mongo_uri = mongo_uri
        self.port = port
        self.mongo_db = mongo_db
        self.client = pymongo.MongoClient(self.mongo_uri, connect=True, unicode_decode_error_handler='ignore')
        self.db = self.client[self.mongo_db]

    def add_document(self, item, date):
        self.db[date].insert(item)

    def find_document(self, id, date):
        collist = self.db.list_collection_names()
        if date in collist:
            key = self.db[date].find_one({'id': id})
            return key
        else:
            return None

    def find_same_url(self, url, source):
        collist = self.db.list_collection_names()
        for col in collist:
            key = self.db[col].find_one({'url': url, 'source': source})
            if key is not None:
                return False
        return True

    def find_max_id(self, date):
        collist = self.db.list_collection_names()
        if date in collist:
            max_data = self.db[date].find().sort([('id', -1)]).next()
            max_id = max_data['id']
            return max_id
        else:
            return None

    def close_client(self):
        self.client.close()


if __name__ == '__main__':
    def getToday():
        """
        获取前一天的年月日
        :return: 昨天的日期
        """
        today = datetime.date.today()
        return today


    mc = MongoClient()
    mc.find_max_id(getToday().strftime('%Y-%m-%d'))
    mc.close_client()

配置文件config.py:

from urllib import parse

username = parse.quote_plus("xxx")
password = parse.quote_plus("xxx")

MONGO_DB_HOST = 'localhost'
MONGO_DB = 'benign_url'
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:46:53  更:2022-04-07 22:48:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:18:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码