前言
- 本篇结尾Demo是用python做出在线翻译小程序,适合零基础,不适合没有语言基础,这里需要指出的是不是只有python才能实现爬虫,如果现在的你熟悉另一门语言,不妨通过读完本篇文章理解一些基础知识然后试试该语言对应的操作,只是说目前为止,只有python操作爬虫操作比较方便;
基本知识
- python的常见的基本数据类型
- 字符串,数字,列表,元组,字典;
- 数字类型:num = 521 pi = 3.1415926(也就是直接指定数据类型)
- 列表数据类型(list):可以同时将多个不同数据类型不同数据放在一个变量中, arr = [‘I love you’ ,521,3.1415926]
- 字典数据类型(dict):可以理解为键值对(key==>value),zhangsan = {‘name’:‘张三’,‘age’ : ‘20’,‘sex’ : ‘男’}
- 注释符号 “#” 多行注释” ‘’’ 注释内容 ‘’’ “
- 部分基本函数
- 输出打印print() # python3版本以上的;
- type() # 输出查看变量数据类型 ;
- 对于python的程序,我们要注意该语法没有{}这种作用域的存在,它的作用域可以简单的理解为在不在一列上,即通过缩进观察,我们在换行的时候推荐都用tab,而不是敲空格,从而减少后续代码问题;
python的流程控制和函数
流程
- 顺序结构:代码从上向下执行的顺序
- 分支结构:需要不同流向的代码执行顺序
下面展示一些 内联代码片
。
基本分支结构:
if 条件判断:
条件成立
else:
条件不成立
- 循环结构:代码不停的,反复的去执行;
- 这里介绍两种方法
- 第一种print(‘i love you’ *100),第二种:
arr = range(1,101)
for i in arr:
print(i)
函数
- 函数:就是封装的一个代码块,通过一定参数实现某一类功能,提高代码利用率,一般 需要调用才能执行,不然不执行
- python中定义方法的格式:
通过def关键字实现,下面是一个加法举例
def add(n1,n2):
print(n1+n2)
认识爬虫
- 爬虫可以理解为是执行数据抓取的一种操作,从互联网上抓取想要的数据
- web与http:
- web可以理解为网站,给用户展现数据的地方
- http是网络协议,https是在http基础上实现加密
- url 统一资源定位符,浅陋的可以理解为一个链接
- 域名:类似于www.bui.com
爬虫的流程步骤
- 明确需求
- 根据需求,寻找对应的Web网址(url)
- 写python程序模拟浏览器去访问对应的网址(我们需要了解的是,在我们使用浏览器访问百度或者其他网址的时候,我们是先把请求发送到对应的人家的服务器中,然后人家的服务器给我们返回html文档,至于什么是html文档,你可以理解为你在浏览器看到页面的底层实现代码,或者说专门用来写Web页面的一门文本标记语言)
- 获取服务器返回的源代码(html,json,xml)
- 根据返回的源代码提取需要的数据(方法有正则,xpath,bs4,pyquery,,,,)
- 把数据存储整理
开发翻译小程序
基本概念
- 目标工具:XX翻译;
- 开发者工具介绍:在浏览器页面中按键盘F12键快速启动或者右键页面空白处点击检查;我们找到network(网络请求)
- XHR:Web里面的一个无刷新加载技术,这种技术称为ajax,产生的对象是XmlHttpRequest(XHR)
- 请求方式:常见的是get/post
- 除了要了解上图的几个知识点,我们还要知道Form data;
- response是返回的响应内容(json数据),有点像python中的字典的数据类型,但是不是,它的好处是拿到可以直接用,这个响应内容指的是服务器的响应内容哈json,json;
- reposne Header:里面的数据是服务器响应后附带的数据
- requeset Header(用来标识用户身份):里面的数据是你发送请求时附带的数据
- 如果没有User Agent这条数据,服务器会知道你可能是爬虫,不会返回数据给你
安装requests库
- windows : 打开cmd窗口(快捷键:win+R键,输入cmd回车),在这个黑黑的窗口中(dos环境)输入pip install requests
- Mac/Linux系统:打开终端输入pip3 install requests
- 等一会之后就可以安装完成了
执行代码
import requests
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
headers = {
'Referer': 'http://fanyi.youdao.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'
}
data = {
'i':'hello',
'from':' AUTO',
'to':' AUTO',
'smartresult':' dict',
'client':' fanyideskweb',
'salt':' 15942614224529',
'sign':' 312f01fe7cedcbff7b2d44ca201255e7',
'ts':' 1594261422452',
'bv':' ca3dedaa9d15daa003dbdaaa991540d1',
'doctype':'json',
'version':' 2.1',
'keyfrom':' fanyi.web',
'action':' FY_BY_REALTlME'
}
response = requests.post(url=url,headers=headers,data=data)
if response.status_code == 200:
print('请求成功')
print(response.json)
else:
print('请求失败')
- 解决上面的问题,就是把data中的参数全部删除,只保留’i’和’doctype’,同时把url中的_o去掉(去掉之后这个链接就是有道过去没有加密的版本链接了,这里采用的是取巧,至于怎么实在的解密,后续再说)
- 然后将图中内容置换成res_data = response.json() print(res_data[‘translateResult’][0][0][‘tgt’])
- 然后通过更改”i“值基本就可以运行了,不过这样比较麻饭,怎么简便呢,能让他输入一个,翻译一个,我们可以采取循环的方式:
即我们封装该方法
def fanyi(kw):
import requests
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
headers = {
'Referer': 'http://fanyi.youdao.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'
}
data = {
'i':f'{kw}',
'doctype':'json'
}
response = requests.post(url=url,headers=headers,data=data)
if response.status_code == 200:
print('请求成功')
res_data = response.json()
print(res_data['translateResult'][0][0]['tgt'])
else:
print('请求失败')
while True:
kw =input('请输入你想翻译的内容')
fanyi(kw)
总结:
- 本篇文章其实主要还是作为练手,或者照顾没有python基础的小朋友,一点一点来,后面还会再分享怎么去爬网站的数据以及和存储数据,再以及怎么可视化数据生成词云等。