上周从零学习了golang,语法简单关键字少,写个爬虫熟悉一下语法结构。
首先选用了原生的net/http包,基本上涵盖了所有的get/post请求,各种参数都可以设置,网上google到html页面解析goquery神器,很轻松就可以解决页面解析问题。
首先就写了个爬取汇率的爬虫。然后重写之前php的一个请求类,请求类的逻辑有点混乱不清晰,往往把两个不同的功能合并到一起写,粒度大,后来发现了一个好用的框架——colly,之后再试试好不好用
Windows 10 Golang
依赖包:goquery
较常用的方法有Find和Each
爬取中国银行的汇率牌价表,golang依赖net/http包和goquery包
唯一的难点是对于goquery方法的使用,需要阅读官方文档:
https://godoc.org/github.com/PuerkitoBio/goquery
使用原生的net/http包基本上可以解决大多数的网页请求,使用goquery可以解决页面解析问题
可以利用golang的协程特性进行异步多协程爬取
增加安全性可以通过几个方面进行改进:
1.首先可以限制爬虫的爬取速度
2.每次对网页的请求都随机选用一个客户端
3.选用IP代理池,防止IP误封(及限制ip访问次数)
构造请求代理ip网站的链接→获取网页内容→ 提取网页中IP地址和端口号→验证IP的有效性并存储
轻量级反爬虫方案
浅谈JSP
golang带json的Http请求
Get/Post
HTTP请求中的Form Data和Request Payload的区别
HTTP Json请求
https://zhuanlan.zhihu.com/p/32825491
https://blog.csdn.net/yang731227/article/details/83900422
net/http: https://studygolang.com/articles/9467
golang HTTP操作
python建立爬虫代理ip池
爬虫黑科技之让你的爬虫程序更像人类用户的行为
特点:事件监听,通过callback执行事件处理
基于colly开发的web管理界面
怎么学python
俗话说得好,“摩天大楼从地起”,学习任何编程语言都一定要把该语言的基础打牢,而怎么打地基呢?秘诀只有一条:多敲代码多敲代码多敲代码。学习前期建议找一本讲python基础的书或博客,把里面的例题跟着操作一遍,在基础打扎实后,可上一些比较出名的竞赛项目的网站如kaggle等,通过做项目去巩固知识。
推荐书籍:《Python基础教程(第3版)》Magnus Lie Hetland著
推荐理由:全面介绍了Python的基础知识、基本概念,高级主题,还有Python程序测试、打包、发布等知识,及10个具有实际意义的Python项目的开发过程,涉及的范围较广,既能为初学者夯实基础,又能帮助程序员提升技能,适合各个层次的Python开发人员阅读参考。
基础知识
代码规范
1. 缩进
相比于其他语言用大括号和end来标识代码块,python语言比较“独特”,其通过代码的缩进来标识所属代码块,通常4个空格为一个缩进,可用tab键实现。缩进是python代码的重要组成部分,若你的代码缩进格式不正确,如同一段代码块语句缩进不一致,首句未顶格等,都会运行出错。
#一个完整的语句首句要顶格
i=0
#同一代码块的语句应缩进一致
for i in range(5):
print(i)
i+=1
2. 注释
编程语言的注释,即对代码的解释和说明。给代码加上注释,可提高代码的可读性,当你阅读一段他人写的代码时,通过注释迅速掌握代码的大致意思,读起代码将更加得心应手。
python语言的注释分为单行注释和多行注释,在注释符后的内容计算机会自动跳过不去执行。
单行注释:在需注释语句前加“#”,可在代码后使用,也可另起一行使用
i=1 #在代码后使用注释
#另起一行使用注释
多行注释:在语句开头和结尾处加三个单引号或三个双引号(前后须一致)
'''
使用单引号的多行注释
'''
"""
使用双引号的多行注释
"""
使用注释除了起到望文生义,迅速了解代码意思的作用外,还有一个小妙处,可以将某段未完成或需要修改的代码隐蔽起来,暂时不让计算机执行。
3. 多行语句
python中默认以行结束作为代码结束的标记,而有时候为了阅读方便,我们需要将一个完整代码跨行表示,这时候我们可以使用续行符:反斜杠“\”来将一行语句分为多行显示:
score = eng_score + \
math_score + \
his_score
注意:若语句中使用大括号{}、中括号[]或小括号()将数据括起来,则不需要使用续行符,如下所示:
name=['Ada','Ailsa','Amy',
'Barbara','Betty','Blanche'
'Carina','Carrie','Carry'
'Daisy','Darcy','Diana']
什么是算法
在学习使用python之前,要先明确使用python的目的是什么?作为一名数据分析工作者,我们并不需要使用python语言来设计程序,只需要使用python来完成算法的实现。那么算法又是什么呢?
算法是指解决某项问题的流程或步骤,我们可以用一个很贴近生活的例子去理解,假如你需要做一道“西红柿炒鸡蛋”,根据菜谱:先准备食材,然后下油热锅,将西红柿倒进去翻炒后,加入蛋液翻炒至熟。
这就是我们完成“西红柿炒鸡蛋”这道菜所用的“算法”,而完成这个算法所需要的就是原料和操作说明,下面来看看原料和说明是什么。
Python语言中的“原料”即对象,在python里万物皆对象,而对象通过引用变量唯一存在,引用上面的例子,可以将”鸡蛋”理解为”对象”,而给它取的名字”小红家鸡生的蛋”则是”变量”。
变量的概念想必大家不会陌生,和中学方程中学的变量基本上是一致的.变量可以理解为对事物的一个代号或者贴的一个标签,是一个可重复使用的量而不同于方程中的变量,编程语言中的变量不仅仅是数值型, 还可以是字符型、逻辑型等其他数据类型。
1. 变量的性质
先定义后使用在python中引用变量需要先定义,否则会报错,但与其他编程语言如C语言不同,python定义变量不需要事先定义变量类型,变量类型随变量所赋值的类型决定可重复赋值及运算在python中变量可以重复赋值使用,变量间也可相互赋值,同时可以对变量进行运算操作#变量可重复赋值
i=2
i=3
#可对变量做运算
i+1
#查看变量的数据类型
type(a)
2. 变量的命名规则
只能包含:数字、字母、下划线不能以数字开头,不能包含python保留字、关键字、函数名慎用小写字母l和大写字母O, 避免与数字1和0混淆建议用驼峰命名法,即以单词加“"命名,如:studentname#查看python有哪些保留字
import keyword
print(keyword.kwlist)
3. 变量的赋值
基本赋值在python中,我们使用“=”对变量进行赋值,如“x=3"。这里要注意,数据和变量是分开存储的,即在内存中先建立数据“3”,然后建立一个标记“x”,再将x指向内存中的值。若重新对变量x赋值为“2”,实质上是修改了数据的引用,变量x重新指向内存中的数据“2”。
多重赋值对同一对象可以引用多个变量,例如一个人可以有多重身份,Mr Li 是一位父亲,同时也是一位教师,不同的变量,实质指向的对象是同一事物。father = teacher = 'Mr Li'
多元赋值对多个变量同时赋值,等号两边可加括号可不加a,b,c=1,2,3
(a,b,c)=(1,2,3)
语句
了解完算法中的“原料”,我们再来看看算法中的“操作说明”是什么呢?算法中的“操作说明”可以说是算法的“灵魂”,就好像一道菜完成的作品如何,很大程度取决于厨师的厨艺(即做菜秘籍)。构成算法“操作步骤”的是语句,其中包含python的基本语句和控制流程语句。控制流程语句的语法相对较复杂,在后面的文章再继续介绍,我们先认识一下python的基本语句:
其实前面我们已经接触过python的基础语句:赋值语句,赋值语句较简单不展开介绍,下面主要介绍python另一个使用特别广泛的基础语句:输出与输入语句。
1. 输出语句
python中输出值的方式主要有两种:表达式和print( )函数,两者的区别在于,表达式输出的结果为一个python对象,而在实际运用中,为方便阅读,通常需要按照一定格式输出结果,print( )函数就很好地解决此问题。
print( )语法:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
print( )参数:
objects -- 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。sep -- 用来间隔多个对象,默认值是一个空格。end -- 用来设定以什么结尾。默认值是换行符 “\n”,可换成其他字符串。file -- 要写入的文件对象。flush -- 输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。#打印多个值,设置中间分隔符为“-”
print("广州","上海","深圳",sep="-")
#先以默认结尾符"\n"输出,再以结尾符设置为“-”,注意区别二者区别
print("广州")
print("上海")
print("深圳")
print("广州",end="-")
print("上海",end="-")
print("深圳",end="-")
以上代码实行结果为:
2. 输入语句
在python中获取键盘输入数据的函数是input()函数,input函数会自动将输入的数据转为字符串类型,并自动忽略换行符,同时可给出提示字符串。如果需要得到其他类型的数据,可对其进行强制性类型转换。
input( )语法:
input([prompt])
input( )参数:
prompt: 给输入者的提示信息,可选参数age=input("请输入您的年龄:")
不是啊,都可以啊,比如C(万能的啥都可以做),C++(也基本是万能的,爬虫不算啥),python(简单,几十行代码能搞定一个小型爬虫),go当然也可以。没有限制的!
希望我的回答对你有帮助望采纳!