本章主要讲的是基于Python语言的数据采集,该功能要讲起来可以单独作为一门课程来学习,因为这是一门很重要的课程,一般运用在大数据处理和人工智能上,该应用提供大量的数据。

12.1 urllib模块的学习

urllib模块是python提供给我们操作互联网的模块。接下来我们可以简单的操作一下,爬取一个网页的源代码,其实就是审查元素的操作。urllib中分为四部分:1.request 2.error 3.parse 4.robotparser

request是urllib中最重要的也是最复杂的。

# 网络爬虫
# 导入模块
import urllib.request as req
# 爬取该地址的网页源码
res=req.urlopen(r"https://www.baidu.com")
# 从爬取的内容中读取信息
html=res.read()
# 读取的信息是字节,需要通过编码格式的转换,才能获得和网页上审查元素的源代码一致
html=html.decode("UTF-8")
print(html)

输出结果:

12.2 实战

12.2.1 爬取图片

这里我们来访问一下百度图片,其网站效果如图:

那我们一般想要某张图片,需要把鼠标移动到图片上点击右键,然后图片另存为……到我们电脑的指定的磁盘路径下。接下来看看我们python怎么通过代码来爬取想要的图片。我们先来看看这个图片对应的访问地址,右键复制图片访问地址,粘贴到地址上访问一下,是否能正常访问

即通过地址的访问,可以查看某一张图片,那么我们来通过python爬虫来爬取这张图片。

# 导入模块
import urllib.request as req
#指定猫的访问地址
res=req.urlopen("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F1113%2F052420110515%2F200524110515-2-1200.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1662537204&t=69f97612ad5cfcc28f60537007447873")
# 将猫图片读取,字节保存
cat_img=res.read()
# 指定一个本地路径,用于存储图片,并允许写入字节
f=open("cat_200_287.jpg","wb")
#将图片存储
f.write(cat_img)

执行完成后,可发现项目路径下已经将该图片爬取了。

12.2.2 在线文本翻译

打开浏览器访问有道翻译的网站在线翻译_有道

接着我们右键审查元素,切换到network,查看其网络的请求和响应信息

单击这个响应请求,查看其翻译信息

查看响应头信息

浏览器一般通过以下信息来判断是否是机器访问,而非人为正常操作。

如果使用python访问的该地址的话,User-Agent会被定义为Python-urllib/版本号

刚通过观察浏览器的返回结果:{"errorCode":0,"translateResult":[[{"tgt":"I'm a teacher","src":"我是一名老师"}]],"type":"zh-CHS2en"}

那么这个格式是json格式,由{}和[]混合使用构建成,中间形成键值对并以冒号隔开key和value。

# -*- coding:utf-8 -*-'''使用 POST 方式抓取 有道翻译urllib2.Request(requestURL, data=data, headers=headerData)Request 方法中的 data 参数不为空,则默认是 POST 请求方式如果 data 为空则是 Get 请求方式{"errorCode":50}错误:有道翻译做了一个反爬虫机制,就是在参数中添加了 salt 和 sign 验证,具体操作说明参考:http://www.tendcode.com/article/youdao-spider/'''import urllib.request
import urllib.parseimport timeimport randomimport hashlibimport sys# 字符串转 utf-8 需要重新设置系统的编码格式def reload(sys):sys.setdefaultencoding('utf8')# 目标语言targetLanguage = 'Auto'# 源语言sourceLanguage = 'Auto'headerData = {'Cookie': 'OUTFOX_SEARCH_USER_ID=-2022895048@10.168.8.76;','Referer': 'fanyi.youdao.com','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}# 语言类型缩写languageTypeSacronym = {'1': 'zh-CHS 》 en','2': 'zh-CHS 》 ru','3': 'en 》 zh-CHS','4': 'ru 》 zh-CHS',}# 翻译类型translateTypes = ['中文 》 英语','中文 》 俄语','英语 》 中文','俄语 》 中文'
]
def startRequest(tanslateWd):requestURL = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'client = 'fanyideskweb'timeStamp = getTime()key = 'ebSeFb%=XZ%T[KZ)c(sy!'sign = getSign(client, tanslateWd, timeStamp, key)data = { 'i': tanslateWd,'from':sourceLanguage,'to':targetLanguage,'client':client,'doctype':'json','version':'2.1','salt':timeStamp,'sign':sign,'keyfrom':'fanyi.web','action':'FY_BY_REALTIME','typoResult':'true','smartresult':'dict'}data = urllib.parse.urlencode(data).encode(encoding="utf-8")request = urllib.request.Request(requestURL, data=data, headers=headerData)resonse = urllib.request.urlopen(request)print(resonse.read().decode("utf-8"))# 生成时间戳def getTime():return str(int(time.time() * 1000) + random.randint(0, 10))# 生成 Signdef getSign(client, tanslateWd, time, key):s = client + tanslateWd + time + keym = hashlib.md5()m.update(s.encode('utf-8'))return m.hexdigest()def getTranslateType(translateType):global sourceLanguage, targetLanguagetry:if translateType:l = languageTypeSacronym[translateType].split(' 》 ')sourceLanguage = l[0]targetLanguage = l[1]except:print('翻译类型选择有误,程序将使用 Auto 模式为您翻译')if __name__ == '__main__':print('翻译类型:')for i, data in enumerate(translateTypes):print('%d: %s' %(i + 1, data))translateType = input('请选择翻译类型:')getTranslateType(translateType)tanslateWd = input('请输入要翻译的消息:')startRequest(tanslateWd)

【Python】第十二课 网络爬虫相关推荐

  1. 十二、Python第十二课——函数

    (请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目录 (请先看置顶博文)https://blog.csd ...

  2. Python可以这样学(第十季:网络爬虫实战)-董付国-专题视频课程

    Python可以这样学(第十季:网络爬虫实战)-83人已学习 课程介绍         陆续介绍和分享一些网络爬虫方面的案例,Python基础知识可以参考前面的"Python可以这样学&qu ...

  3. python血条游戏代码_零基础快速学十二课Python完整游戏代码,使用「格式符%」来处理...

    十二课Python不同数据类型的拼接方式,使用[格式符%]来处理 不过它还没有全部解决:打印出每局结果,三局两胜打印最终战果.这就是版本3.0需要做的事情. 打印战果,三局两胜. 对比2.0版本,在3 ...

  4. Kali Linux Web 渗透测试— 第十二课-websploit

    Kali Linux Web 渗透测试- 第十二课-websploit 文/玄魂 目录 Kali Linux Web 渗透测试- 第十二课-websploit..................... ...

  5. python第二十九课——文件读写(复制文件)

    自定义函数:实现文件复制操作有形参(2个) 没有返回值相似版(不用) def copyFile(src,dest):#1.打开两个文件:1个关联读操作,1个关联写操作fr=open(src,'rb') ...

  6. C#之windows桌面软件第十二课:电脑ADC值显示(上位机),记忆上次串口号,并用TrackBar控件显示ADC值

    C#之windows桌面软件第十二课:电脑ADC值显示(上位机),记忆上次串口号,并用TrackBar控件显示ADC值 using System; using System.Collections.G ...

  7. NeHe OpenGL第三十二课:拾取游戏

    NeHe OpenGL第三十二课:拾取游戏 拾取, Alpha混合, Alpha测试, 排序: 这又是一个小游戏,交给的东西会很多,慢慢体会吧   欢迎来到32课. 这课大概是在我所写作已来最大的一课 ...

  8. Python自动化(十二):一分钟搞定几百个Excel中查找的数据

    一.需求说明 首先我们来看下今天的需求,有一份档案记录总表的Excel工作簿, 每天会根据当天日期建立新表,每天的表格内包含所有档案信息,同时也有可能会添加新的档案名.同个年度的总表在年末可能会有两. ...

  9. 《SQL必知必会》学习笔记——第十二课 连结表

    第十二课 连结表 一.创建连结 SELECT inf.id, age, rank FROM inf,score WHERE inf.id = score.id; 注意 WHERE inf.id = s ...

最新文章

  1. Java基础-Date类常用方法介绍
  2. 分隔单词和标点符号示例
  3. VirtualBox下安装Ubuntu Server 16.04
  4. SecureCRT中的实用配置
  5. Oracle中通过存储过程,Function,触发器实现解析时间类型的字段并插入的对应的数据表中...
  6. CSS笔记-除了a标签外的hover属性的应用
  7. 【引用】URLDownloadToFile_VB下载文件!
  8. 【关系抽取】详聊如何用BERT实现关系抽取
  9. 震惊!人工智能已经发展到这个地步了
  10. 矩阵分析(三):矩阵的列空间、行空间与零空间
  11. 嵌入式开发与单片机开发有什么区别
  12. ChIP-seq 数据分析
  13. CAD学习笔记中级课【模板样式】
  14. miniblink每日最新下载地址
  15. webview 支付宝、微信支付 QQ登录
  16. 田忌赛马 - 动态规划
  17. html怎么设置下外边距,cssmargin外边距属性与用法总结
  18. 大数据解读:穹顶之下,谁在关注雾霾
  19. 教你怎么一下哄好赌气的女朋友​
  20. Golang 数组的一些自问自答

热门文章

  1. 实战:NodeLocal DNSCache安装-2023.2.23(测试成功)
  2. python逗号怎么用_Python中逗号的三种作用实例分析
  3. 讯飞小车比赛语音控制(基础)
  4. Python实现 图书馆管理系统
  5. echarts实现单个城市下所有区域地图
  6. hydd的Linux笔记Day72
  7. python sum函数导入list_python sum函数怎么用
  8. 小东吖 之 java 泛型
  9. 软件工程方法论对我们软件开发有多大用处?
  10. koa cookie