首页 文章 精选 留言 我的

精选列表

搜索[自适应爬虫],共4639篇文章
优秀的个人博客,低调大师

2.python爬虫基础——Urllib库

#python中Urllib库实战 #系统学习urllib模块,从urllib基础开始。学习urlretrieve(),urlcleanup(),info(),getcode(),geturl() import urllib.request #urlretrieve() 直接将一个网页爬到本地 urllib.request.urlretrieve("http://www.hellobi.com",filename="/Users/xubin/myapp/pythonfile/urlretrieve.html") #urlcleanup() 将urlretrieve产生的缓存,清空 urllib.request.urlcleanup() #info() 将一些基础的环境信息展示粗来 file=urllib.request.urlopen("http://www.hellobi.com") print(file.info()) #getcode() 获取访问url的状态码,返货200, print(file.getcode()) #geturl() 获取爬取得网址 print(file.geturl()) #超时设置 #爬取一个网页,需要时间。访问网页,网页长时间未响应,系统判断网页超时了,无法打开网页。 #服务器反应快设置2秒没反应未超时,如果服务器反应慢设置100秒没反应未超时,timeout超时时间为2 100 file=urllib.request.urlopen("http://www.hellobi.com",timeout=1) for i in range(0,10): try: file=urllib.request.urlopen("http://yum.iqianyue.com",timeout=0.1) data=file.read() print(len(data)) except Exception as e: print("出现异常:"+str(e)) #自动模拟http请求 #客户端如果要与服务器端进行通信,需要通过http请求进行,http请求有很多种 #主要涉及post,get两种方式,比如登录,搜索某些信息的时候会用到 #一般登录某个网站的时候,需要post请求 #一般搜索某些信息的时候,需要get请求 #在百度上搜索关键词,用python实现,需要用到请求,get get请求URL中有? #https://www.baidu.com/s?wd=python import urllib.request import re keywd="徐彬" keywd=urllib.request.quote(keywd) url="http://www.baidu.com/s?wd="+keywd #注意不能用https req=urllib.request.Request(url) data=urllib.request.urlopen(req).read() fh=open("/Users/xubin/myapp/pythonfile/百度python.html","wb") fh.write(data) fh.close() #post请求 比如需要登录用户 需要提交post请求 #http://passport.csdn.net/account/login 用户名:username 密码:password import urllib.request import urllib.parse url="https://passport.csdn.net/account/login" mydata=urllib.parse.urlencode({"username":"bingoxubin","password":"19900127LLBingo"}).encode("utf-8") req=urllib.request.Request(url,mydata) data=urllib.request.urlopen(req).read() fh=open("/Users/xubin/myapp/pythonfile/csdn登录界面.html","wb") fh.write(data) fh.close() ''' #爬取oa上的所有照片,存到OA照片.docx中 #遇到问题,目前所学,只能爬取单页的内容 import re import urllib.request data=urllib.request.urlopen("oa.epoint.com.cn").read() data=data.decode("utf-8") pat="" mydata=re.compile(pat).findall(data) fh=open("/Users/xubin/myapp/pythonfile/OA照片.docx","w") for i in range(0,len(mydata)): fh.write(mydata[i]+"\n") fh.close() '''

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

python-利用豆瓣爬虫发个动态

目前总的来说是失败了。原因可能是因为豆瓣验证码的问题,因为我看不到登录时候的界面,所以没法分析验证码的链接。(我用自己的浏览器登录都是默认不要验证码的,这就尴尬了),所以登录不上,后面的post也就没有意义了。把代码贴出来。 # -*- coding: utf-8 -*- """ Created on Sat Jan 6 14:45:40 2018 @author: xglc """ import requests import time session = requests.session() #创建request对象 def _login(iddata): url = 'https://www.douban.com/accounts/login' login_header = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36', 'Origin':'https://www.douban.com/accounts/login', } session.headers.update(login_header) session.post(url,data=iddata,headers=session.headers) #_login() #print(session.headers.items) def _saysth(say_data): url = 'https://www.douban.com/' add_headers = {'Cache-Control':'max-age=0', 'Content-Length':'20', 'Content-Type':'application/x-www-form-urlencoded' } session.headers.update(add_headers) session.post(url,data=say_data,headers=session.headers) if __name__ == '__main__': iddata = {'form_mail':'账号', 'form_password':'密码', 'redir':'https://www.douban.com', 'login':'登录', } _login(iddata) print ('_login') # print (session.headers.items) for i in range(5): print(5-i) time.sleep(1) say_data = {'ck':'OJop', 'comment':'vict', } _saysth(say_data) print('完成!') View Code 也不打算继续扣了,因为用的是自己平时用的账号,post 太多豆瓣别把我给封了?如果继续扣的话,大概方向有两点: 找出豆瓣验证码的链接(我手动登录完全看不到验证码,这是我的常用电脑,所以无法分析) 完善update一下headers的内容,那里还有一些需要修改的项。 这几天淮南雪都开始化了,零下5度,made,空调还给我偶尔出冷风,需要赶紧上班去办公室温暖一下。 手动分析豆瓣js查看: Python-关于豆瓣发布“说句话”,添加网页等的js行为分析

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

Python爬虫入门教程 42-100 爬取儿歌多多APP数据-手机APP爬虫部分

1. 儿歌多多APP简单分析 今天是手机APP数据爬取的第一篇案例博客,我找到了一个儿歌多多APP,没有加固,没有加壳,没有加密参数,对新手来说,比较友好,咱就拿它练练手,熟悉一下Fiddler和夜神模拟器是如何配合着使用的。 儿歌多多APP在豌豆荚的下载量还是可以的,一家做内容的APP。 2. APP安装和使用 APP直接去下载APK包就可以了,拖拽到夜神模拟器就安装成功了。在模拟器打开出现如下界面,表示已经可以开始操作了,非常儿童的APP。 3. 抓包测试 打开APP同时,打开Fiddler,首先测试一下网络是否正常,用模拟器自带的浏览器去访问百度,如果可以访问表示无问题,否则重新设置代理 运行软件过程中,注意观察Fiddler,如果出现JSON类型的API[接口],就要注意了,你想要的数据就在这里 我们点击链接,看Fiddler右侧显示内容

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

Python爬虫入门教程 38-100 教育部高校名单数据爬虫 scrapy

爬前叨叨 今天要爬取一下正规大学名单,这些名单是教育部公布具有招生资格的高校名单,除了这些学校以外,其他招生的单位,其所招学生的学籍、发放的毕业证书国家均不予承认,也就是俗称的野鸡大学! 网址是 https://daxue.eol.cn/mingdan.shtml 爬取完毕之后,我们进行一些基本的数据分析,套路如此类似,哈哈 这个小项目采用的是scrapy,关键代码 import scrapy from scrapy import Request,Selector class SchoolSpider(scrapy.Spider): name = 'School' allowed_domains = ['daxue.eol.cn'] start_urls = ['https://daxue.eol.cn/ming

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

【全网首发】鸿蒙开源三方组件--跨平台自适应布局yoga组件

目录: 1、介绍 2、如何使用 3、集成方式 4、附录1:FlexBox科普 5、附录2:相关资料 介绍 yoga是facebook打造的一个跨IOS、Android、Window平台在内的布局引擎,兼容Flexbox布局方式,让界面更加简单。 Yoga官网:https://facebook.github.io/yoga/ 官网上描述的特性包括: 完全兼容Flexbox布局,遵循W3C的规范 支持java、C#、Objective-C、C四种语言 底层代码使用C语言编写,性能不是问题 支持流行框架如React Native 目前在已开源的鸿蒙组件(https://gitee.com/openharmony-tpc/yoga)的功能现状如下: native层和接口已经打通 支持自定义xml属性来控制布局(通过YogaLayout) 设置布局中不支持Image控件(onDrawCanvas暂不支持主动回调,所以yoga没办法扫描到它),请使用Text控件替代 不支持VirtualYogaLayout 如何使用 首先我们在MainAbility中定义界面路由 public class MainAbility extends Ability { @Override public void onStart(Intent intent) { super.onStart(intent); super.setMainRoute(MainAbilitySlice.class.getName()); addActionRoute("action.dydrawnode.slice", DynamicsDrawNodeSlice.class.getName()); addActionRoute("action.showrow.slice", ShowRowAbilitySlice.class.getName()); addActionRoute("action.inflate.slice", BenchmarkInflateAbilitySlice.class.getName()); } } 然后我们来到MainAbilitySlice,其实就是做了一个向其他界面跳转的动作,并提前加载yoga的so库 public class MainAbilitySlice extends AbilitySlice { static { System.loadLibrary("yoga"); System.loadLibrary("yogacore"); System.loadLibrary("fb"); } @Override public void onStart(Intent intent) { super.onStart(intent); setUIContent(ResourceTable.Layout_main_layout); Button btn0= (Button) findComponentById(ResourceTable.Id_btn_1); btn0.setClickedListener(component -> { Intent intent1 = new Intent(); Operation operation = new Intent.OperationBuilder() .withAction("action.dydrawnode.slice") .build(); intent1.setOperation(operation); startAbilityForResult(intent1, 1); }); Button btn2= (Button) findComponentById(ResourceTable.Id_btn_2); btn2.setClickedListener(component -> { Intent intent1 = new Intent(); Operation operation = new Intent.OperationBuilder() .withAction("action.showrow.slice") .build(); intent1.setOperation(operation); startAbilityForResult(intent1, 1); }); Button btn1= (Button) findComponentById(ResourceTable.Id_btn_3); btn1.setClickedListener(component -> { Intent intent1 = new Intent(); Operation operation = new Intent.OperationBuilder() .withAction("action.inflate.slice") .build(); intent1.setOperation(operation); startAbilityForResult(intent1, 1); }); } @Override public void onActive() { super.onActive(); } @Override public void onForeground(Intent intent) { super.onForeground(intent); } } 第一个演示界面 这里yoga向我们展示了动态布局的能力,效果图如下: 实现的代码如下: public class DynamicsDrawNodeSlice extends AbilitySlice { private static final int VIEW_WIDTH = 200; private static final int VIEW_HEIGHT = 200; private ArrayList<Component> mViewList = new ArrayList<>(); private ArrayList<YogaNode> mYogaNodeList = new ArrayList<>(); private int[][] colors = new int[][]{ new int[]{0xff6200ea, 0xff651fff, 0xff7c4dff, 0xffb388ff}, new int[]{0xffd50000, 0xffff1744, 0xffff5252, 0xffff8a80}, new int[]{0xffc51162, 0xfff50057, 0xffff4081, 0xffff80ab}, new int[]{0xffaa00ff, 0xffd500f9, 0xffe040fb, 0xffea80fc} }; @Override protected void onStart(Intent intent) { super.onStart(intent); PositionLayout container = new PositionLayout(this); DisplayAttributes displayAttributes = DisplayManager.getInstance().getDefaultDisplay(this).get().getAttributes(); float screenWidth = displayAttributes.width; float screenHeight = displayAttributes.height; YogaNode root = new YogaNodeJNIFinalizer(); root.setWidth(screenWidth); root.setHeight(screenHeight); root.setFlexDirection(YogaFlexDirection.COLUMN); createRowNodeAndView(root, 0); createRowNodeAndView(root, 1); createRowNodeAndView(root, 2); createRowNodeAndView(root, 3); root.calculateLayout(screenWidth, screenHeight); for (int i = 0; i < mViewList.size(); i++) { Component component = mViewList.get(i); YogaNode yogaNode = mYogaNodeList.get(i); YogaNode yogaNodeOwner = yogaNode.getOwner(); component.setTranslationX(yogaNodeOwner.getLayoutX() + yogaNodeOwner.getLayoutX()); component.setTranslationY(yogaNodeOwner.getLayoutY() + yogaNodeOwner.getLayoutY()); component.setLeft((int) (yogaNodeOwner.getLayoutX() + yogaNode.getLayoutX())); component.setTop((int) (yogaNodeOwner.getLayoutY() + yogaNode.getLayoutY())); container.addComponent(component); } super.setUIContent(container); } private void createRowNodeAndView(YogaNode root, int index) { YogaNode row = new YogaNodeJNIFinalizer(); row.setHeight(VIEW_HEIGHT); row.setWidth(VIEW_WIDTH * 4); row.setFlexDirection(YogaFlexDirection.ROW); row.setMargin(YogaEdge.ALL, 20); for (int i = 0; i < 4; i++) { YogaNode yogaNode = new YogaNodeJNIFinalizer(); yogaNode.setWidth(VIEW_WIDTH); yogaNode.setHeight(VIEW_HEIGHT); Component component = createView(colors[index][i]); row.addChildAt(yogaNode, i); mYogaNodeList.add(yogaNode); mViewList.add(component); } root.addChildAt(row, index); } private Component createView(int color) { Component view = new Component(this); ShapeElement background = new ShapeElement(); background.setRgbColor(convertColor(color)); view.setBackground(background); ComponentContainer.LayoutConfig layoutConfig = new AdaptiveBoxLayout.LayoutConfig(VIEW_WIDTH, VIEW_HEIGHT); view.setLayoutConfig(layoutConfig); return view; } /** * 转换颜色 * @param color * @return RgbColor */ public RgbColor convertColor(int color) { int colorInt = color; int red = (colorInt & 0xff0000) >> 16; int green = (colorInt & 0x00ff00) >> 8; int blue = (colorInt & 0x0000ff); return new RgbColor(red, green, blue); } } 代码中定义了一个root根布局,宽高为屏幕的宽高,接着定义了四个行布局,并向每个行布局里添加4个子布局,最重要的是在调用root.calculateLayout(screenWidth, screenHeight)后,便将每个子布局的位置给确定了下来,然后根据获取到的每个布局的参数,给每个Component设置位置。该演示只是借助yoga组件来确定每个Component位置,真正使渲染生效的还是基于鸿蒙的原生控件。 第二个演示界面 接下来展示如何使用yoga组件在xml里通过填写属性来控制item位置的能力,效果图如下: 代码如下: <?xml version="1.0" encoding="utf-8" ?> <com.facebook.yoga.openharmony.YogaLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" xmlns:yoga="http://schemas.huawei.com/apk/res-auto" ohos:height="match_parent" ohos:width="match_parent" > <com.facebook.yoga.openharmony.YogaLayout ohos:height="60vp" ohos:width="match_content" yoga:yg_alignItems="center" yoga:yg_flexDirection="row" yoga:yg_marginHorizontal="15" yoga:yg_marginStart="15" yoga:yg_marginTop="50" ohos:background_element="$graphic:item_element" > <Text ohos:height="50vp" ohos:width="50vp" ohos:background_element="$media:icon" yoga:yg_flex="0" yoga:yg_marginStart="15" /> <Text ohos:height="50vp" ohos:width="220vp" ohos:text="Hello. I am Yoga!" ohos:text_color="#000000" yoga:yg_flex="1" yoga:yg_marginStart="15" ohos:text_size="20fp" /> </com.facebook.yoga.openharmony.YogaLayout> <com.facebook.yoga.openharmony.YogaLayout ohos:background_element="$graphic:item_element" ohos:height="60vp" ohos:width="match_content" yoga:yg_alignItems="center" yoga:yg_flexDirection="row" yoga:yg_marginHorizontal="15" yoga:yg_marginTop="20" yoga:yg_marginStart="15" > <Text ohos:height="50vp" ohos:width="50vp" ohos:background_element="$media:icon" yoga:yg_flex="0" yoga:yg_marginStart="15" /> <Text ohos:height="50vp" ohos:width="250vp" ohos:text="I am a layout engine!" ohos:text_color="#000000" yoga:yg_flex="1" yoga:yg_marginStart="15" ohos:text_size="20fp" /> </com.facebook.yoga.openharmony.YogaLayout> <com.facebook.yoga.openharmony.YogaLayout ohos:background_element="$graphic:item_element" ohos:height="60vp" ohos:width="match_content" yoga:yg_alignItems="center" yoga:yg_flexDirection="row" yoga:yg_marginHorizontal="15" yoga:yg_marginTop="20" > <Text ohos:height="50vp" ohos:width="50vp" ohos:background_element="$media:icon" yoga:yg_flex="0" yoga:yg_marginStart="15" /> <Text ohos:height="50vp" ohos:width="250vp" ohos:text="I run natively." ohos:text_color="#000000" yoga:yg_flex="1" yoga:yg_marginStart="15" ohos:text_size="20fp" /> </com.facebook.yoga.openharmony.YogaLayout> <com.facebook.yoga.openharmony.YogaLayout ohos:background_element="$graphic:item_element" ohos:height="60vp" ohos:width="match_content" yoga:yg_alignItems="center" yoga:yg_flexDirection="row" yoga:yg_marginHorizontal="15" yoga:yg_marginTop="20" > <Text ohos:height="50vp" ohos:width="50vp" ohos:background_element="$media:icon" yoga:yg_flex="0" /> <Text ohos:height="50vp" ohos:width="200vp" ohos:text="So I\'m fast." ohos:text_color="#000000" yoga:yg_flex="1" yoga:yg_marginStart="15" ohos:text_size="20fp" /> </com.facebook.yoga.openharmony.YogaLayout> <com.facebook.yoga.openharmony.YogaLayout ohos:background_element="$graphic:item_element" ohos:height="60vp" ohos:width="match_content" yoga:yg_alignItems="center" yoga:yg_flexDirection="row" yoga:yg_marginHorizontal="15" yoga:yg_marginTop="20" > <Text ohos:height="50vp" ohos:width="50vp" ohos:background_element="$media:icon" yoga:yg_flex="0" /> <Text ohos:height="50vp" ohos:width="200vp" ohos:text="Who are you?" ohos:text_color="#000000" yoga:yg_flex="1" yoga:yg_marginStart="15" ohos:text_size="20fp" /> </com.facebook.yoga.openharmony.YogaLayout> </com.facebook.yoga.openharmony.YogaLayout> 这里YogaLayout其实可以看成FlexBox(详情请参考附录:FlexBox科普),可以通过参数调节子布局位置,我们可以使用YogaLayout上的yoga:yg_alignItems="center"属性使得item居中显示,并通过yoga:yg_flexDirection="row"属性使得之item横向排列。子item也可以通过设置yoga:yg_flex="1"来调整自己的权重。更多属性的使用大家也可以下载项目亲自体验。 集成方式 自行编译工程entity、yoga、yoga_layout、fb生成libyoga.so、libfb.so、libyogacore.so 将其添加到要集成的libs文件夹内,在entity的gradle内添加如下代码。 方式一: 通过library生成har包,添加har包到libs文件夹内。 在entry的gradle内添加如下代码: implementation fileTree(dir:'libs', include:['*.jar','*.har']) 方式二: allprojects{ repositories{ mavenCentral() } } implementation 'io.openharmony.tpc.thirdlib:yoga-layout:1.0.0' implementation 'io.openharmony.tpc.thirdlib:yoga-yoga:1.0.0' implementation 'io.openharmony.tpc.thirdlib:yoga-fb:1.0.0' 附录1:FlexBox科普 布局的传统解决方案,基于盒状模型,依赖display属性,position属性,float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。2009年,W3C提出了一种新的方案:flex。可以简便、完整、响应式地实现各种界面布局。目前,该方案已经得到了所有浏览器的支持。采用Flex布局的元素,称为Flex容器(flex container),简称“容器”。它的所有子元素置动成为容器成员,称为Flex项目(flex item),简称“项目”。 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫main start,结束位置叫main end;交叉轴的开始位置叫cross start,结束位置叫cross end。项目默认沿主轴排列。单个项目占据的主轴空间叫main size,占据的交叉轴空间叫cross size。 附录2:相关资料 项目地址:https://gitee.com/openharmony-tpc/yoga IDE官方下载地址:https://developer.harmonyos.com/cn/develop/deveco-studio 阮一峰的flex布局教程:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html 想了解更多内容,请访问51CTO和华为合作共建的鸿蒙社区:https://harmonyos.51cto.com

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

Firefox 72 中的滚动条将自适应网页背景色

目前越来越多的应用、网站等都提供了暗黑主题、深色背景,然而许多浏览器的滚动条部分被忽略了,没有进行相应调整。明亮的滚动条在深色页面上显得突兀,令人分心。Mozilla 已经在Firefox 72 nightly 版本中解决了这一问题。 图片来源:ghacks 从 Firefox 72 开始,Firefox 会根据访问页面的背景色来调整滚动条的颜色。偏爱较暗主题的浏览器用户会注意到,滚动条区域的颜色也将以较暗的颜色存在,并且页面位置指示器也将比以前更暗。而在此前,用户只能使用自定义 CSS 样式将滚动条绘制为深色,或是利用某些插件让滚动条变暗。 一名reddit用户发现了这一新功能,随后在论坛上激起了广泛讨论。有网友就此提出更多想法,例如:是否能使滚动条保持暗色,无论网页背景色如何;它是否会对现有插件造成影响;对比度还不够完美,黑色背景下的滚动条几乎看不见等等。可以感受到,用户们希望享有更广泛的自定义权利。 目前,该功能仅在少数网站能够正常使用,也仅在 Windows 版本下发布,Linux 设备上暂且无法使用。根据发布时间表,Firefox 72 Stable 将于 2020 年 1 月 7 日发布。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

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

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册