• 爬虫准备工作
  • 爬虫简介
  • urllib

详细可点击 --> python爬虫教程中转站 欢迎大家的订阅!!!

爬虫准备工作

  • 参考资料

    • python网络数据采集 ’ 图灵工业出版
    • 精通python爬虫框架Scrapy ’ 人民邮电出版社
    • python3网络爬虫
    • Scrapy官方教程
  • 前提知识
    • url
    • http协议
    • web前端 ’ html, css, js
    • ajax
    • re, xpath
    • xml

爬虫简介

  • 爬虫定义:网络爬虫(又被称为网页蜘蛛、网络机器人,在FOAF社区中间,更经常的称为网页追逐者),
    是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本
    另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫

  • 两大特征

    • 能按作者要求下载数据或者内容
    • 能自动在网络上流窜
  • 三大步骤

    • 下载网页
    • 提取正确的信息
    • 根据一定规则自动跳到另外的网页上执行上两步内容
  • 爬虫分类

    • 通用爬虫
    • 专用爬虫(聚焦爬虫)
  • Python网络包简介

    • python2.x:urllib,urllib2,urllib3,httplib,httplib2,requests
    • python3.x:urllib,urllib3,httplib2,requests
    • python2:urllib和urllib2配合使用,或者requests
    • python3:urllib,requests

urllib

  • 包含模块

    • urllib.request: 打开和读取urls
    • urllib.error: 包含urllib.request产生的常见的错误,使用try捕捉
    • urllib.parse: 包含解析url的方法
    • urllib.robotparse: 解析robots.txt文件
    • 案例v01
    '''
    案例v01
    使用urllib.request请求一个网页内容,并把内容打印出来
    '''
    from urllib import requestif __name__ == '__main__':url = "https://www.zhaopin.com/taiyuan/"# 打开相应url并把相应页面作为返回rsp = request.urlopen(url)# 把返回的结果读取出来# 读取出来内容类型为byteshtml = rsp.read()print(type(html))# 如果想把bytes内容转换成字符串,需要解码print(html.decode())
    
  • 网页编码问题解决
    • chardet 可以自动检测页面文件的编码格式,但是,可能有误
    • 需要安装,conda install chardet
    • 案例v02
    '''
    案例v02
    利用request下载页面
    自动检测页面编码'''
    import urllib
    import chardetif __name__ == '__main__':url = "http://stock.eastmoney.com/news/1407,20170807763593890.html"rsp = urllib.request.urlopen(url)html = rsp.read()# 利用chardet自动检测cs = chardet.detect(html)print(type(cs))print(cs)# 使用get取值保证不会出错html = html.decode(cs.get("encoding", "utf-8"))print(html)
    
  • urlopen的返回对象
    • 案例v03
    # 案例v03
    import urllib
    import chardetif __name__ == '__main__':url = "http://stock.eastmoney.com/news/1407,20170807763593890.html"rsp = urllib.request.urlopen(url)print(type(rsp))print(rsp)print("URL: {0}".format(rsp.geturl()))print("Info: {0}".format(rsp.info()))print("Code: {0}".format(rsp.getcode()))html = rsp.read()# 使用get取值保证不会出错html = html.decode()
    
    • geturl: 返回请求对象的url
    • info:请求反馈对象的meta信息
    • getcode:返回http code
  • request.data 的使用
    • 访问网络的两种方法

      • get:

        • 利用参数给服务器传递信息
        • 参数为dict,然后用parse编码
        • 案例v04
         # 案例v04from urllib import request, parse'''掌握对url进行参数编码的方法需要使用parse模块 '''if __name__ == '__main__':url = "http://www.baidu.com/s?"wd = input("Input your keyword: ")# 要想使用data,需要使用字典结构qs = {"wd": wd}# 转换url编码qs = parse.urlencode(qs)print(qs)fullurl =url + qsprint(fullurl)# 如果直接用可读的带参数的url,是不能访问的# fullurl = "http://www.baidu.com/s?wd=大熊猫"rsp = request.urlopen(fullurl)html = rsp.read()# 使用get取值保证不会出错html = html.decode()print(html)
        
      • post
        • 一般向服务器传递参数使用
        • post是把信息自动加密处理
        • 如果想使用post信息,需要用data参数
        • 使用post,意味着http的请求有可能需要更改:
          • Content-Type:application/x-www.form-urlencode
          • Content-Length: 数据长度
          • 简而言之,一旦更改请求方法,请注意其他请求头部信息相适应
        • urllib.parse.urlencode可以将字符串自动转换成上面的格式
        • 案例v05
         '''案例v05利用parse模块模拟post请求分析百度词典分析步骤:1. 打开F122. 尝试输入单词girl,发现每次敲一个字母后都有请求3. 请求地址是 https://fanyi.baidu.com/sug4. 利用 Network-All-Headers 查看,发现FormData的值是 kw:girl5. 检查返回内容格式,发现返回的是json格式内容==>需要用到json包'''from urllib import request, parse# 负责处理json格式的模块import json'''大致流程是:1. 利用data构造内容,然后urlopen打开2. 返回一个json格式的结果3. 结果就应该是girl的释义'''baseurl = 'https://fanyi.baidu.com/sug'# 存放用来模拟form的数据一定是dict格式data = {# girl是翻译输入的英文内容,应该是由用户输入,此时使用硬编码'kw': 'girl'}# 需要使用parse模块对data进行编码data = parse.urlencode(data).encode('utf-8')print(type(data))# 我们需要构造一个请求头,请求头部应该至少包含传入的数据的长度# request要求传入的请求头是一个dict格式headers = {# 因为使用post请求,至少应该包含content-length 字段'Content-Length':len(data)}# 有了headers,data,url,就可以尝试发出请求了rsp = request.urlopen(baseurl, data=data)json_data = rsp.read().decode('utf-8')print(type(json_data))print(json_data)# 把json字符串转化成字典json_data = json.loads(json_data)print(type(json_data))print(json_data)for item in json_data['data']:print(item['v'], "--", item['v'])
        
         <class 'bytes'><class 'str'>{"errno":0,"data":[{"k":"girl","v":"n. \u5973\u5b69; \u59d1\u5a18; \u5973\u513f; \u5e74\u8f7b\u5973\u5b50; \u5973\u90ce;"},{"k":"girls","v":"n. \u5973\u5b69; \u59d1\u5a18; \u5973\u513f; \u5e74\u8f7b\u5973\u5b50; \u5973\u90ce;  girl\u7684\u590d\u6570;"},{"k":"girlfriend","v":"n. \u5973\u670b\u53cb; \u5973\u60c5\u4eba; (\u5973\u5b50\u7684)\u5973\u4f34\uff0c\u5973\u53cb;"},{"k":"girl friend","v":" \u672a\u5a5a\u59bb; \u5973\u6027\u670b\u53cb;"},{"k":"Girls' Generation","v":" \u5c11\u5973\u65f6\u4ee3\uff08\u97e9\u56fdSM\u5a31\u4e50\u6709\u9650\u516c\u53f8\u4e8e2007\u5e74\u63a8\u51fa\u7684\u4e5d\u540d\u5973\u5b50\u5c11\u5973\u7ec4\u5408\uff09;"}]}<class 'dict'>{'errno': 0, 'data': [{'k': 'girl', 'v': 'n. 女孩; 姑娘; 女儿; 年轻女子; 女郎;'}, {'k': 'girls', 'v': 'n. 女孩; 姑娘; 女儿; 年轻女子; 女郎;  girl的复数;'}, {'k': 'girlfriend', 'v': 'n. 女朋友; 女情人; (女子的)女伴,女友;'}, {'k': 'girl friend', 'v': ' 未婚妻; 女性朋友;'}, {'k': "Girls' Generation", 'v': ' 少女时代(韩国SM娱乐有限公司于2007年推出的九名女子少女组合);'}]}n. 女孩; 姑娘; 女儿; 年轻女子; 女郎; -- n. 女孩; 姑娘; 女儿; 年轻女子; 女郎;n. 女孩; 姑娘; 女儿; 年轻女子; 女郎;  girl的复数; -- n. 女孩; 姑娘; 女儿; 年轻女子; 女郎;  girl的复数;n. 女朋友; 女情人; (女子的)女伴,女友; -- n. 女朋友; 女情人; (女子的)女伴,女友;未婚妻; 女性朋友; --  未婚妻; 女性朋友;少女时代(韩国SM娱乐有限公司于2007年推出的九名女子少女组合); --  少女时代(韩国SM娱乐有限公司于2007年推出的九名女子少女组合);
        
        • 为了更多的设置请求信息,单纯的通过urlopen函数不太好用
        • 需要利用request.Request 类
        • 案例v06
         '''案例v06任务要求和内容跟v05一样本案例只是利用Request来实现v05的内容利用parse模块模拟post请求分析百度词典分析步骤:1. 打开F122. 尝试输入单词girl,发现每次敲一个字母后都有请求3. 请求地址是 https://fanyi.baidu.com/sug4. 利用 Network-All-Headers 查看,发现FormData的值是 kw:girl5. 检查返回内容格式,发现返回的是json格式内容==>需要用到json包'''from urllib import request, parse# 负责处理json格式的模块import json'''大致流程是:1. 利用data构造内容,然后urlopen打开2. 返回一个json格式的结果3. 结果就应该是girl的释义'''baseurl = 'https://fanyi.baidu.com/sug'# 存放用来模拟form的数据一定是dict格式data = {# girl是翻译输入的英文内容,应该是由用户输入,此时使用硬编码'kw': 'girl'}# 需要使用parse模块对data进行编码data = parse.urlencode(data).encode('utf-8')# 我们需要构造一个请求头,请求头部应该至少包含传入的数据的长度# request要求传入的请求头是一个dict格式headers = {# 因为使用post请求,至少应该包含content-length 字段'Content-Length':len(data)}# 构造一个Request的实例req = request.Request(url=baseurl, data=data, headers=headers)# 因为已经构造了一个Request的请求实例,则所有的请求信息都可以封装在Request实例中rsp = request.urlopen(req)json_data = rsp.read().decode('utf-8')print(type(json_data))print(json_data)# 把json字符串转化成字典json_data = json.loads(json_data)print(type(json_data))print(json_data)for item in json_data['data']:print(item['v'], "--", item['v'])
        
         <class 'str'>{"errno":0,"data":[{"k":"girl","v":"n. \u5973\u5b69; \u59d1\u5a18; \u5973\u513f; \u5e74\u8f7b\u5973\u5b50; \u5973\u90ce;"},{"k":"girls","v":"n. \u5973\u5b69; \u59d1\u5a18; \u5973\u513f; \u5e74\u8f7b\u5973\u5b50; \u5973\u90ce;  girl\u7684\u590d\u6570;"},{"k":"girlfriend","v":"n. \u5973\u670b\u53cb; \u5973\u60c5\u4eba; (\u5973\u5b50\u7684)\u5973\u4f34\uff0c\u5973\u53cb;"},{"k":"girl friend","v":" \u672a\u5a5a\u59bb; \u5973\u6027\u670b\u53cb;"},{"k":"Girls' Generation","v":" \u5c11\u5973\u65f6\u4ee3\uff08\u97e9\u56fdSM\u5a31\u4e50\u6709\u9650\u516c\u53f8\u4e8e2007\u5e74\u63a8\u51fa\u7684\u4e5d\u540d\u5973\u5b50\u5c11\u5973\u7ec4\u5408\uff09;"}]}<class 'dict'>{'errno': 0, 'data': [{'k': 'girl', 'v': 'n. 女孩; 姑娘; 女儿; 年轻女子; 女郎;'}, {'k': 'girls', 'v': 'n. 女孩; 姑娘; 女儿; 年轻女子; 女郎;  girl的复数;'}, {'k': 'girlfriend', 'v': 'n. 女朋友; 女情人; (女子的)女伴,女友;'}, {'k': 'girl friend', 'v': ' 未婚妻; 女性朋友;'}, {'k': "Girls' Generation", 'v': ' 少女时代(韩国SM娱乐有限公司于2007年推出的九名女子少女组合);'}]}n. 女孩; 姑娘; 女儿; 年轻女子; 女郎; -- n. 女孩; 姑娘; 女儿; 年轻女子; 女郎;n. 女孩; 姑娘; 女儿; 年轻女子; 女郎;  girl的复数; -- n. 女孩; 姑娘; 女儿; 年轻女子; 女郎;  girl的复数;n. 女朋友; 女情人; (女子的)女伴,女友; -- n. 女朋友; 女情人; (女子的)女伴,女友;未婚妻; 女性朋友; --  未婚妻; 女性朋友;少女时代(韩国SM娱乐有限公司于2007年推出的九名女子少女组合); --  少女时代(韩国SM娱乐有限公司于2007年推出的九名女子少女组合);
        

Python爬虫之 urllib、UA、代理、Cookie、Session详解

Python 爬虫从入门到入坑全系列教程(详细教程 + 各种实战)相关推荐

  1. python爬虫从入门到实战笔记——第四章Scrapy框架

    推荐阅读: python爬虫从入门到实战笔记--第一章爬虫原理和数据爬取 python爬虫从入门到实战笔记--第二章非结构化数据和结构化数据的提取 python爬虫从入门到实战笔记--第三章动态HTM ...

  2. 05、Python爬虫之正则表达式常用方法(超全)

    文章目录 前言 一.search()函数 二.match()函数 三.compile()函数 四.findall()函数 五.sub()函数 六.subn()函数 七.split()函数 八.补充说明 ...

  3. Python爬虫从入门到精通——解析库pyquery的使用

    分类目录:<Python爬虫从入门到精通>总目录 解析库使用篇: 解析库re的使用:正则表达式 解析库XPath的使用 解析库Beautiful Soup的使用 解析库pyquery的使用 ...

  4. Python爬虫新手入门教学(二):爬取小说

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

  5. 正则表达式从入门到入坑

    正则表达式从入门到入坑 入坑前先介绍两个辅助网站: 正则表达式测试网站:https://regex101.com 正则表达式思维导图:https://regexper.com 正则基础(入门) 1.元 ...

  6. python爬虫从入门到精通-Python爬虫从入门到精通视频(2018新版)

    原标题:Python爬虫从入门到精通视频(2018新版) Python在软件质量控制.提升开发效率.可移植性.组件集成.丰富库支持等各个方面均处于先进地位,并且随着人工智能的兴起,Python发展得越 ...

  7. python爬虫教程视频-python爬虫(入门教程、视频教程)

    python的版本经过了python2.x和python3.x等版本,无论哪种版本,关于python爬虫相关的知识是融会贯通的,脚本之家关于爬虫这个方便整理过很多有价值的教程,小编通过本文章给大家做一 ...

  8. Python爬虫新手入门教学(十):爬取彼岸4K超清壁纸

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

  9. Kubernetes ~ k8s 从入门到入坑。

    Kubernetes ~ k8s 从入门到入坑. 文章目录 Kubernetes ~ k8s 从入门到入坑. 1. Kubernetes 介绍. 1.1 应用部署方式演变. 1.2 kubernete ...

最新文章

  1. Ubuntu 13.10 安装软件失败后出现的问题——已安装 post-installation 脚本 返回了错误号 1...
  2. 适用于SharePoint 2013 的 CAML Desinger
  3. 0x12.基本数据结构 — 队列与单调队列
  4. 这样统计代码执行耗时,才足够优雅!
  5. grasshop 犀牛5.0下载_新安|原创剑尊下载新版本 2020最新安卓版剑尊下载地址整理...
  6. python2与pyrhon3的区别,python—文件操作,函数练习题
  7. 中断占用CPU的时间分析
  8. iOS启动画面不更新的问题
  9. 用html制作毕业论文设计,个人网页的设计与制作毕业论文
  10. BP 神经网络算法原理
  11. 计算机学报应用研究,计算机学报论文_计算机学报_通信学报
  12. 远程teamviewer|远程工具teamviewer|远程控制软件teamviewer
  13. EXCEL折线图修改横坐标间隔
  14. halcon修改图像的灰度值
  15. The Design of Model (part 1)
  16. python编程入门与案例详解-quot;Python小屋”免费资源汇总(截至2018年11月28日)...
  17. ceph-deploy源码分析(三)——mon模块 转
  18. mysql余额统计_实现按部门月卡余额总额分组统计的SQL查_mysql
  19. pagehelper浅见
  20. 【小沐学GIS】基于Cesium实现三维数字地球Earth(CesiumJS入门安装)

热门文章

  1. 高德地图有用的API
  2. 新生儿的二类(自费)疫苗(截止2019年)
  3. nginx 按天分割日志
  4. 运维派 企业面试题3 为上题中的 十个随机字母_test.html 文件 更名
  5. python分析数据的相关性_使用Python进行相关性分析
  6. Python爬虫学习总结
  7. UI设计师必备素材|功能性UI线性图标
  8. HTPPS加密对网站有什么好处
  9. 拉新、复购、供应链,双11中小商家“三难”如何破?
  10. python中round函数参数有负数_Python中round函数使用注意事项