首页 文章 精选 留言 我的

精选列表

搜索[镜像无法拉取],共10000篇文章
优秀的个人博客,低调大师

手把手教你爬天堂网1920*1080大图片(批量下载)——理论篇

/1 前言/ 平时我们要下载图片,要要一个一个点击下载是不是觉得很麻烦?那有没有更加简便的方法呢?答案是肯定的,这里我们以天堂网为例,批量下载天堂网的图片。 /2 项目准备工作/ 首先 我们第一步我们要安装一个pycham的软件。可以参考这篇文章:Python环境搭建—安利Python小白的Python和Pycharm安装详细教程。 天堂网的网址: https://www.ivsky.com/bizhi/1920x1080/ 我们需要下载几个库,怎么下载呢?打开pycharm,依次点击File,再点开Settings,如下图所示。 打开后会出现这个界面点击你的项目名字(project:(你的项目名字)),之后在project interpreter下,点击加号,而后下载我们需要的库,如下图所示。 本项目需要用到的是库是requests、lxml、fake_useragent,如下图所示。fake_useragent一般是没有的,需要通过下面的命令进行安装: pip install fake_useragent /3 项目实现/ 1. 导入需要的库(requests,lxml, fake_useragent)。 2. 我用了封装方法去实现各个部分的功能。首先要写一个框架:构造一个类TianTangWebsite ,然后定义一个__init__方法里继承(self),再定义一个主方法(main)。最后实现这个main方法,依次一步一步进行实现。 3. 我们把天堂网的网址拿过来,构造请求头。这里说一下这个UserAgent的获取方法。在打开天堂网的网站后,按下键盘上的F12键,之后会进入到开发者模式,之后点开network,如下图所示。 4. 而后随便点击一个name,复制header里边的UserAgent就可以了。 我们点击下一页的地址观察网址的变化,如下所示: https://www.ivsky.com/bizhi/1920x1080/index_2.htmlhttps://www.ivsky.com/bizhi/1920x1080/index_3.htmlhttps://www.ivsky.com/bizhi/1920x1080/index_4.html 很明显的发现,这个网址的网页数字一直在变化。我们可以用格式化{}去代替变化的值,类似这样: https://www.ivsky.com/bizhi/1920x1080/index_{}.html 6. 然后我们用for循环去遍历这些网址,代码如下所示: def main(self): for i in range(1,2):#页数随机客户随便 设置 url=self.url.format(i) print(url) 7. 我们定义这个get_home()方法去请求到这个网址。 9. 我们需要解析得到的数据,接下来定义一个xiap的方法,拿到我们请求的网址。接下来就是该项目的关键了。 10. 至此,针对反爬虫的措施我们已经提前做好了准备,下一步将进行网页结构的分析以及网页图片地址数据的提取,并针对解析出来的图片地址予以批量下载,具体实现咱们下篇文章进行详解。 /4 小结/ 本文主要内容为对图片网站进行了基本简介,基于 Python 中的爬虫库 requests 、lxml、fake_useragent,提前部署了请求头,模拟浏览器,针对反爬虫的措施我们已经提前做好了准备。 下篇文章将带大家进行网页结构的分析以及网页图片地址数据的提取,并针对解析出来的图片地址予以批量下载,敬请期待~~

优秀的个人博客,低调大师

如何使用async和await这对组合设计统一的Access Token的函数

最近我在使用SAP云平台的机器学习API做和SAP系统的集成,因为SAP Cloud Platform Leonardo上的机器学期API,每次消费时需要传一个Access Token,故在每次实际调用API前,我需要先发一个请求去获取Access Token. 该请求的响应,除了返回实际的token外,还有一个过期时间,expires_in字段: 根据OAuth 2.0标准定义,expires_in字段代表服务器颁发的该token,距离过期时间还剩的秒数。 我的代码如下: const request = require('request-promise-native'); var config = require('../config.js'); var TOKEN = undefined; var EXPIRES_IN = undefined; var TOKEN_FETCHED_SINCE = undefined; function isCurrentDateExpired(){ var current = new Date(); var diffInMilliSeconds = current - TOKEN_FETCHED_SINCE; var diffInSecond = Math.ceil(diffInMilliSeconds/1000); var expired = diffInSecond >= EXPIRES_IN ? true:false; // for debug; // expired = true; return expired; } async function getAccessToken(){ if( TOKEN === undefined || isCurrentDateExpired()){ var raw = new Buffer(config.username + ":" + config.password); const accessToken = await request({ method: 'GET', headers: { 'Authorization': 'Basic ' + raw.toString('base64') }, url: config.ACCESS_TOKEN, json: false }); var oToken = JSON.parse(accessToken); EXPIRES_IN = oToken.expires_in; TOKEN = oToken.access_token; TOKEN_FETCHED_SINCE = new Date(); return oToken.access_token; } else{ return TOKEN; } } var request1 = getAccessToken(); var freshNewToken, secondTimeToken; request1.then(function(o){ // console.log("token1: " + o); freshNewToken = o; }); function test2(){ var b = getAccessToken(); b.then(function(o){ // console.log("token2: " + o); secondTimeToken = o; console.log("they should be equal: " + (freshNewToken == secondTimeToken)); }); } setTimeout( test2, 6000); 本文来自云栖社区合作伙伴“汪子熙”,了解相关信息可以关注微信公众号"汪子熙"。

优秀的个人博客,低调大师

学习了《python网络爬虫实战》第一个爬虫,爬新浪新闻

请安装anaconda,其中附带的spyder方便运行完查看变量 1.进入cmd控制台, 输入 pip install BeautifulSoup4 pip install requests 2.编写代码,代码已经很清晰了,直接运行不会报错并有成功的结果 def getNewsDetail(newsUrl): import requests from bs4 import BeautifulSoup from datetime import datetime newsWeb = requests.get(newsUrl) newsWeb.encoding = 'utf-8' soup = BeautifulSoup(newsWeb.text,'lxml') result = {} result['title'] = soup.select('.main-title')[0].text result['newsSource'] = soup.select('.source')[0].text timeSource = soup.select('.date')[0].text result['datetime'] = datetime.strptime(timeSource,'%Y年%m月%d日 %H:%M') result['article'] = soup.select('.article')[0].text result['editor'] = soup.select('.show_author')[0].text.strip('责任编辑:') result['comment'] = soup.select('.num')[0].text return result def parseListLinks(url): import requests import json newsDetails = [] request = requests.get(url) jsonLoad = json.loads(request.text.lstrip(' newsloadercallback(').rstrip(');')) newsUrls = [] for item in jsonLoad['result']['data']: newsUrls.append(item['url']) for url in newsUrls: newsDetails.append(getNewsDetail(url)) return newsDetails if __name__ == '__main__': #获取单个新闻页面的信息 newsUrl = 'http://news.sina.com.cn/s/wh/2018-01-08/doc-ifyqkarr7830426.shtml' newsDetail = getNewsDetail(newsUrl) #获取整个列表各个新闻页面的信息 rollUrl='http://api.roll.news.sina.com.cn/zt_list?channel=news&cat_1=gnxw\ &cat_2==gdxw1||=gatxw||=zs-pl||=mtjj&level==1||=2&show_ext=1&show_all=1&\ show_num=22&tag=1&format=json&page=23&callback=newsloadercallback&_=1515911333929' newsDetails = parseListLinks(rollUrl)

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册