Python 采集某网站的壁纸

简介: Python 采集某网站的壁纸

一、运行环境

pycharm 2020 社区版

python 3.7

beautifulsoup4 4.11.1

二、实际代码

import os
import re
import requests
from bs4 import BeautifulSoup
from access.sprider.SpriderAccess import SpriderAccess
from base.BaseConfig import BaseConfig
from base.BaseFrame import BaseFrame
from object.entity.SpriderEntity import SpriderEntity
from plugin.Tools import Tools
class Netbian:
    page_count = 1  # 每个栏目开始业务
    base_url = "http://pic.netbian.com"  # 采集的网址 http://pic.netbian.com/e/search/result/?searchid=2543
    save_path = BaseConfig().CORPUS_ROOT + os.sep + "Netbian"  # "/Users/zhangyu/Pictures/Wallpaper/"
    second_url = ("4kmeinv","4kfengjing",  "4kbeijing", "4kyouxi")
    def __init__(self):
        pass
    def sprider_wall_paper(self):
        BaseFrame.__log__("开始采集首页彼岸图网网站的图片...")
        for column in self.second_url:
            url = self.base_url + "/" + column + "/"
            response = requests.get(url)
            response.encoding = 'gbk'
            soup = BeautifulSoup(response.text, "html5lib")
            try:
                page_end_url = soup.find('span', attrs={"class": 'slh'}).find_next_siblings()
                page_end_num = page_end_url[0].text
                while self.page_count <= int(page_end_num):  # 翻完停止
                    if self.page_count == 1:  # 栏目的第一个地址
                        list_url = soup.find_all('a', attrs={"target": '_blank'})
                        regx = "tupian/\d{1,5}\.html"
                        images_url = re.findall(regx, str(list_url))
                        for iurl in images_url:
                            image_full_url = self.base_url + "/" + iurl
                            response = requests.get(image_full_url)
                            response.encoding = 'gbk'
                            soup = BeautifulSoup(response.text, "html5lib")
                            for image_obj in soup.find('a', attrs={"id": 'img'}).children:
                                pic_url = self.base_url + image_obj.get("src")
                                pic_title = image_obj.get("alt")
                                BaseFrame.__log__("采集" + pic_title + "的图片..." + url)
                                mmEntity = SpriderEntity()  # 依据图片执行,下载过的图片不再下载
                                mmEntity.sprider_base_url = self.base_url
                                mmEntity.create_datetime = Tools.get_current_datetime()
                                mmEntity.sprider_url = url
                                mmEntity.sprider_pic_title = pic_title
                                mmEntity.sprider_pic_index = str(self.page_count)
                                if SpriderAccess().query_sprider_entity_by_urlandtitle(pic_url, pic_title) is None:
                                    SpriderAccess().save_sprider(mmEntity)
                                    self.down_pic(pic_url, pic_title, column)
                                else:
                                    BaseFrame.__log__("下载过已经跳过。")
                    else:
                        next_pager_url = self.base_url + "/" + column + "/index_" + str(self.page_count) + ".html"
                        try:
                            response = requests.get(next_pager_url)
                            response.encoding = 'gbk'
                            soup = BeautifulSoup(response.text, "html5lib")
                            list_url = soup.find_all('a', attrs={"target": '_blank'})
                            regx = "tupian/\d{1,5}\.html"
                            images_url = re.findall(regx, str(list_url))
                            for iurl in images_url:
                                image_full_url = self.base_url + "/" + iurl
                                response = requests.get(image_full_url)
                                response.encoding = 'gbk'
                                soup = BeautifulSoup(response.text, "html5lib")
                                for image_obj in soup.find('a', attrs={"id": 'img'}).children:
                                    pic_url = self.base_url + image_obj.get("src")
                                    pic_title = image_obj.get("alt")
                                    BaseFrame.__log__("采集" + pic_title + "的图片..." + url)
                                    mmEntity = SpriderEntity()  # 依据图片执行,下载过的图片不再下载
                                    mmEntity.sprider_base_url = self.base_url
                                    mmEntity.create_datetime = Tools.get_current_datetime()
                                    mmEntity.sprider_url = url
                                    mmEntity.sprider_pic_title = pic_title
                                    mmEntity.sprider_pic_index = str(self.page_count)
                                    if SpriderAccess().query_sprider_entity_by_urlandtitle(pic_url, pic_title) is None:
                                        SpriderAccess().save_sprider(mmEntity)
                                        self.down_pic(pic_url, pic_title, column)
                                    else:
                                        BaseFrame.__log__("下载过已经跳过。")
                        except Exception as e:
                            BaseFrame.__log__("请求站点过程发生错误..." + e)
                            continue
                        pass
                    self.page_count = self.page_count + 1  # 翻页要不一致第一页
            except Exception as e:
                BaseFrame.__err__(str(e))
                continue
        pass
    # region 下载图片
    def down_pic(self, pic_url, pic_title, second_path):
        try:
            headers = {"Referer": pic_url,
                       'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 '
                                     '(KHTML, like Gecko)Chrome/62.0.3202.94 Safari/537.36'}
            content = requests.get(pic_url, headers=headers)
            real_path = self.save_path + os.sep + second_path + os.sep
            if (os.path.exists(real_path) is False):
                os.makedirs(real_path)
            if content.status_code == 200:
                pic_cun = real_path + pic_title + '.jpg'
                fp = open(pic_cun, 'wb')
                fp.write(content.content)
                fp.close()
        except Exception as e:
            BaseFrame.__err__("下载图片出现错误" + str(e))
        pass
    # endregion
if __name__ == '__main__':
    Netbian().sprider_wall_paper()
pass
目录
相关文章
|
4月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
4月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
7月前
|
JSON API 数据格式
Python采集京东商品评论API接口示例,json数据返回
下面是一个使用Python采集京东商品评论的完整示例,包括API请求、JSON数据解析
|
4月前
|
存储 数据采集 监控
Python定时爬取新闻网站头条:从零到一的自动化实践
在信息爆炸时代,本文教你用Python定时爬取腾讯新闻头条,实现自动化监控。涵盖请求、解析、存储、去重、代理及异常通知,助你构建高效新闻采集系统,适用于金融、电商、媒体等场景。(238字)
629 2
|
5月前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南
|
6月前
|
SQL 前端开发 JavaScript
基于python+django开发的在线求职招聘网站-网上招聘管理系统
该系统是基于python+django的求职招聘网站、网上招聘管理系统、网上人才招聘系统、毕业生求职招聘系统、大学生求职招聘系统、校园招聘系统、企业招聘系统。系统适合场景:大学生、课程作业、毕业设计。这是一个前后端分离的项目,需要同学们学习django技术和vue技术。
473 3
|
6月前
|
API Python
Python采集淘宝店铺所有商品API接口指南
淘宝没有公开的官方API供采集店铺商品数据,但可以通过以下几种方法获取商品信息。需要注意的是,淘宝有严格的反爬机制,直接采集可能违反其服务条款。
|
7月前
|
数据采集 XML 数据处理
淘宝商家采集工具,淘宝买家联系方式采集,淘宝卖家旺旺采集软件【python】
以上代码实现了一个基础的淘宝数据采集框架,包含爬虫核心、数据处理和代理管理三个模块。
|
8月前
|
数据采集 数据可视化 JavaScript
用Python采集CBC新闻:如何借助海外代理IP构建稳定采集方案
本文介绍了如何利用Python技术栈结合海外代理IP采集加拿大CBC新闻数据。内容涵盖使用海外代理IP的必要性、青果代理IP的优势、实战爬取流程、数据清洗与可视化分析方法,以及高效构建大规模新闻采集方案的建议。适用于需要获取国际政治经济动态信息的商业决策、市场预测及学术研究场景。
|
9月前
|
数据采集 自然语言处理 Java
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战
本文以反面教材形式,剖析了在使用 Playwright 爬取懂车帝车友圈问答数据时常见的配置错误(如未设置代理、Cookie 和 User-Agent),并提供了 Python、Java 和 .NET 三种语言的修复代码示例。通过错误示例 → 问题剖析 → 修复过程 → 总结教训的完整流程,帮助读者掌握如何正确配置爬虫代理及其它必要参数,避免 IP 封禁和反爬检测,实现高效数据采集与分析。
586 3
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战

推荐镜像

更多