精华内容
下载资源
问答
  • 1、爬虫很多人入门 Python 的必修课之一一定是 Web 开发和爬虫,但这两项要想赚到钱,就必须知道该开发什么或该去爬什么数据赚到钱。如果你都不知道的话问题也不大,可以考虑自己开一个淘宝网店或猪八戒服务外包...

    以我差不多四年的 Python 使用经验来看,大概可以按以下这些路子来赚到钱,但编程技能其实只是当中必不可少的一部分,搭配其它技能栈食用风味更佳。

    1、爬虫

    很多人入门 Python 的必修课之一一定是 Web 开发和爬虫,但这两项要想赚到钱,就必须知道该开发什么或该去爬什么数据能赚到钱。如果你都不知道的话问题也不大,可以考虑自己开一个淘宝网店或猪八戒做服务外包。很多人可能会觉得开淘宝店很困难,其实不然,我在13年刚毕业那会儿就开过,没有投一分钱流量广告,做到了「数据抓取」类似关键词下的第一排展示位,而且还是利用周末或工作日晚上闲着无聊的时候干的,月流水1w左右纯当外快了。收费定价全看自己心情,很多客户还觉得我这边物美价廉。其实我做了很多通用化的爬虫设计,比如那时候需求量很大的新浪微博数据,针对性开发了一套比较完整的爬虫系统(各种反爬取、IP代理池、Cookie/UA池等等)。后来我才知道,我凭借这个配几个参数喝杯咖啡等上半小时就能搞定的需求,对外报价差不多是 100-200 元,隔壁家要在 600 元以上,这就是你在淘宝生存下去的硬实力。

    在这个阶段最重要的还是要找到一个好的项目,比如最舒服的就是帮一些证券大佬抓取一些财经新闻、龙虎榜和舆情相关数据,开发完之后每个月只要保证爬虫不挂就可以收 3-5k,自己买个云主机一个月只要两三百的成本,还可以用来帮自己干别的事情,直到老板说不做这个项目了……

    (进阿里后小二是不让开店的,且这个店本来就很久没接单了所以已经注销释放了,各位看官就不用去搜了)

    2、量化交易(配合金融和统计学食用)

    只要不涉及高频交易(HFT),用 Python 来完成量化交易相关工作内容实在是太方便了。当然了,做投资肯定是会有风险的,所以使用不当也很容易让你亏钱。对于新手而言,我比较推荐 JoinQuant(

    @JoinQuant

    有没有广告费?),新手教程和在线 Python 策略开发环境我个人认为都是比较友好的。做 Quant 其实就是一个做数据挖掘的过程,不同的策略就是你手头能用的模型,选股、择时、资金管理就是你所要做的特征工程。特征工程决定了你最多能赚到多少,模型则是用来逼近这个上限。举个比较极端的例子,假设你选了一只天天跌停的股,不管你怎么调整模型,必然都是无法在单边交易中赚到钱的,所以大家不必纠结到底是用均线策略还是用 BOLL,找到策略适应的股和择时才是关键,剩下就不展开了。

    要追求稳定盈利的话可以考虑去各大虚拟币交易市场搬砖,编程能力较弱的同学可以考虑一下 botvs。统计虽然也能稳定盈利但显然不适合个人了,一般需要 HFT 支持。

    3、程序代写/外包

    互联网灰产真的是无处不在,我所认为的灰产就是不违法,但是有违道德的一些事情。比如淘宝上有不少代做程序设计的,价美物廉,几百块就能搞一套基于 LAMP 的 xx 管理系统,看看买家评论就会知道,绝大部分都是学生的大作业或者毕业设计。淘宝也曾一度打击过类似商品的关键词,比如直接禁止「毕业设计」这样的组合词出现在商品标题中,然后大家纷纷换成「毕业指导……程序设计」来命中用户包含「毕业设计」的 query。

    这玩意儿可以赚多少钱呢?首先是要杜绝帮人写论文,这部分吃力不讨好,导师不可能让你论文一稿过,你有可能在接下来要为每一单付出长达半年的售后服务,所以有点技术干这行的都不会沦落去帮人写论文,必须告知为了符合淘宝平台相关政策,是不代写论文的,最多提供相关的技术文档。只负责代码开发就相对容易很多,一般本科毕设都是偏工程研发的,这类门槛低,通用化代码很多,基本上找份开源的改一改就能完成任务;硕士毕设就有不少偏机器学习的,读一篇 paper 再撸上半天数据实现一个 overfitting 的算法实现,基本也就1-2天的工夫。前者一份卖到一两千,后者一份卖到两三千,如果客源有保证的话,一天做一单就足够养活自己了。

    4、白帽

    Python 是黑客第一语言就不必多说了,涉灰甚至涉黑的内容数不胜数,很多时候在一念之间你就可以干出坏事来。从好的方向来说,你可以挖掘国内各大网站漏洞并提交到官方渠道,往往会获得一笔不菲的奖励金。(别问我乌云啥时候恢复,我也不知道……)

    所谓哪里有利益哪里就有灰黑产,灰产常见于各种刷:刷广告点击、刷竞价排名、刷 App 下载榜、刷直播观众数、刷各路媒体点赞和阅读数…… 只要你的爬虫功力足够强,这些都不在话下,毕竟说透了就是模拟请求,只不过有些是简单 HTTP Get 请求,有些是通过 Ajax 提交的 Post 请求,还有些是 Socket 请求,然后捋一捋事件中不同请求的时间线和依赖关系,还有一堆参数的生成方式等等差不多就能搞定。

    展开全文
  • 因为我个人感觉智联招聘的信息更全面一点,不过找工作的网站都大同小异,爬取适合自己的就可以了。 整个爬取过程就不在这里仔细叙述了,完整代码见Github:https://github.com/alpha87/Zhilian. 爬取信息所用到的库:...

    1、获取信息

    信息的来源主要为智联招聘上关于Python的职位信息。因为我个人感觉智联招聘的信息更全面一点,不过找工作的网站都大同小异,爬取适合自己的就可以了。

    整个爬取过程就不在这里仔细叙述了,完整代码见Github:https://github.com/alpha87/Zhilian.

    爬取信息所用到的库:

    相信经常爬虫的小伙伴们对这些库一定不陌生。

    Pymongo是Python和Mongo数据库相关操作的库;

    requests这个库应该不用介绍了吧,网络请求必备;

    pyquery主要是作为CSS选择器,指定网页中的对应信息;

    multiprocessing是多进程模块。

    2、思路

    首先,使用requests请求所需的智联网页,得到网页数据。

    然后利用正则或pyquery从得到的网页数据中定位需要采集的信息。

    最后将信息保存在Mongo数据库中,一些特定的信息单独保存到不同的txt文件中,之后的分析起来会更方便些。配合分词处理以及数据可视化,生成最后的分析结果。

    由于需爬取的数据量太大,所以使用了多进程技术。加上随机休眠降低速度,作为简单的反爬手段。

    最后,虽然用了不少时间,但也无惊无险的爬完所有数据(此处应有掌声)。

    终于到了关键时刻,我们来分析一下抓取好的数据。

    3、数据分析

    3.1职位要求

    每份工作都会对应一份公司自己拟定的职位要求,我们在爬取过程中单独保存成txt文件。利用词频统计的方式生成词云。

    这是处理后的职位要求生成的词云。可以看出公司希望求职者具备扎实的专业技能,良好的沟通能力和合作能力。可以是实习生,可以是学徒,当然更好可以是专家,这些在职位要求中都有体现。

    3.2工作地点

    Python在一线城市非常受欢迎,北京、上海、深圳就占据了一半的用工需求。

    北上广深这些地方的同学找工作找实习会方便不少啊,需求量还是蛮大的。

    3.2职业薪资

    这个图大家感受一下,python工作的薪资主要集中在15000元左右,配合上图工作地点的分布,说明北上广地区的工资集中在8000~20000元左右,还是比较有诱惑力的。这也为你继续深入学习python提供了动力啊!

    3.3工作经验

    公司对工作经验的要求还是蛮高的,3~5年出现的次数比较多。

    3.4员工福利

    给你们一张图感受一下,其实福利还是蛮不错的,还有的总会有的。

    3.5python热度

    python已经进了最流行编程语言的前五,而且python还被运用于各个方面,不论是科学计算,数据分析,还是艺术,游戏,都有python的身影。这么有用的语言,有什么理由不坚持下来学习呢?

    4、总结

    我们爬取了python职位的相关信息,然后利用这些信息做了简单的分析。得出python还是比较有前途的,不论是为了工作,还是自己的兴趣,我们都应该尝试学学这门语言。入门简单,而且网上的资源也很丰富。

    人工智能、大数据、云计算和物联网的未来发展值得重视,均为前沿产业,多智时代专注于人工智能和大数据的入门和科谱,在此为你推荐几篇优质好文:
    Python和R语言对比,数据分析与挖掘该选哪一个?
    http://www.duozhishidai.com/article-21757-1.html
    自学Python爬虫学到什么程度?就可以去找工作了?
    http://www.duozhishidai.com/article-14913-1.html
    Python工程师与人工智能工程师之间,最根本的区别是什么?
    http://www.duozhishidai.com/article-14635-1.html


    多智时代-人工智能大数据学习入门网站|人工智能、大数据、物联网云计算的学习交流网站

    多智时代-人工智能大数据学习入门网站|人工智能、大数据、云计算、物联网的学习服务的好平台
    展开全文
  • 听说你一周 学会python 简单的知识 才是你没有掌握的
  • 一张图学会python

    2018-12-28 15:10:20
    一张图学会python 是不是很神 奇呢? 一看一目了然哦。
  • 1小时学会Python

    2014-11-12 10:14:12
    1小时学会Python Python
  • Python黑帽第二篇文章将分享Python网络攻防基础知识,看看Python能做什么,以及正则表达式、网络爬虫和套接字通信入门基础。本文参考了i春秋ADO老师的课程内容,这里真心推荐大家去学习ichunqiu的课程,同时也结合...

    Python黑帽第二篇文章将分享Python网络攻防基础知识,看看Python能做什么,以及正则表达式、网络爬虫和套接字通信入门基础。本文参考了i春秋ADO老师的课程内容,这里真心推荐大家去学习ichunqiu的课程,同时也结合作者的经验进行讲解。希望这篇基础文章对您有所帮助,更希望大家提高安全意识,也欢迎大家讨论。

    娜璋AI安全之家于2020年8月18日开通,将专注于Python和安全技术,主要分享Web渗透、系统安全、CVE复现、威胁情报分析、人工智能、大数据分析、恶意代码检测等文章。真心想把自己近十年的所学所做所感分享出来,与大家一起进步。


    声明:本人坚决反对利用教学方法进行恶意攻击的行为,一切错误的行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解技术背后的原理,更好地进行安全防护。虽然作者是一名安全小白,但会保证每一篇文章都会很用心地撰写,希望这些基础性文章对你有所帮助,在安全路上一起前行。



    一.为什么使用Python做网络攻防

    首先,你需要了解网络攻防的七个基础步骤。

    • 侦查: 漏洞挖掘
    • 武器制作: 攻击、载荷
    • 分发: 垃圾邮件等
    • 利用: 漏洞利用
    • 安装: 恶意代码、网页
    • 远程控制: 僵尸网络
    • 行动: 窃密、破坏、跳板

    下图是ATT&CK框架,包括12个步骤。

    在这里插入图片描述

    其次,为什选择Python作为开发工具呢?
    真正厉害的安全工程师都会自己去制作所需要的工具(包括修改开源代码),而Python语言就是这样一个利器。Python开发的平台包括Seebug、TangScan、BugScan等。在广度上,Python可以进行蜜罐部署、沙盒、Wifi中间人、Scrapy网络爬虫、漏洞编写、常用小工具等;在深度上,Python可以实现SQLMAP这样一款强大的SQL注入工具,实现mitmproxy中间人攻击神器等。由于Python具有简单、易学习、免费开源、高级语言、可移植、可扩展、丰富的第三方库函数特点,Python几行代码就能实现Java需要大量代码的功能,并且Python是跨平台的,Linux和Windows都能使用,它能快速实现并验证我们的网络攻防想法,所以选择它作为我们的开发工具。

    那么,我们又可以用Python做什么呢?

    • 目录扫描:Web+多线程(requests+threading+Queue)、后台敏感文件(svn|upload)、敏感目录(phpmyadmin)。
    • 信息搜集:Web+数据库、中间件(Tomcat | Jboss)、C段Web信息、搜集特点程序。例如:搜索某个论坛上的所有邮箱,再进行攻击。
    • 信息匹配&SQL注入:Web+正则、抓取信息(用户名|邮箱)、SQL注入。
    • 反弹shell:通过添加代码获取Shell及网络信息。

    最后,建议读者做好以下准备。

    1. 选择一个自己喜欢顺手的编辑器
    2. 至少看一本关于Python的书籍
    3. 会使用Python自带的一些功能,学习阅读开源代码
    4. 阅读官方文档,尤其是常用的库
    5. 多练习,多实战

    下面举个简单Python示例,通过import导入扩展包base64,它是将字符串base64加解码的模块, 通过print dir(base64)、help(base64)可以查看相关功能。

    # -*- coding: utf-8 -*-
    import base64
    
    print dir(base64)
    print base64.__file__
    print base64.b64encode('eastmount')
    

    输出结果如下图所示,包括查看源代码文件位置和“eastmount”转码。

    在这里插入图片描述

    接下来我们开始学习Python正则表达式、Python Web编程和Python网络编程。



    二.Python正则表达式

    (一) 正则表达式基础

    在使用正则表达式之前,我们需要基本了解Python基础知识、HTTP协议,熟悉使用BurpSuite、SQLMAP工具。Python正则表达式被广泛应用在爬虫开发、多线程、网络编程中,而hacker应用也会涉及到正则表示式相关知识,比如扫描、爆破、POC等。

    正则表达式(RegEx)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。 例如,如果想获取里面的ip地址,就需要使用正则表达式实现。Python通过re模块提供正则表达式的支持,其基本步骤如下:

    • 先将正则表达式的字符串形式编译我Pattern实例(compile)
    • 使用Pattern实例处理文本并获得匹配结果(match find findall)
    • 使用实例获得信息,进行其他的操作( 匹配结果)

    举一个简单例子:

    import re
    
    pattern = re.compile('east')
    match = pattern.match('eastmount!')
    print(match.group())
    
    word = re.findall('east', 'east mount')
    print(word)
    

    输出结果为:

    • east
    • [‘east’]

    点(.)表示匹配任意换行符“\n”以外的字符。

    import re
    
    word = "http://www.eastmount.com Python_9.29"
    key = re.findall('t.', word)
    print key
    

    输出结果为:[‘tt’, ‘tm’, ‘t.’, ‘th’],依次匹配t加任意字符的两个字符。

    斜杠(\)表示匹配转义字符 如果需要匹配点的话,必须要\转义字符。

    import re
    
    word = "http://www.eastmount.com Python_9.29"
    key = re.findall('\.', word)
    print key
    

    输出结果为:[’.’, ‘.’, ‘.’]。

    […] 中括号是对应位置可以是字符集中任意字符。
    字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c],第一个字符如果是^表示取反,如 [ ^ abc]表示不是abc的其他字符。例如:a[bcd]e 能匹配到 abe、ace、ade。

    匹配数字和非数字案例。

    # -*- coding: utf-8 -*-
    import re
    
    #匹配数字
    word = "http://www.eastmount.com Python_9.29"
    key = re.findall('\d\.\d\d', word)
    print key
    
    #匹配非数字
    key = re.findall('\D', word)
    print key
    

    输出结果如下图所示:

    在这里插入图片描述

    正则表达式较为难理解,更推荐读者真正使用的时候学会去百度相关的规则,会使用即可。同时,更多正则表达式的使用方法建议读者下来之后自行学习,常见表如下图所示。

    在这里插入图片描述

    在这里插入图片描述


    (二) 常用正则表达式规则

    下面讲解比较常见的正则表达式规则,这些规则可能会对我们的网络攻防有一定帮助。

    1.获取数字

    # -*- coding: utf-8 -*-
    import re
    
    string="A1.45,b5,6.45,8.82"
    regex = re.compile(r"\d+\.?\d*")
    print(regex.findall(string))
    

    输出结果为:
    [‘1.45’, ‘5’, ‘6.45’, ‘8.82’]


    2.抓取标签间的内容

    # coding=utf-8  
    import re  
    import urllib
    
    html = u'<title>欢迎走进Python攻防系列专栏</title>' 
    title = re.findall(r'<title>(.*?)</title>', html)
    for i in title:
        print(i)
    

    输出结果为:

    在这里插入图片描述


    3.抓取超链接标签间的内容

    # coding=utf-8  
    import re  
    import urllib.request
    
    url = "http://www.baidu.com/"  
    content = urllib.request.urlopen(url).read()
    #print(content)
    
    #获取完整超链接
    res = r"<a.*?href=.*?<\/a>"
    urls = re.findall(res, content.decode('utf-8'))
    for u in urls:
        print(u)
    
    #获取超链接<a>和</a>之间内容
    res = r'<a .*?>(.*?)</a>'  
    texts = re.findall(res, content.decode('utf-8'), re.S|re.M)  
    for t in texts:
        print(t)
    

    输出结果部分内容如下所示,中文编码是常见的问题,我们需要注意下,比如utf-8编码。

    在这里插入图片描述


    4.抓取超链接标签的url

    # coding=utf-8  
    import re
    
    content = '''
    <a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
    <a href="http://www.hao123.com" name="tj_trhao123" class="mnav">hao123</a>
    <a href="http://map.baidu.com" name="tj_trmap" class="mnav">地图</a>
    <a href="http://v.baidu.com" name="tj_trvideo" class="mnav">视频</a>
    '''
    
    res = r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')"
    urls = re.findall(res, content, re.I|re.S|re.M)
    for url in urls:
        print(url)
    

    获取的超链接输出结果如下图所示:

    在这里插入图片描述


    5.抓取图片超链接标签的url和图片名称
    在HTML中,我们可以看到各式各样的图片,其图片标签的基本格式为“< img src=图片地址 />”,只有通过抓取了这些图片的原地址,才能下载对应的图片至本地。那么究竟怎么获取图片标签中的原图地址呢?下面这段代码就是获取图片链接地址的方法。

    content = '''<img alt="Python" src="http://www.yangxiuzhang.com/eastmount.jpg" />'''
    urls = re.findall('src="(.*?)"', content, re.I|re.S|re.M)
    print(urls)
    # ['http://www.yangxiuzhang.com/eastmount.jpg']
    

    其中图片对应的原图地址为“http://www.xxx.com/eastmount.jpg”,它对应一张图片,该图片是存储在“www.xxx.com”网站服务器端的,最后一个“/”后面的字段为图片名称,即为“eastmount.jpg”。那么如何获取url中最后一个参数呢?

    content = '''<img alt="Python" src="http://www..csdn.net/eastmount.jpg" />'''
    urls = 'http://www..csdn.net/eastmount.jpg'
    name = urls.split('/')[-1]  
    print(name)
    # eastmount.jpg
    

    更多正则表达式的用法,读者结合实际情况进行复现。



    三.Python Web编程

    这里的Web编程并不是利用Python开发Web程序,而是用Python与Web交互,获取Web信息。主要内容包括:

    • urllib、urllib2、requests
    • 爬虫介绍
    • 利用Python开发一个简单的爬虫

    (一) urllib\urllib2

    urllib是Python用于获取URL(Uniform Resource Locators,统一资源定址器)的库函数,可以用来抓取远程数据并保存,甚至可以设置消息头(header)、代理、超时认证等。urllib模块提供的上层接口让我们像读取本地文件一样读取www或ftp上的数据。它比C++、C#等其他编程语言使用起来更方便。其常用的方法如下:

    urlopen(url, data=None, proxies=None)
    该方法用于创建一个远程URL的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据。参数url表示远程数据的路径,一般是网址;参数data表示以post方式提交到url的数据;参数proxies用于设置代理。urlopen返回一个类文件对象。

    # -*- coding:utf-8 -*-
    import urllib.request
    
    url = "http://www.baidu.com"
    content = urllib.request.urlopen(url)
    print(content.info())        #头信息
    print(content.geturl())      #请求url
    print(content.getcode())     #http状态码
    

    该段调用调用urllib.urlopen(url)函数打开百度链接,并输出消息头、url、http状态码等信息,如下图所示。

    在这里插入图片描述

    urlretrieve(url, filename=None, reporthook=None, data=None)
    urlretrieve方法是将远程数据下载到本地,参数filename指定了保存到本地的路径,如果省略该参数,urllib会自动生成一个临时文件来保存数据;参数reporthook是一个回调函数,当连接上服务器,相应的数据块传输完毕时会触发该回调,通常使用该回调函数来显示当前的下载进度;参数data指传递到服务器的数据。

    # -*- coding:utf-8 -*-
    import urllib.request
    
    url = 'https://www.baidu.com/img/bd_logo.png'
    path = 'test.png'
    urllib.request.urlretrieve(url, path)
    

    它将百度Logo图片下载至本地。

    在这里插入图片描述

    注意:Python3和Python2代码有少许区别,Python2直接调用urllib.urlopen()。


    (二) requests

    requests模块是用Python语言编写的、基于urllib的第三方库,采用Apache2 Licensed开源协议的http库。它比urllib更加方便,既可以节约大量的工作,又完全满足http测试需求。requests是一个很实用的Python http客户端库,编写爬虫和测试服务器响应数据时经常会用到。推荐大家从 requests官方网站 进行学习,这里只做简单介绍。

    假设读者已经使用“pip install requests”安装了requests模块,下面讲解该模块的基本用法。

    1.发送网络请求

    r = requests.get("http://www.eastmountyxz.com")
    r = requests.post("http://www.eastmountyxz.com")
    r = requests.put("http://www.eastmountyxz.com")
    r = requests.delete("http://www.eastmountyxz.com")
    r = requests.head("http://www.eastmountyxz.com")
    r = requests.options("http://www.eastmountyxz.com")
    

    2.为URL传递参数

    import requests
    payload = {'key1':'value1', 'key2':'value2'}
    r = requests.get('http://httpbin.org/get', params=payload)
    print(r.url)
    

    输出结果如下图所示,将参数进行了拼接。

    在这里插入图片描述

    3.响应内容

    import requests
    
    r = requests.get('http://www.eastmountyxz.com')
    print(r.text)
    print(r.encoding)
    

    4.二进制响应内容

    r = requests.get('http://www.eastmountyxz.com')
    print(r.content)
    

    5.定制请求头

    url = 'http://www.ichunqiu.com'
    headers = {'content-type':'application/json'}
    r = requests.get(url, headers=headers)
    

    注意:headers中可以加入cookies

    6.复杂的POST请求

    payload = {'key1':'value1', 'key2':'value2'}
    r = requests.post('http://httpbin.org/post', data=payload)
    

    7.响应状态码和响应头

    r = requests.get('http://www.ichunqiu.com')
    r.status_code
    r.headers
    

    8.Cookies

    r.cookies
    r.cookies['example_cookie_name']
    

    9.超时

    requests.get('http://www.ichunqiu.com', timeout=0.001)
    

    10.错误和异常
    遇到网络问题(如:DNS查询失败,拒绝链接等)时,requests会抛出一个ConnectionError异常;遇到罕见的无效HTTP响应式时,requests则会抛出一个HTTPError异常;若请求超时,会抛出一个Timeout异常。


    (三) 网络爬虫案例

    网络爬虫又称为网页蜘蛛,网络机器人,网页追逐者,是按照一定规则自动抓取万维网信息的程序或脚本。最大好处是批量且自动化获得和处理信息,对于宏观或微观的情况都可以多一个侧面去了解。在安全领域,爬虫能做目录扫描、搜索测试页面、样本文档、管理员登录页面等。很多公司(如绿盟)的Web漏洞扫描也通过Python来自动识别漏洞。

    下面两个案例虽然简单,却能解决很多人的问题,希望读者可以独立完成。

    1.设置消息头请求(流量分析相关)
    假设我们需要抓取360百科的乔布斯信息,如下图所示。

    在这里插入图片描述

    传统的爬虫代码会被网站拦截,从而无法获取相关信息。

    # -*- coding: utf-8 -*-
    import requests
    
    url = "https://baike.so.com/doc/24386561-25208408.html"
    content = requests.get(url, headers=headers)
    print(content.text)
    

    右键审查元素(按F12),在Network中获取Headers值。headers中有很多内容,主要常用的就是user-agent 和 host,它们是以键对的形式展现出来,如果user-agent 以字典键对形式作为headers的内容,就可以反爬成功。

    在这里插入图片描述

    代码如下:

    # -*- coding: utf-8 -*-
    import requests
    
    #添加请求头
    url = "https://baike.so.com/doc/24386561-25208408.html"
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
    }
    content = requests.get(url, headers=headers)
    content.encoding='utf-8'
    print(content.text)
    

    输出结果如下图所示:

    在这里插入图片描述

    有部分网站会返回Json格式的数据,我们可以通过json模块进行处理。核心代码如下:

    data = json.loads(r.text)
    print(data['result'])
    name_len = len(data['result'])
    for i range(name_len):
    	print(data['result'][i]['courseName'])
    

    2.提交数据请求(盲注相关)
    部分网站如果涉及到翻页,需要获取所有页码的信息,最传统的方法是定义一个函数,然后设计一个循环,一次遍历不同页面的内容实现。核心代码如下:

    url_start = ""
    url_end = ""
    
    def lesson(url):
        ....
    
    for i in range(1,9)
    	url = url_start+ str(i) + url_end
    	lesson(url)
    

    但如果URL始终保持不变,就需要我们深入地分析,或通过Selenium模拟浏览器抓取,这里提供一个技巧性比较强的方法。

    假设我们想爬取某网站的公开信息,但通过翻页发现这个页面的url地址是不变的,我们大致就可以判断出,中间表格的数据是通过js动态加载的,我们可以通过分析抓包,找到真实的请求地址。目标网址如下:

    在这里插入图片描述

    通过审查元素可以发现有个pagesnum变量,它标记为我们的页码,所以这里需要通过requests提交变量数据,就能实现翻页。

    在这里插入图片描述

    核心代码如下:

    # -*- coding: utf-8 -*-
    import requests
    import time
    import datetime
    
    url = "http://www.hshfy.sh.cn/shfy/gweb/ktgg_search_content.jsp?"
    
    page_num = 1
    date_time = datetime.date.fromtimestamp(time.time())
    print(date_time)
    
    data = {
        "pktrqks": date_time,
        "ktrqjs": date_time,
        "pagesnum": page_num
    }
    print(data)
    
    content = requests.get(url, data, timeout=3)
    content.encoding='gbk'
    print(content.text)
    


    四.Python套接字通信

    (一) 什么是C/S架构呢?

    Python网络通讯主要是C/S架构的,采用套接字实现。C/S架构是客户端(Client)和服务端(Server)架构,Server唯一的目的就是等待Client的请求,Client连上Server发送必要的数据,然后等待Server端完成请求的反馈。

    C/S网络编程:Server端进行设置,首先创建一个通信端点,让Server端能够监听请求,之后就进入等待和处理Client请求的无限循环中。Client编程相对Server端编程简单,只要创建一个通信端点,建立到服务器的链接,就可以提出请求了。


    (二) 什么是套接字?

    套接字是一种具有之前所说的“通信端点”概念的计算网络数据结构,网络化的应用程序在开始任何通信都必须创建套接字。相当于电话插口,没它无法通信,这个比喻非常形象。Python支持:AF_UNIX、AF_NETLINK、AF_INET,其中AF_INET是基于网络的套接字。

    套接字起源于20世纪70年代加州伯克利分校版本的Unix,即BSD Unix,又称为“伯克利套接字”或“BSD套接字”。最初套接字被设计用在同一台主机上多个应用程序之间的通讯,这被称为进程间通讯或IPC。

    套接字分两种:基于文件型和基于网络

    • 第一个套接字家族为AF_UNIX,表示地址家族:UNIX。包括Python在内的大多数流行平台上都使用术语“地址家族”及其缩写AF。由于两个进程都运行在同一台机器上,而且这些套接字是基于文件的,所以它们的底层结构是由文件系统来支持的。可以理解为同一台电脑上,文件系统确实是不同的进程都能进行访问的。
    • 第二个套接字家族为AF_INET,表示地址家族:Internet。还有一种地址家族AF_INET6被用于网际协议IPv6寻址。Python 2.5中加入了一种Linux套接字的支持:AF_NETLINK(无连接)套接字家族,让用户代码与内核代码之间的IPC可以使用标准BSD套接字接口,这种方法更为精巧和安全。

    如果把套接字比作电话的查看——即通信的最底层结构,那主机与端口就相当于区号和电话号码的一对组合。一个因特网地址由网络通信必须的主机与端口组成。而且另一端一定要有人接听才行,否则会提示“对不起,您拨打的电话是空号,请查询后再拨”。同样你也可能会遇到如“不能连接该服务器、服务器无法响应”等。合法的端口范围是0~65535,其中小于1024端口号为系统保留端口。


    (三) 面向连接与无连接

    1.面向连接 TCP
    通信之前一定要建立一条连接,这种通信方式也被成为“虚电路”或“流套接字”。面向连接的通信方式提供了顺序的、可靠地、不会重复的数据传输,而且也不会被加上数据边界。这意味着,每发送一份信息,可能会被拆分成多份,每份都会不多不少地正确到达目的地,然后重新按顺序拼装起来,传给正等待的应用程序。

    实现这种连接的主要协议就是传输控制协议TCP。要创建TCP套接字就得创建时指定套接字类型为SOCK_STREAM。TCP套接字这个类型表示它作为流套接字的特点。由于这些套接字使用网际协议IP来查找网络中的主机,所以这样形成的整个系统,一般会由这两个协议(TCP和IP)组合描述,即TCP/IP。

    2.无连接 UDP
    无需建立连接就可以通讯。但此时,数据到达的顺序、可靠性及不重复性就无法保障了。数据报会保留数据边界,这就表示数据是整个发送的,不会像面向连接的协议先拆分成小块。它就相当于邮政服务一样,邮件和包裹不一定按照发送顺序达到,有的甚至可能根本到达不到。而且网络中的报文可能会重复发送。那么这么多缺点,为什么还要使用它呢?由于面向连接套接字要提供一些保证,需要维护虚电路连接,这都是严重的额外负担。数据报没有这些负担,所有它会更”便宜“,通常能提供更好的性能,更适合某些场合,如现场直播要求的实时数据讲究快等。

    实现这种连接的主要协议是用户数据报协议UDP。要创建UDP套接字就得创建时指定套接字类型为SOCK_DGRAM。这个名字源于datagram(数据报),这些套接字使用网际协议来查找网络主机,整个系统叫UDP/IP。


    (四) socket()模块函数

    使用socket模块的socket()函数来创建套接字。语法如下,其中socket_family不是AF_VNIX就是AF_INET,socket_type可以是SOCK_STREAM或者SOCK_DGRAM,protocol一般不填,默认值是0。

    • socket(socket_family, socket_type, protocol=0)

    创建一个TCP/IP套接字的语法如下:

    • tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    同样创建一个UDP/IP套接字的语法如下:

    • udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    由于socket模块中有太多属性,所以使用"from socket import *"语句,把socket模块里面的所有属性都带到命名空间中,大幅缩短代码。调用如下:

    • tcpSock = socket(AF_INET, SOCK_STREAM)

    下面是最常用的套接字对象方法:

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    提示:在运行网络应用程序时,如果能够使用在不同的电脑上运行服务器和客户端最好不过,它能让你更好理解通信过程,而更多的是localhost或127.0.0.1。


    (五) TCP通信实例

    1.服务器 tcpSerSock.py
    核心操作如下:
    在这里插入图片描述

    # -*- coding: utf-8 -*- 
    from socket import *
    from time import ctime
    
    HOST = 'localhost'          #主机名
    PORT =  21567               #端口号
    BUFSIZE = 1024              #缓冲区大小1K
    ADDR = (HOST,PORT)
    
    tcpSerSock = socket(AF_INET, SOCK_STREAM)
    tcpSerSock.bind(ADDR)       #绑定地址到套接字
    tcpSerSock.listen(5)        #监听 最多同时5个连接进来
    
    while True:                 #无限循环等待连接到来
        try:
            print('Waiting for connection ....')
            tcpCliSock, addr = tcpSerSock.accept()  #被动接受客户端连接
            print('Connected client from : ', addr)
    
            while True:
                data = tcpCliSock.recv(BUFSIZE)     #接受数据
                if not data:
                    break
                else:
                    print('Client: ',data)
                info = ('[%s] %s' %(ctime(),data))
                info = bytes(info, encoding = "utf8")
                tcpCliSock.send(info) #时间戳
    
        except Exception as e:
            print('Error: ',e)
    tcpSerSock.close()          #关闭服务器
    tcpCliSock.close()
    

    2.客户端 tcpCliSock.py
    核心操作如下:
    在这里插入图片描述

    # -*- coding: utf-8 -*- 
    from socket import *
    
    HOST = 'localhost'          #主机名
    PORT =  21567               #端口号 与服务器一致
    BUFSIZE = 1024              #缓冲区大小1K
    ADDR = (HOST,PORT)
    
    tcpCliSock = socket(AF_INET, SOCK_STREAM)
    tcpCliSock.connect(ADDR)    #连接服务器
    
    while True:                 #无限循环等待连接到来
        try:
            data = input('>')
            data = bytes(data, encoding = "utf8")
            print(data,type(data))
            if not data:
                break
            tcpCliSock.send(data)            #发送数据
            data = tcpCliSock.recv(BUFSIZE)  #接受数据
            if not data:
                break
            print('Server: ', data)
        except Exception as e:
            print('Error',e)
            
    tcpCliSock.close()          #关闭客户端
    

    由于服务器被动地无限循环等待连接,所以需要先运行服务器,再开客户端。又因为我的Python总会无法响应,所以采用cmd运行服务器Server程序,Python IDLE运行客户端进行通信。运行结果如下图所示:

    在这里插入图片描述

    另一种方法同时打开Python3.6和Python3.7进行通信,如下图所示。

    在这里插入图片描述

    建议创建线程来处理客户端请求,SocketServer模块是一个基于socket模块的高级别的套接字通信模块,支持新的线程或进程中处理客户端请求。同时建议在退出和调用服务器close()函数时使用try-except语句。

    那么,如何反弹shell程序呢?
    使用 from subprocess import Popen, PIPE 导入库,调用系统命令实现。核心代码如下,后续Windows漏洞复现深入讲解后,你就更好理解这部分代码了。

    在这里插入图片描述



    五.总结

    希望这篇文章对你有所帮助,这是Python黑帽第二篇博客,后续作者也将继续深入学习,制作一些常用的小工具供大家交流。最后,真诚地感谢您关注“娜璋之家”公众号,也希望我的文章能陪伴你成长,希望在技术路上不断前行。文章如果对你有帮助、有感悟,就是对我最好的回报,且看且珍惜!再次感谢您的关注,也请帮忙宣传下“娜璋之家”,哈哈~初来乍到,还请多多指教。

    前文:

    三尺讲台,三寸笔,三千桃李。
    十年树木,十年风,十万栋梁。
    祝天下所有老师节日快乐,也是自己第五个教师节。从我们家女神2011年去山村支教,到我2014年走上支教的讲台,再到2016年真正成为大学老师,感恩这一路走来,也祝女神和我节日快乐,感谢所有人的祝福和帮助。

    无论未来是否继续当老师,秀璋都会一直牢记当老师的那份美好,记住分享知识的魅力,记住你们脸上洋溢着灿烂的笑容,我也会线上分享更好的文章,真心希望帮助更多人,把这些年所学所做分享出来。不忘初心,感恩前行。真是奇幻,师范出身的她没成为老师,程序猿却去教书了,哈哈!

    在这里插入图片描述

    (By:娜璋AI安全之家 Eastmount 2020-09-11 夜于武汉)


    参考文献:

    展开全文
  • python做个九九乘法表-够简单,能学会

    万次阅读 多人点赞 2020-12-17 08:40:00
    学习研究太困难,会阻碍我们学习的信心 今天教大家写点简单的小案例,巩固自己的基础知识 加油少年,写够5000行 基础过关 首先,我们来回忆一下99乘法表长什么样子吧 image 进入正题:实现99乘法表 你学到 ...

    学pyhon 大部分同学都感觉一学就懂,自己写就废了。主要还是代码写的少了。
    太复杂的项目,学习研究太困难,会阻碍我们学习的信心
    今天教大家写点简单的小案例,巩固自己的基础知识
    加油少年,写够5000行   基础过关

    首先,我们来回忆一下99乘法表长什么样子吧

    image

    进入正题:实现99乘法表

    你能学到

    • for 循环

    • range函数

    • format 格式字符串

    • print 函数

    源代码

    # 外层for循环代表打印9行
    for i in range(1, 10):
         # 内层for循环打印列
         # 第一行1列,第而行2列,以此类推
        for j in range(1, i+1):
            # 格式化 输出{行}x{列}={行乘列}
            print('{}x{}={}\t'.format(j, i, i*j), end='')
        print()
    

    结果

    九九乘法表

    前备知识分解

    range

    python range() 函数可创建一个整数列表,一般用在 for 循环中。
    函数语法

    range(start, stop[, step])
    

    start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
    stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
    step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

    举例

    >>>range(10)        # 从 0 开始到 10
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> range(1, 10)     # 从 1 开始到 10
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    format

    str.format(),它增强了字符串格式化的功能。
    基本语法是通过 {}
    举例

    "{}--{}".format("hello", "world")    
    # 不设置指定位置,按默认顺序
    'hello--world'
    

    for循环

    这里用一个动图演示for循环

    for循环.gif


    九九乘法表分解

    输出0-9

    for i in range(1, 10):
        print(i)
    

    输出结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    

    1到9不换行

    print默认执行就会以换行结尾
    有个end参数,告诉print函数以 空字符串结尾  (输出不换行)

    for i in range(1,10):
        print(i,end='')
    

    输出结果

    123456789
    

    有缩进

    在python 字符串中 \t 代表一个tab缩进

    for i in range(1,10):
        print(i,"\t",end='')
    

    输出结果:¨G9G **有缩进 第二个写法** ¨G10G
    输出结果还是一致的:

    1     2   3   4   5   6   7   8   9   
    

    嵌套输出

    嵌套:想象为一个表格外层for 代表行(9行),内容for代表列 (9列
    外层用print()换行

    for i in range(1,10):
        for j in range(1,10):
            print("{}\t".format(j),end='')
        print()
    

    结果

    1    2   3   4   5   6   7   8   9   
    1    2   3   4   5   6   7   8   9   
    1    2   3   4   5   6   7   8   9   
    1    2   3   4   5   6   7   8   9   
    1    2   3   4   5   6   7   8   9   
    1    2   3   4   5   6   7   8   9   
    1    2   3   4   5   6   7   8   9   
    1    2   3   4   5   6   7   8   9   
    1    2   3   4   5   6   7   8   9   
    

    输出乘表

    在这里 i 代表 行 j 代表列,通过format 输出乘法表

    for i in range(1,10):
        for j in range(1,10):
            print("{}×{}={}\t".format(i,j,i*j),end='')
        print()
    

    结果:

    1×1=1    1×2=2   1×3=3   1×4=4   1×5=5   1×6=6   1×7=7   1×8=8   1×9=9   
    2×1=2    2×2=4   2×3=6   2×4=8   2×5=10  2×6=12  2×7=14  2×8=16  2×9=18  
    3×1=3    3×2=6   3×3=9   3×4=12  3×5=15  3×6=18  3×7=21  3×8=24  3×9=27  
    4×1=4    4×2=8   4×3=12  4×4=16  4×5=20  4×6=24  4×7=28  4×8=32  4×9=36  
    5×1=5    5×2=10  5×3=15  5×4=20  5×5=25  5×6=30  5×7=35  5×8=40  5×9=45  
    6×1=6    6×2=12  6×3=18  6×4=24  6×5=30  6×6=36  6×7=42  6×8=48  6×9=54  
    7×1=7    7×2=14  7×3=21  7×4=28  7×5=35  7×6=42  7×7=49  7×8=56  7×9=63  
    8×1=8    8×2=16  8×3=24  8×4=32  8×5=40  8×6=48  8×7=56  8×8=64  8×9=72  
    9×1=9    9×2=18  9×3=27  9×4=36  9×5=45  9×6=54  9×7=63  9×8=72  9×9=81  
    

    我们发现乘法表多了一半
    这个好办,咱们每列循环的次数不大于 行数
    第一行的时候  只有一列
    第二行的时候 只有 二列
    第三行的时候 只有三列
    ….
    第就行的时候 只有九列
    关键就是range的第二个参数 值为i+1

    for i in range(1,10):
        for j in range(1,i+1):
            print("{}×{}={}\t".format(i,j,i*j),end='')
        print()
    

    最终结果为:

    1×1=1    
    2×1=2    2×2=4   
    3×1=3    3×2=6   3×3=9   
    4×1=4    4×2=8   4×3=12  4×4=16  
    5×1=5    5×2=10  5×3=15  5×4=20  5×5=25  
    6×1=6    6×2=12  6×3=18  6×4=24  6×5=30  6×6=36  
    7×1=7    7×2=14  7×3=21  7×4=28  7×5=35  7×6=42  7×7=49  
    8×1=8    8×2=16  8×3=24  8×4=32  8×5=40  8×6=48  8×7=56  8×8=64  
    9×1=9    9×2=18  9×3=27  9×4=36  9×5=45  9×6=54  9×7=63  9×8=72  9×9=81  
    

    动图展示九九乘法表执行过程

    九九乘法表.gif

    - EOF -

    推荐阅读  点击标题可跳转

    Python100行-贪吃蛇小游戏

    用python打包exe应用程序-PyInstaller

    20行python代码的入门级小游戏

    10行python代码做出哪些酷炫的事情?

    一行Python代码能做出哪些神器的事情

    都来到这了,我需要你的点赞支持 

    展开全文
  • Python入门教程 1小时学会Python
  • Y分钟学会Python

    2015-03-14 08:37:44
    Y分钟学会Python,适合新手学习,对python有个初步了解。
  • 1、学会Python就可以从事游戏脚本的工作吗? 2、脚本开发只需要学习Python这一门语言吗? 3、游戏脚本开发需要掌握什么知识? 带着这三个质疑,小会就来给大家科普一下,接着往下看吧。 如果你就是铁了心非要走游戏...
  • 原标题:学Python的人,做什么工作最赚钱?Python太火了!成为大家都争相学习的热门计算机语言。学完Python,到底什么工作什么岗位赚钱最多?听小编帮大家慢慢盘点一下。1、学习Python的未来前景《中国人工...
  • 10张动图学会python循环与递归

    万次阅读 多人点赞 2020-12-19 08:43:00
    图像(包括动图)是传递信息的一种高效方式,往往增强表象、记忆与思维等方面的反应强度。所谓一图胜千言,说的就是这个道理。今天为大家整理了十张动图GIFS,有助于认识循环、递归、二分检索等...
  • python可以那些工作

    千次阅读 2019-03-03 18:48:27
    学会python可以有以下的几个方面的工作: 1,python游戏开发师。游戏不用说,很多人都玩的。游戏后端的的逻辑代码的开发和处理,对数据库的操作等,都可以用到这个语言。 2,web网站方向:需要熟悉django,flask等...
  • Python入门教程超详细1小时学会Python.docx
  • 一张图学会Python,一张图学会Python,一张图学会Python
  • Python入门教程_超详细1小时学会Python for junior learning
  • 原标题:一张图带你学会Python,学习Python的非常简单,附教程 网上有这样一张图片,信息量很大,通常会被配上标题"一张图让你学会Python” 这张图流传甚广,但我没有找到明确的出处,图片上附带了 UliPad 的...
  • 30秒内便能学会的30个超实用Python代码片段

    万次阅读 多人点赞 2019-10-10 12:00:00
    许多人在数据科学、机器学习、web开发、脚本编写和...本文将简要介绍30个简短的、且在30秒内掌握的代码片段。 1. 唯一性 以下方法可以检查给定列表是否有重复的地方,可用set()的属性将其从列表中删除。 ...
  • Python入门教程-超详细1小时学会Python.pdf
  • a=11 if a==11: print("a是等于11")

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 95,389
精华内容 38,155
关键字:

学会python能做什么工作

python 订阅