爬虫 订阅
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 展开全文
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
信息
外文名
web crawler
别    称
网络蜘蛛、蠕虫
作    用
抓取网站上的信息
中文名
网络爬虫
目    的
按要求获取万维网信息
算    法
网络拓扑、基于网页内容和基于用户访问行为三种算法
网络爬虫产生背景
随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎(Search Engine),例如传统的通用搜索引擎AltaVista,Yahoo!和Google等,作为一个辅助人们检索信息的工具成为用户访问万维网的入口和指南。但是,这些通用性搜索引擎也存在着一定的局限性,如:(1)不同领域、不同背景的用户往往具有不同的检索目的和需求,通过搜索引擎所返回的结果包含大量用户不关心的网页。(2)通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。(3)万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。(4)通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。 为了解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫(general purpose web crawler)不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。1 聚焦爬虫工作原理以及关键技术概述网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。 相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题:(1) 对抓取目标的描述或定义;(2) 对网页或数据的分析与过滤;(3) 对URL的搜索策略。
收起全文
精华内容
参与话题
问答
  • 150讲轻松搞定Python网络爬虫

    万人学习 2019-05-16 15:30:54
    【为什么学爬虫?】        1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体...
  • 爬虫微课5小时 Python学习路线

    万人学习 2018-07-10 13:28:05
    Python爬虫技术视频教程,该课程每堂课都有一个作业,包含的项目案例有家长帮142600条数据爬取与分析,全球天气数据抓取与分析,淘宝商品信息数据众数分析,12306余票查询,python软件打包exe与发布。学完此课程能让...
  • 京东口罩爬虫,到货通知爬虫,自动下单爬虫第二篇功能效果展示无货展示有货展示撸代码修改的地方邮箱修改口罩链接获取方式自动下单所需Cookie获取 预祝大家都能抢到口罩,请大家适量购买 第一篇 马上上班了,回来的...

    预祝大家都能抢到口罩,请大家适量购买

    第一篇
    马上上班了,回来的路上,上班地铁上都是非常急需口罩的
    所以有了口罩爬虫二号

    下单的部分代码参考了tychxn大佬的代码

    这次包括了无限循环检查口罩是否到货
    到货的话马上自动下单(默认地址)
    打开程序就可以睡觉觉去了

    避免抢购,程序自动一次只买一件

    功能

    • 检查登录
    • 确认是否有货
    • 有货自动下单
    • 邮件通知

    效果展示

    无货展示

    在这里插入图片描述

    有货展示

    找一个有货的链接

    现在口罩都没货了只能找一个非口罩的试一下
    在这里插入图片描述
    看skuId 确实是有货就下单了
    在这里插入图片描述
    邮件通知
    在这里插入图片描述
    手机或者电脑手动 付款完成订单

    在这里插入图片描述

    撸代码

    这次的代码非常长就不直接贴在这里了
    https://github.com/cycz/jdBuyMask (如果有帮助。右上角star一下,谢谢)

    嫌麻烦的可以站内下载

    修改的地方

    主要修改的是这两块地方 就可以实时去监控了。

    邮箱修改

    在这里插入图片描述
    收件邮箱修改成自己的

    发件邮箱是我自己的 需要修改可以看这个进行修改
    https://blog.csdn.net/LeoPhilo/article/details/89074232

    口罩链接获取方式

    第二个要监控的商品url
    在这里插入图片描述
    一、谷歌浏览器按F12 打开
    二、点击需要的商品 和所在的地区
    三、找到这个stock 开头的url
    四、复制 修改或者添加在下方
    在这里插入图片描述

    自动下单所需Cookie获取

    修改位置
    在这里插入图片描述
    获取方式
    一、打开谷歌浏览器,登录京东
    在这里插入图片描述
    二、按F12 进入我的订单页面 过滤出list.action url。
    在这里插入图片描述

    三、请求下滑找到cookie 然后复制,在代码里面修改就行
    在这里插入图片描述

    不小心就努力一个晚上到6点早上了,真的不点个小小赞,点个github的小小star吗!!!
    预祝大家都能抢到口罩,身体健康开工!!!

    展开全文
  • Python爬虫100例教程导航帖(已完结)

    万次阅读 多人点赞 2019-01-08 23:40:01
    Python爬虫入门教程导航,目标100篇。 本系列博客争取把爬虫入门阶段的所有内容都包含住,需要你有较好的Python基础知识,当然你完全零基础也可以观看本系列博客。 Python爬虫入门教程,加油!

    Python爬虫入门教程导航,已经完结啦,以后的时间不定期补番。

     

    本系列博客争取把爬虫入门阶段的所有内容都包含住,需要你有较好的 Python 基础知识,当然你完全零基础也可以观看本系列博客。

    Python 爬虫入门教程,加油!

    基础篇,包含多线程爬虫

    1. Python爬虫入门教程 1-100 CentOS环境安装

    2. Python爬虫入门教程 2-100 和谐图网站爬取

    3. Python爬虫入门教程 3-100 美空网数据爬取

    4. Python爬虫入门教程 4-100 美空网未登录图片爬取

    5. Python爬虫入门教程 5-100 27270图片爬取

    6. Python爬虫入门教程 6-100 蜂鸟网图片爬取之一

    7. Python爬虫入门教程 7-100 蜂鸟网图片爬取之二

    8. Python爬虫入门教程 8-100 蜂鸟网图片爬取之三

    9. Python爬虫入门教程 9-100 河北阳光理政投诉板块

    10. Python爬虫入门教程 10-100 图虫网多线程爬取

    11. Python爬虫入门教程 11-100 行行网电子书多线程爬取

    12. Python爬虫入门教程 12-100 半次元COS图爬取

    13. Python爬虫入门教程 13-100 斗图啦表情包多线程爬取

    14. Python爬虫入门教程 14-100 All IT eBooks多线程爬取

    15. Python爬虫入门教程 15-100 石家庄政民互动数据爬取

    16. Python爬虫入门教程 16-100 500px摄影师社区抓取摄影师数据

    17. Python爬虫入门教程 17-100 CSDN博客抓取数据

    18. Python爬虫入门教程 18-100 煎蛋网XXOO图片抓取

    19. Python爬虫入门教程 19-100 51CTO学院IT技术课程抓取

    20. Python爬虫入门教程 20-100 慕课网免费课程抓取

    21. Python爬虫入门教程 21-100 网易云课堂课程数据抓取

    22. Python爬虫入门教程 22-100 CSDN学院课程数据抓取

    23. Python爬虫入门教程 23-100 石家庄链家租房数据抓取

    24. Python爬虫入门教程 24-100 微医挂号网doctor数据抓取

    25. Python爬虫入门教程 25-100 知乎文章图片爬取器之一

    26. Python爬虫入门教程 26-100 知乎文章图片爬取器之二

     

    pyspider

    27. Python爬虫入门教程 27-100 微医挂号网专家团队数据抓取pyspider

    28. Python爬虫入门教程 28-100 虎嗅网文章数据抓取 pyspider

    29. Python爬虫入门教程 29-100 手机APP数据抓取 pyspider

     

    scrapy

    30. Python爬虫入门教程 30-100 高考派大学数据抓取 scrapy

    31. Python爬虫入门教程 31-100 36氪(36kr)数据抓取 scrapy

    32. Python爬虫入门教程 32-100 B站博人传评论数据抓取 scrapy

    33. Python爬虫入门教程 33-100 《海王》评论数据抓取 scrapy

    34. Python爬虫入门教程 34-100 掘金网全站用户爬虫 scrapy

    35. Python爬虫入门教程 35-100 知乎网全站用户爬虫 scrapy

    36. Python爬虫入门教程 36-100 酷安网全站应用爬虫 scrapy

    37. Python爬虫入门教程 37-100 云沃客项目外包网数据爬虫 scrapy

    38. Python爬虫入门教程 38-100 教育部高校名单数据爬虫 scrapy

    39. Python爬虫入门教程 39-100 天津市科技计划项目成果库数据抓取 scrapy

    40. Python爬虫入门教程 40-100 博客园Python相关40W博客抓取 scrapy

     

    手机抓取部分

    41. Python爬虫入门教程 41-100 Fiddler+夜神模拟器+雷电模拟器配置手机APP爬虫部分

    42. Python爬虫入门教程 42-100 爬取儿歌多多APP数据-手机APP爬虫部分

    43. Python爬虫入门教程 43-100 百思不得姐APP数据-手机APP爬虫部分

    44. Python爬虫入门教程 44-100 Charles的安装与使用-手机APP爬虫部分

    45. Python爬虫入门教程 45-100 Charles抓取兔儿故事-下载小猪佩奇故事-手机APP爬虫部分

    46.  Python爬虫入门教程 46-100 Charles抓取手机收音机-手机APP爬虫部分

    47. Python爬虫入门教程 47-100 mitmproxy安装与安卓模拟器的配合使用-手机APP爬虫部分

    48. Python爬虫入门教程 48-100 使用mitmdump抓取手机惠农APP-手机APP爬虫部分

    49. Python爬虫入门教程 49-100 Appium安装+操作51JOB_APP(模拟手机操作之一)手机APP爬虫

     

    爬虫进阶部分

    50. Python爬虫入门教程 50-100 Python3爬虫爬取VIP视频-Python爬虫6操作

    51. Python爬虫入门教程 51-100 Python3爬虫通过m3u8文件下载ts视频-Python爬虫6操作

    52. Python爬虫入门教程 52-100 Python3爬虫获取博客园文章定时发送到邮箱

    53. Python爬虫入门教程 53-100 Python3爬虫获取三亚天气做旅游参照

    54. Python爬虫入门教程 54-100 博客园等博客网站自动评论器

     

    验证码识别技术

    55. Python爬虫入门教程 55-100 python爬虫高级技术之验证码篇

    56. Python爬虫入门教程 56-100 python爬虫高级技术之验证码篇2-开放平台OCR技术

    57. Python爬虫入门教程 57-100 python爬虫高级技术之验证码篇3-滑动验证码识别技术

    58. Python爬虫入门教程 58-100 python爬虫高级技术之验证码篇4-极验证识别技术之一

    59. Python爬虫入门教程 59-100 python爬虫高级技术之验证码篇5-极验证识别技术之二

    60. Python爬虫入门教程 60-100 python识别验证码,阿里、腾讯、百度、聚合数据等大公司都这么干

     

    反爬虫技术

    61. Python爬虫入门教程 61-100 写个爬虫碰到反爬了,动手破坏它!

    62. Python爬虫入门教程 62-100 30岁了,想找点文献提高自己,还被反爬了,Python搞起,反爬第2篇

    63. Python爬虫入门教程 63-100 Python字体反爬之一,没办法,这个必须写,反爬第3篇

    64. Python爬虫入门教程 64-100 反爬教科书级别的网站-汽车之家,字体反爬之二

    65. Python爬虫入门教程 65-100 爬虫与反爬虫的修罗场,点评网站,字体反爬之三

    66. Python爬虫入门教程 66-100 对微博登录好奇嘛,用Python试试

    67. Python爬虫入门教程 67-100 Python爬虫摆脱控制台,开始走上台面

    68. Python爬虫入门教程 68-100 一招解决爬虫程序卡死问题

    69. Python爬虫入门教程 69-100 哪些年我们碰到的懒加载

    70. Python爬虫入门教程 70-100 爬虫原理应用到多种场景,Python下载B站视频

    71. Python爬虫入门教程 71-100 续上篇,python爬虫爬取B站视频

     

    分布式爬虫技术

    72. Python爬虫入门教程 72-100 分布式爬虫初步解析-配好环境肝完一半

    73. Python爬虫入门教程 73-100 Python分布式爬虫顶级教程

    74. Python爬虫入门教程 74-100 Python分布式夯实,夯实,还是**夯实

    75. Python爬虫入门教程 75-100 celery分布式爬虫抓取豆瓣那些书

    76. Python爬虫入门教程 76-100 用Celery继续搞定分布式爬虫

     

    爬虫高级扩展部分

    77. Python爬虫入门教程 77-100 增量爬虫不得不说的故事

    78. Python爬虫入门教程 78-100 用Scrapy+BloomFilter再写个增量爬虫

    79. Python爬虫入门教程 79-100 Python Portia爬虫框架-在Win7里面配置起来

    80. Python爬虫入门教程 80-100 Python 玩转NewSpaper爬虫框架

    81. Python爬虫入门教程 81-100 小众爬虫框架looter,框架作者竟然在官方手册开车

    82. Python爬虫入门教程 82-100 在windows搭建scrapyd跑scrapy爬虫

    83. Python爬虫入门教程 83-100 scrapyd配合scrapydweb跑scrapy爬虫,名称有点套娃

    84. Python爬虫入门教程 84-100 通过<老家伙>spiderkeeper运行scrapy爬虫

    85. Python爬虫入门教程 85-100 五年Python爬虫工程师,开发常用工具清单大放送

    86. Python爬虫入门教程 86-100 Python爬虫框架在多来一个Ruia,解决问题的途径再次增多

    87. Python爬虫入门教程 87-100 glidedsky网站爬虫解析,爬虫闯关第一篇

    88. Python爬虫入门教程 88-100 Web Scraper 不用一行代码就能学会的爬虫程序

    89. Python爬虫入门教程 89-100 定个小目标,先用Python爬个一亿B站用户

    90. Python爬虫入门教程 90-100 凌晨5点的CSDN自动签到器,用Python爬虫干点闲事

     

    帮粉丝写爬虫

    91. Python爬虫入门教程 91-100 帮粉丝写Python爬虫之【河北单招学校信息爬虫】

    92. Python爬虫入门教程 92-100 帮粉丝写Python爬虫之【新浪微博热榜爬虫+邮箱定时发送】

    93. Python爬虫入门教程 93-100 帮粉丝写Python爬虫之【获取CSDN周榜所有大佬的收费专栏】

    94. Python爬虫入门教程 94-100 帮粉丝写Python爬虫之【微信读书书籍信息爬取】

    95. Python爬虫入门教程 95-100 帮粉丝写Python爬虫之【全网通用评论爬虫】

    96. Python爬虫入门教程 96-100 帮粉丝写Python爬虫之【寻找最美女主播】

    97. Python爬虫入门教程 97-100 帮粉丝写Python爬虫之【双色球预测前置条件】

    98. Python爬虫入门教程 98-100 帮粉丝写 Python 爬虫之【2020秋季最难的事--约不上的疫苗】

    99. Python爬虫入门教程 99-100 Python爬虫在线服务大全

    100. Python爬虫入门教程 100-100 我用了800天,才成为爬虫领域的一个新人

    展开全文
  • 手把手教你利用爬虫爬网页(Python代码)

    万次阅读 多人点赞 2019-05-14 14:34:48
    本文主要分为两个部分:一部分是网络爬虫的概述,帮助大家详细了解网络爬虫;另一部分是HTTP请求的Python实现,帮助大家了解Python中实现HTTP请求的各种方式,以...
        

    640?wx_fmt=jpeg

    本文主要分为两个部分:一部分是网络爬虫的概述,帮助大家详细了解网络爬虫;另一部分是HTTP请求的Python实现,帮助大家了解Python中实现HTTP请求的各种方式,以便具备编写HTTP网络程序的能力。


    01

    网络爬虫概述


    接下来从网络爬虫的概念、用处与价值和结构等三个方面,让大家对网络爬虫有一个基本的了解。

    1. 网络爬虫及其应用

    随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战,网络爬虫应运而生。网络爬虫(又被称为网页蜘蛛、网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。下面通过图3-1展示一下网络爬虫在互联网中起到的作用:


    640?wx_fmt=png

    ▲图3-1 网络爬虫


    网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫。实际的网络爬虫系统通常是几种爬虫技术相结合实现的。

    搜索引擎(Search Engine),例如传统的通用搜索引擎baidu、Yahoo和Google等,是一种大型复杂的网络爬虫,属于通用性网络爬虫的范畴。但是通用性搜索引擎存在着一定的局限性:

    1. 不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页。

    2. 通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。

    3. 万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。

    4. 通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。

    为了解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生。

    聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择地访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。

    说完了聚焦爬虫,接下来再说一下增量式网络爬虫。增量式网络爬虫是指对已下载网页采取增量式更新和只爬行新产生的或者已经发生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是尽可能新的页面。

    和周期性爬行和刷新页面的网络爬虫相比,增量式爬虫只会在需要的时候爬行新产生或发生更新的页面,并不重新下载没有发生变化的页面,可有效减少数据下载量,及时更新已爬行的网页,减小时间和空间上的耗费,但是增加了爬行算法的复杂度和实现难度。

    例如:想获取赶集网的招聘信息,以前爬取过的数据没有必要重复爬取,只需要获取更新的招聘数据,这时候就要用到增量式爬虫。

    最后说一下深层网络爬虫。Web页面按存在方式可以分为表层网页和深层网页。表层网页是指传统搜索引擎可以索引的页面,以超链接可以到达的静态网页为主构成的Web页面。深层网络是那些大部分内容不能通过静态链接获取的、隐藏在搜索表单后的,只有用户提交一些关键词才能获得的Web页面。

    例如用户登录或者注册才能访问的页面。可以想象这样一个场景:爬取贴吧或者论坛中的数据,必须在用户登录后,有权限的情况下才能获取完整的数据。

    2. 网络爬虫结构

    下面用一个通用的网络爬虫结构来说明网络爬虫的基本工作流程,如图3-4所示。


    640?wx_fmt=png

    ▲图3-4 网络爬虫结构

    网络爬虫的基本工作流程如下:

    1. 首先选取一部分精心挑选的种子URL。

    2. 将这些URL放入待抓取URL队列。

    3. 从待抓取URL队列中读取待抓取队列的URL,解析DNS,并且得到主机的IP,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。

    4. 分析已抓取URL队列中的URL,从已下载的网页数据中分析出其他URL,并和已抓取的URL进行比较去重,最后将去重过的URL放入待抓取URL队列,从而进入下一个循环。

    02

    HTTP请求的Python实现


    通过上面的网络爬虫结构,我们可以看到读取URL、下载网页是每一个爬虫必备而且关键的功能,这就需要和HTTP请求打交道。接下来讲解Python中实现HTTP请求的三种方式:urllib2/urllib、httplib/urllib以及Requests。

    1. urllib2/urllib实现

    urllib2和urllib是Python中的两个内置模块,要实现HTTP功能,实现方式是以urllib2为主,urllib为辅。

    1.1 首先实现一个完整的请求与响应模型

    urllib2提供一个基础函数urlopen,通过向指定的URL发出请求来获取数据。最简单的形式是:

    import urllib2
    response=urllib2.urlopen('http://www.zhihu.com')
    html=response.read()
    print html

    其实可以将上面对http://www.zhihu.com的请求响应分为两步,一步是请求,一步是响应,形式如下:

    import urllib2
    # 请求
    request=urllib2.Request('http://www.zhihu.com')
    # 响应
    response = urllib2.urlopen(request)
    html=response.read()
    print html

    上面这两种形式都是GET请求,接下来演示一下POST请求,其实大同小异,只是增加了请求数据,这时候用到了urllib。示例如下:

    import urllib
    import urllib2
    url = 'http://www.xxxxxx.com/login'
    postdata = {'username' : 'qiye',
        'password' : 'qiye_pass'}
    # info 需要被编码为urllib2能理解的格式,这里用到的是urllib
    data = urllib.urlencode(postdata)
    req = urllib2.Request(url, data)
    response = urllib2.urlopen(req)
    html = response.read()

    但是有时会出现这种情况:即使POST请求的数据是对的,但是服务器拒绝你的访问。这是为什么呢?问题出在请求中的头信息,服务器会检验请求头,来判断是否是来自浏览器的访问,这也是反爬虫的常用手段。

    1.2 请求头headers处理

    将上面的例子改写一下,加上请求头信息,设置一下请求头中的User-Agent域和Referer域信息。

    import urllib
    import urllib2
    url = 'http://www.xxxxxx.com/login'
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    referer='http://www.xxxxxx.com/'
    postdata = {'username' : 'qiye',
        'password' : 'qiye_pass'}
    # 将user_agent,referer写入头信息
    headers={'User-Agent':user_agent,'Referer':referer}
    data = urllib.urlencode(postdata)
    req = urllib2.Request(url, data,headers)
    response = urllib2.urlopen(req)
    html = response.read()

    也可以这样写,使用add_header来添加请求头信息,修改如下:

    import urllib
    import urllib2
    url = 'http://www.xxxxxx.com/login'
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    referer='http://www.xxxxxx.com/'
    postdata = {'username' : 'qiye',
        'password' : 'qiye_pass'}
    data = urllib.urlencode(postdata)
    req = urllib2.Request(url)
    # 将user_agent,referer写入头信息
    req.add_header('User-Agent',user_agent)
    req.add_header('Referer',referer)
    req.add_data(data)
    response = urllib2.urlopen(req)
    html = response.read()

    对有些header要特别留意,服务器会针对这些header做检查,例如:

    • User-Agent:有些服务器或Proxy会通过该值来判断是否是浏览器发出的请求。

    • Content-Type:在使用REST接口时,服务器会检查该值,用来确定HTTP Body中的内容该怎样解析。在使用服务器提供的RESTful或SOAP服务时,Content-Type设置错误会导致服务器拒绝服务。常见的取值有:application/xml(在XML RPC,如RESTful/SOAP调用时使用)、application/json(在JSON RPC调用时使用)、application/x-www-form-urlencoded(浏览器提交Web表单时使用)。

    • Referer:服务器有时候会检查防盗链。

    1.3 Cookie处理

    urllib2对Cookie的处理也是自动的,使用CookieJar函数进行Cookie的管理。如果需要得到某个Cookie项的值,可以这么做:

    import urllib2
    import cookielib
    cookie = cookielib.CookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
    response = opener.open('http://www.zhihu.com')
    for item in cookie:
        print item.name+':'+item.value

    但是有时候会遇到这种情况,我们不想让urllib2自动处理,我们想自己添加Cookie的内容,可以通过设置请求头中的Cookie域来做:

    import  urllib2
    opener = urllib2.build_opener()
    opener.addheaders.append( ( 'Cookie''email=' + "xxxxxxx@163.com" ) )
    req = urllib2.Request( "http://www.zhihu.com/" )
    response = opener.open(req)
    print response.headers
    retdata = response.read()

    1.4 Timeout设置超时

    在Python2.6之前的版本,urllib2的API并没有暴露Timeout的设置,要设置Timeout值,只能更改Socket的全局Timeout值。示例如下:

    import urllib2
    import socket
    socket.setdefaulttimeout(10# 10 秒钟后超时
    urllib2.socket.setdefaulttimeout(10# 另一种方式

    在Python2.6及新的版本中,urlopen函数提供了对Timeout的设置,示例如下:

    import urllib2
    request=urllib2.Request('http://www.zhihu.com')
    response = urllib2.urlopen(request,timeout=2)
    html=response.read()
    print html

    1.5 获取HTTP响应码

    对于200 OK来说,只要使用urlopen返回的response对象的getcode()方法就可以得到HTTP的返回码。但对其他返回码来说,urlopen会抛出异常。这时候,就要检查异常对象的code属性了,示例如下:

    import urllib2
    try:
        response = urllib2.urlopen('http://www.google.com')
        print response
    except urllib2.HTTPError as e:
        if hasattr(e, 'code'):
            print 'Error code:',e.code

    1.6 重定向

    urllib2默认情况下会针对HTTP 3XX返回码自动进行重定向动作。要检测是否发生了重定向动作,只要检查一下Response的URL和Request的URL是否一致就可以了,示例如下:

    import urllib2
    response = urllib2.urlopen('http://www.zhihu.cn')
    isRedirected = response.geturl() == 'http://www.zhihu.cn'

    如果不想自动重定向,可以自定义HTTPRedirectHandler类,示例如下:

    import urllib2
    class RedirectHandler(urllib2.HTTPRedirectHandler):
        def http_error_301(self, req, fp, code, msg, headers):
            pass
        def http_error_302(self, req, fp, code, msg, headers):
            result = urllib2.HTTPRedirectHandler.http_error_301(self, req, fp, code, 
            msg, headers)
            result.status = code
            result.newurl = result.geturl()
            return result
    opener = urllib2.build_opener(RedirectHandler)
    opener.open('http://www.zhihu.cn')

    1.7 Proxy的设置

    在做爬虫开发中,必不可少地会用到代理。urllib2默认会使用环境变量http_proxy来设置HTTP Proxy。但是我们一般不采用这种方式,而是使用ProxyHandler在程序中动态设置代理,示例代码如下:

    import urllib2
    proxy = urllib2.ProxyHandler({'http''127.0.0.1:8087'})
    opener = urllib2.build_opener([proxy,])
    urllib2.install_opener(opener)
    response = urllib2.urlopen('http://www.zhihu.com/')
    print response.read()

    这里要注意的一个细节,使用urllib2.install_opener()会设置urllib2的全局opener,之后所有的HTTP访问都会使用这个代理。这样使用会很方便,但不能做更细粒度的控制,比如想在程序中使用两个不同的Proxy设置,这种场景在爬虫中很常见。比较好的做法是不使用install_opener去更改全局的设置,而只是直接调用opener的open方法代替全局的urlopen方法,修改如下:

    import urllib2
    proxy = urllib2.ProxyHandler({'http''127.0.0.1:8087'})
    opener = urllib2.build_opener(proxy,)
    response = opener.open("http://www.zhihu.com/")
    print response.read()


    2. httplib/urllib实现

    httplib模块是一个底层基础模块,可以看到建立HTTP请求的每一步,但是实现的功能比较少,正常情况下比较少用到。在Python爬虫开发中基本上用不到,所以在此只是进行一下知识普及。下面介绍一下常用的对象和函数:


    • 创建HTTPConnection对象:

      class httplib.HTTPConnection(host[, port[, strict[, timeout[, source_address]]]])。

    • 发送请求:

      HTTPConnection.request(method, url[, body[, headers]])。

    • 获得响应:

      HTTPConnection.getresponse()。

    • 读取响应信息:

      HTTPResponse.read([amt])。

    • 获得指定头信息:

      HTTPResponse.getheader(name[, default])。

    • 获得响应头(header, value)元组的列表:

      HTTPResponse.getheaders()。

    • 获得底层socket文件描述符:

      HTTPResponse.fileno()。

    • 获得头内容:

      HTTPResponse.msg。

    • 获得头http版本:

      HTTPResponse.version。

    • 获得返回状态码:

      HTTPResponse.status。

    • 获得返回说明:

      HTTPResponse.reason。

    接下来演示一下GET请求和POST请求的发送,首先是GET请求的示例,如下所示:

    import httplib
    conn =None
    try:
        conn = httplib.HTTPConnection("www.zhihu.com")
        conn.request("GET""/")
        response = conn.getresponse()
        print response.status, response.reason
        print '-' * 40
        headers = response.getheaders()
        for h in headers:
            print h
        print '-' * 40
        print response.msg
    except Exception,e:
        print e
    finally:
        if conn:
            conn.close()

    POST请求的示例如下:

    import httplib, urllib
    conn = None
    try:
        params = urllib.urlencode({'name''qiye''age'22})
        headers = {"Content-type""application/x-www-form-urlencoded"
        , "Accept""text/plain"}
        conn = httplib.HTTPConnection("www.zhihu.com"80, timeout=3)
        conn.request("POST""/login", params, headers)
        response = conn.getresponse()
        print response.getheaders() # 获取头信息
        print response.status
        print response.read()
    except Exception, e:
        print e
        finally:
        if conn:
            conn.close()

    3. 更人性化的Requests

    Python中Requests实现HTTP请求的方式,是本人极力推荐的,也是在Python爬虫开发中最为常用的方式。Requests实现HTTP请求非常简单,操作更加人性化。

    Requests库是第三方模块,需要额外进行安装。Requests是一个开源库,源码位于:

    GitHub: https://github.com/kennethreitz/requests

    希望大家多多支持作者。

    使用Requests库需要先进行安装,一般有两种安装方式:

    • 使用pip进行安装,安装命令为:pip install requests,不过可能不是最新版。

    • 直接到GitHub上下载Requests的源代码,下载链接为:

      https://github.com/kennethreitz/requests/releases

      将源代码压缩包进行解压,然后进入解压后的文件夹,运行setup.py文件即可。

    如何验证Requests模块安装是否成功呢?在Python的shell中输入import requests,如果不报错,则是安装成功。如图3-5所示。

    640?wx_fmt=png

    ▲图3-5 验证Requests安装

    3.1 首先还是实现一个完整的请求与响应模型

    以GET请求为例,最简单的形式如下:

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

    大家可以看到比urllib2实现方式的代码量少。接下来演示一下POST请求,同样是非常简短,更加具有Python风格。示例如下:

    import requests
    postdata={'key':'value'}
    r = requests.post('http://www.xxxxxx.com/login',data=postdata)
    print r.content

    HTTP中的其他请求方式也可以用Requests来实现,示例如下:

    r = requests.put('http://www.xxxxxx.com/put', data = {'key':'value'})
    r = requests.delete('http://www.xxxxxx.com/delete')
    r = requests.head('http://www.xxxxxx.com/get')
    r = requests.options('http://www.xxxxxx.com/get')

    接着讲解一下稍微复杂的方式,大家肯定见过类似这样的URL:

    http://zzk.cnblogs.com/s/blogpost?Keywords=blog:qiyeboy&pageindex=1

    就是在网址后面紧跟着“?”,“?”后面还有参数。那么这样的GET请求该如何发送呢?肯定有人会说,直接将完整的URL带入即可,不过Requests还提供了其他方式,示例如下:

    import requests
        payload = {'Keywords''blog:qiyeboy','pageindex':1}
    r = requests.get('http://zzk.cnblogs.com/s/blogpost', params=payload)
    print r.url

    通过打印结果,我们看到最终的URL变成了:

    http://zzk.cnblogs.com/s/blogpost?Keywords=blog:qiyeboy&pageindex=1

    3.2 响应与编码

    还是从代码入手,示例如下:

    import requests
    r = requests.get('http://www.baidu.com')
    print 'content-->'+r.content
    print 'text-->'+r.text
    print 'encoding-->'+r.encoding
    r.encoding='utf-8'
    print 'new text-->'+r.text

    其中r.content返回的是字节形式,r.text返回的是文本形式,r.encoding返回的是根据HTTP头猜测的网页编码格式。

    输出结果中:“text-->”之后的内容在控制台看到的是乱码,“encoding-->”之后的内容是ISO-8859-1(实际上的编码格式是UTF-8),由于Requests猜测编码错误,导致解析文本出现了乱码。Requests提供了解决方案,可以自行设置编码格式,r.encoding='utf-8'设置成UTF-8之后,“new text-->”的内容就不会出现乱码。

    但是这种手动的方式略显笨拙,下面提供一种更加简便的方式:chardet,这是一个非常优秀的字符串/文件编码检测模块。安装方式如下:

    pip install chardet

    安装完成后,使用chardet.detect()返回字典,其中confidence是检测精确度,encoding是编码形式。示例如下:

    import requests
    r = requests.get('http://www.baidu.com')
    print chardet.detect(r.content)
    r.encoding = chardet.detect(r.content)['encoding']
    print r.text

    直接将chardet探测到的编码,赋给r.encoding实现解码,r.text输出就不会有乱码了。

    除了上面那种直接获取全部响应的方式,还有一种流模式,示例如下:

    import requests
    r = requests.get('http://www.baidu.com',stream=True)
    print r.raw.read(10)

    设置stream=True标志位,使响应以字节流方式进行读取,r.raw.read函数指定读取的字节数。

    3.3 请求头headers处理

    Requests对headers的处理和urllib2非常相似,在Requests的get函数中添加headers参数即可。示例如下:

    import requests
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers={'User-Agent':user_agent}
    r = requests.get('http://www.baidu.com',headers=headers)
    print r.content

    3.4 响应码code和响应头headers处理

    获取响应码是使用Requests中的status_code字段,获取响应头使用Requests中的headers字段。示例如下:

    import requests
    r = requests.get('http://www.baidu.com')
    if r.status_code == requests.codes.ok:
        print r.status_code# 响应码
        print r.headers# 响应头
        print r.headers.get('content-type')# 推荐使用这种获取方式,获取其中的某个字段
        print r.headers['content-type']# 不推荐使用这种获取方式
    else:
        r.raise_for_status()

    上述程序中,r.headers包含所有的响应头信息,可以通过get函数获取其中的某一个字段,也可以通过字典引用的方式获取字典值,但是不推荐,因为如果字段中没有这个字段,第二种方式会抛出异常,第一种方式会返回None。

    r.raise_for_status()是用来主动地产生一个异常,当响应码是4XX或5XX时,raise_for_status()函数会抛出异常,而响应码为200时,raise_for_status()函数返回None。

    3.5 Cookie处理

    如果响应中包含Cookie的值,可以如下方式获取Cookie字段的值,示例如下:

    import requests
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers={'User-Agent':user_agent}
    r = requests.get('http://www.baidu.com',headers=headers)
    # 遍历出所有的cookie字段的值
    for cookie in r.cookies.keys():
        print cookie+':'+r.cookies.get(cookie)

    如果想自定义Cookie值发送出去,可以使用以下方式,示例如下:

    import requests
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers={'User-Agent':user_agent}
    cookies = dict(name='qiye',age='10')
    r = requests.get('http://www.baidu.com',headers=headers,cookies=cookies)
    print r.text

    还有一种更加高级,且能自动处理Cookie的方式,有时候我们不需要关心Cookie值是多少,只是希望每次访问的时候,程序自动把Cookie的值带上,像浏览器一样。Requests提供了一个session的概念,在连续访问网页,处理登录跳转时特别方便,不需要关注具体细节。使用方法示例如下:

    import Requests
    oginUrl = 'http://www.xxxxxxx.com/login'
    s = requests.Session()
    #首先访问登录界面,作为游客,服务器会先分配一个cookie
    r = s.get(loginUrl,allow_redirects=True)
    datas={'name':'qiye','passwd':'qiye'}
    #向登录链接发送post请求,验证成功,游客权限转为会员权限
    r = s.post(loginUrl, data=datas,allow_redirects= True)
    print r.text

    上面的这段程序,其实是正式做Python开发中遇到的问题,如果没有第一步访问登录的页面,而是直接向登录链接发送Post请求,系统会把你当做非法用户,因为访问登录界面时会分配一个Cookie,需要将这个Cookie在发送Post请求时带上,这种使用Session函数处理Cookie的方式之后会很常用。

    3.6 重定向与历史信息

    处理重定向只是需要设置一下allow_redirects字段即可,例如:

    r=requests.get('http://www.baidu.com',allow_redirects=True)

    将allow_redirects设置为True,则是允许重定向;设置为False,则是禁止重定向。如果是允许重定向,可以通过r.history字段查看历史信息,即访问成功之前的所有请求跳转信息。示例如下:

    import requests
    r = requests.get('http://github.com')
    print r.url
    print r.status_code
    print r.history

    打印结果如下:

    https://github.com/
    200
    (<Response [301]>,)

    上面的示例代码显示的效果是访问GitHub网址时,会将所有的HTTP请求全部重定向为HTTPS。

    3.7 超时设置

    超时选项是通过参数timeout来进行设置的,示例如下:

    requests.get('http://github.com', timeout=2)

    3.8 代理设置

    使用代理Proxy,你可以为任意请求方法通过设置proxies参数来配置单个请求:

    import requests
    proxies = {
        "http""http://0.10.1.10:3128",
        "https""http://10.10.1.10:1080",
    }
    requests.get("http://example.org", proxies=proxies)

    也可以通过环境变量HTTP_PROXY和HTTPS_PROXY?来配置代理,但是在爬虫开发中不常用。你的代理需要使用HTTP Basic Auth,可以使用http://user:password@host/语法:

    proxies = {
        "http""http://user:pass@10.10.1.10:3128/",
    }


    03

    小结


    本文主要讲解了网络爬虫的结构和应用,以及Python实现HTTP请求的几种方法。希望大家对本文中的网络爬虫工作流程和Requests实现HTTP请求的方式重点吸收消化。

    本文摘编自《Python爬虫开发与项目实战》,经出版方授权发布。

    关于作者:范传辉,资深网虫,Python开发者,参与开发了多项网络应用,在实际开发中积累了丰富的实战经验,并善于总结,贡献了多篇技术文章广受好评。研究兴趣是网络安全、爬虫技术、数据分析、驱动开发等技术。

    640?wx_fmt=jpeg

    Python爬虫开发与项目实战

    扫码购买

    640?wx_fmt=png


    本书特色:

    • 由浅入深,从Python和Web前端基础开始讲起,逐步加深难度,层层递进。

    • 内容详实,从静态网站到动态网站,从单机爬虫到分布式爬虫,既包含基础知识点,又讲解了关键问题和难点分析,方便读者完成进阶。

    • 实用性强,本书共有9个爬虫项目,以系统的实战项目为驱动,由浅及深地讲解爬虫开发中所需的知识和技能。

    • 难点详析,对js加密的分析、反爬虫措施的突破、去重方案的设计、分布式爬虫的开发进行了细致的讲解。

    扫码购买

    640?wx_fmt=png

    展开全文
  • Python网络爬虫基础篇

    万人学习 2018-06-28 18:18:12
    本课程主要给大家分享基于Python语言的网络爬虫基础篇体验,其中讲解爬虫原理介绍,urllib和requests爬虫库的使用,以及网络爬虫中的数据分析与信息提取。通过模拟Web的GET和POST请求来爬取数据,介绍如何应对各种...
  • 中国知网爬虫

    万次阅读 多人点赞 2019-11-21 14:51:25
    中国知网爬虫 一、知网介绍 提起中国知网,如果你曾经写过论文,那么基本上都会与中国知网打交道,因为写一篇论文必然面临着各种查重,当然翟博士除外。但是,本次重点不在于写论文跟查重上,而在于我们要爬取知...

    中国知网爬虫

    一、知网介绍

    提起中国知网,如果你曾经写过论文,那么基本上都会与中国知网打交道,因为写一篇论文必然面临着各种查重,当然翟博士除外。但是,本次重点不在于写论文跟查重上,而在于我们要爬取知网上一些论文的数据,什么样的数据呢?我们举一个例子来说,在知网上,搜索论文的方式有很多种,但是对于专业人士来说,一般都会使用高级检索,因为直接去查找作者的话,容易查找到很多重名作者,所以我们本次的爬虫也是使用了高级检索(泛称)的爬虫,再具体就是专业检索,有助于我们唯一定位到作者。

    二、常规步骤—页面分析

    1.来到高级检索页面,以【AU=王长峰 AND FU=71271031】为例检索,结果如下:

    2.利用Xpath语法尝试获取这些数据,却发现一无所获。

    3.按照常理来说,即使是动态网页也可以利用Xpath语法提取到数据,只是在Python里面获取不到而已,所以在这里存在我们所不知道的问题。

    三、知网反爬虫机制

    常见的反爬虫机制一般有两种:

    第一种是请求头反爬虫,这个也是最简单的,如果你不给定请求头,对方服务器就不会理你。需要设置的参数有User-Agent、Referer和Cookie。

    第二种是动态网页,利用Ajax技术使用js接口来传递数据。

    毫无疑问,对于数据非常金贵的中国知网来说,肯定使用了以上两种反爬方式,并且中国知网的js接口非常复杂,虽说复杂,但是只要你的内功要是足够强的话,还是能够分析得出来,但是对于不懂js以及web开发的朋友来说,这将是一个非常困难的事情,所以使用selenium来进行爬虫将是一件相对来说比较容易的事情。

    另外,知网也不是仅仅只有这两层反爬虫机制,还有第三层,那就是iframe,由于很多朋友并没有做过网站开发,所以不太清楚了这是什么东西,导致即使发现自己的Xpath语法正确,也无法正确获取数据,从而怀疑人生,实际上,iframe比较常见的一种反爬虫机制,不过,如果你不知道这个东西,那么你就基本上无缘爬取中国知网了。

    四、什么是iframe?

    了解iframe前,你首先得知道一个网页是什么,没错,一个网页就是一个html页面。接下来我们从感性和源码两个方面来认识一下iframe.

    1.感性认知。

    一句话:一个完整的网页内部又嵌套了多个完整的网页,嵌套的页面就叫做iframe。

    2.网页源码认识。

    比如一个非常简单的html页面(如下图所示),一个html页面是拥有一个完整的html标签的,也就是起始html【<html>】和闭合html【</html>】,而iframe则是在这一个完整的html标签里面又嵌套了一个完整的html标签。

    <html>
    <body>
    
    <p>Python伊甸园</p>
    
    </body>
    </html>

    3.看一下中国知网的源码,发现果然存在一个iframe,所以这个就是中国知网的第三种反爬虫机制。

    五、最后给出中国知网的爬虫

    1.ways.py

    import pandas as pd
    #AU=王长峰 AND FU=71271031
    def get_data():
        data_list = pd.read_excel(r"C:\Users\wwb\Desktop\科学基金.xls",
                                  encoding='utf8')
        leaders = data_list.leader.values.tolist()
        codes = data_list.code.tolist()
        results = []
        for leader,code in zip(leaders,codes):
            result = "AU={} AND FU={}".format(leader,code)
            results.append(result)
        return results
    
    #results = get_data()
    #print(results)
    

    2.main.py

    from selenium import webdriver
    from lxml import etree
    import time
    from ways import get_data
    import random
    
    def pasre_page(driver):
        html = etree.HTML(driver.page_source)
        trs = html.xpath('//tr[@bgcolor]')
        for tr in trs:
            title = tr.xpath('./td//a[@class="fz14"]/text()')[0]
            authors = tr.xpath('./td[@class="author_flag"]/a[@class="KnowledgeNetLink"]//text()')
            authors = "|".join(authors)
            source = tr.xpath('./td//a[@target="_blank"]/text()')[1]
            times = tr.xpath('./td[@align="center"]/text()')[0].strip()
            database = tr.xpath('./td[@align="center"]/text()')[1].strip()
            counted = tr.xpath('./td//span[@class="KnowledgeNetcont"]/a/text()')
            if len(counted) == 0:
                counted = 0
            else:
                counted = counted[0]
            downloadCount = tr.xpath('./td//span[@class="downloadCount"]/a/text()')
            if len(downloadCount) == 0:
                downloadCount = 0
            else:
                downloadCount = downloadCount[0]
            data = {
                    "title":title,
                    "authors":authors,
                    "source":source,
                    "times":times,
                    "database":database,
                    "counted":counted,
                    "downloadCount":downloadCount,
                    }
            datas.append(data)
            print(title)
        time.sleep(random.uniform(2,4))
        driver.switch_to.parent_frame()
        search_win = driver.find_element_by_id('expertvalue')
        search_win.clear()
        time.sleep(random.uniform(2,4))
        
    
    driver_path = r"C:\Users\wwb\Desktop\chromedriver.exe"
    driver = webdriver.Chrome(executable_path=driver_path)
    url = "https://www.cnki.net/"
    driver.get(url)
    
    home_page = driver.find_element_by_id('highSearch')
    home_page.click()
    driver.switch_to_window(driver.window_handles[1])
    search_page = driver.find_element_by_id('1_3')
    search_page.click()
    datas = []
    results = get_data()
    for result in results:
        search_win = driver.find_element_by_id('expertvalue')
        search_win.send_keys(result)
        search_btn = driver.find_element_by_id('btnSearch')
        search_btn.click()
        iframe = driver.find_element_by_id('iframeResult')
        driver.switch_to.frame(iframe) 
        time.sleep(random.uniform(2,4))
        pasre_page(driver)

    3.部分结果展示:

     

     

    展开全文
  • Python爬虫教程-01-爬虫介绍

    万次阅读 多人点赞 2018-08-05 11:58:16
    Spider-01-爬虫介绍 Python 爬虫的知识量不是特别大,但是需要不停和网页打交道,每个网页情况都有所差异,所有对应变能力有些要求 爬虫准备工作 参考资料 精通Python爬虫框架Scrapy,人民邮电出版社 基础...
  • Python爬虫应用案例视频课程

    千人学习 2018-09-04 12:24:56
    本课程以通俗易懂的方式讲解Python爬虫技术,以案例为导向,手把手的Python爬虫实战教程,让你少走弯路! 课程内容包括:1.爬虫简介,Python爬虫入门、2.基本用法、3.爬虫应用(电影评论数据分析)。教学全程采用...
  • 爬虫技术

    万次阅读 2017-10-06 12:37:50
    1、scrapy(python爬虫) 2、pyspider(python爬虫) 3、Crawler4j(java单机爬虫) 4、WebMagic(java单机爬虫) 5、WebCollecto(java单机爬虫) 6、Heritrix(java爬虫
  • 本人是python新手,目前在看中国大学MOOC的嵩天老师的爬虫课程,其中一个实例是讲如何爬取淘宝商品信息 以下是代码: import requests import re def getHTMLText(url): try: r = requests.get(url, timeout=30)...
  • 1小时掌握Python爬虫+高效学习法则

    千人学习 2019-06-14 11:12:40
    本次直播主要讲解Python爬虫相关案例,通过实战项目,手把手教你学会Python爬虫。PS:课程上会展示优秀学员的项目作业,并提供给大家作参考哦!另外老师会主要详细Python学习路线和高效掌握Python的学习方法,分享...
  • 只因写了一段爬虫,公司200多人被抓!

    万次阅读 多人点赞 2019-10-16 09:09:00
    “一个程序员写了个爬虫程序,整个公司200多人被端了。” “不可能吧!” 刚从朋友听到这个消息的时候,我有点不太相信,做为一名程序员来讲,谁还没有写过几段爬虫呢?只因写爬虫程序就被端有点夸张了吧。 朋友...
  • Python爬虫、反爬虫和反反爬虫

    千次阅读 多人点赞 2018-05-03 20:02:31
    我主要对反爬虫和反反爬虫做一个简单的总结我想补充一下关于爬虫和反爬虫,以及为什么要爬虫,为什么要反爬虫,也就是从技术和技术带来的影响的角度来看待爬虫。发现一个很有意思的链接,爬虫、反爬虫、反反爬虫 1 ...
  • Python爬虫教程-00-写在前面

    万次阅读 多人点赞 2018-08-05 10:49:03
    鉴于好多人想学Python爬虫,缺没有简单易学的教程,我将在CSDN和大家分享Python爬虫的学习笔记,不定期更新 基础要求 Python 基础知识 Python 的基础知识,大家可以去菜鸟教程进行学习 菜鸟教程python基础 ...
  • 前言—功能:这个可以...这个微博爬虫是基于一个比较古老的微博版本的,那个时候的微博还可以直接爬网页来获取用户的微博内容,网址是:https://weibo.cn 二、准备阶段: 首先进行爬取的时候是需要带入 cook...
  • python简单爬虫代码,python入门

    万次阅读 多人点赞 2016-09-20 15:55:26
    python简单爬虫代码 python入门
  • 爬虫

    千次阅读 2020-03-25 13:18:56
    文章目录爬虫第一讲一、爬虫定义二、爬虫分类三、HTTP协议和HTTPs协议四、爬虫的一般流程五、响应状态码 爬虫第一讲 一、爬虫定义 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端发送网络请求,接收请求...
  • Python爬虫入门

    千次阅读 多人点赞 2018-05-31 16:24:20
    Python爬虫介绍 聚焦爬虫和通用爬虫 爬虫根据其使用场景分为通用爬虫和聚焦爬虫,两者区别并不是很大,他们获取网页信息的方式是相同的。但通用爬虫收集网页的全部信息,而聚焦爬虫则只获取和指定内容相关的网页...
  • Python爬虫的用途

    万次阅读 多人点赞 2018-08-16 14:02:03
    Python爬虫是用Python编程语言实现的网络爬虫,主要用于网络数据的抓取和处理,相比于其他语言,Python是一门非常适合开发网络爬虫的编程语言,大量内置包,可以轻松实现网络爬虫功能。 Python爬虫可以做的事情很多...
  • 基本爬虫框架

    千次阅读 多人点赞 2017-10-16 10:17:31
    爬虫
  • Python爬虫基础-01-带有请求参数的爬虫

    千次阅读 多人点赞 2018-06-06 19:06:23
    在上一篇文章Python爬虫入门中,Python爬虫程序爬取了指定网页的信息,爬虫发出的请求是一个固定的URL和部分请求信息,并没有请求参数,但是爬虫工作过程中发出的请求一般都需要加上请求参数,以完成对指定内容的...
  • 爬虫背景 原计划继续写一下关于手机APP的爬虫,结果发现夜神模拟器总是卡死,比较懒,不想找原因了,哈哈,所以接着写后面的博客了,从50篇开始要写几篇python爬虫的骚操作,也就是用Python3通过爬虫实现一些小工具...
  • Python3网络爬虫快速入门实战解析

    万次阅读 多人点赞 2017-09-28 14:48:41
    请在电脑的陪同下,阅读本文。本文以实战为主,阅读过程如稍有不适,还望多加练习。 本文的实战内容有:网络小说下载(静态网站)、优美壁纸下载(动态网站)、爱奇艺VIP视频下载 PS:本文为Gitchat线上分享文章,该文章...
  • 知乎爬虫过程详解(附完整代码)

    万次阅读 多人点赞 2019-07-25 21:37:16
    磕盐需要,编写了一个爬虫程序,对知乎网站的数据进行爬取,关于知乎爬虫,我们分别从用户角度和问题角度两个方向对其进行爬取。 项目流程:爬虫代码(Python)→非结构化数据(Mongo)→结构化数据(MySQL)→结构化数据...
  • 常见python爬虫框架

    万次阅读 2017-07-21 16:26:34
    一、python爬虫框架  一些爬虫项目的半成品 二、常见python爬虫框架  (1)Scrapy:很强大的爬虫框架,可以满足简单的页面爬取(比如可以明确获知url pattern的情况)。用这个框架可以轻松爬下来如亚马逊商品...
  • 1什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。 原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做 1.1...
  • 最近在学习爬虫技术,就用抖音练了一下手,发现抖音爬虫并不是那么难,主要还是签名算法花了我一点时间,只要能搞定签名,要爬取哪些数据基本就迎刃而解了。 至于签名算法的实现,网上有很多文章,大家如果要自己...
  • QQ空间相册爬虫

    万次阅读 多人点赞 2018-09-30 01:09:12
    QQ空间相册爬虫 目标: 不声不响的进入别人空间(直接进入内存消耗巨大,速度慢) 获取可以获取的所有的照片 获取.gif格式的照片(未实现) 获取视频(未实现,但可获取视频封面照片) 空间相册分析: 首先...
  • 爬虫 第二篇:爬虫岗位分析

    千次阅读 2015-08-19 14:08:05
    由于简历里写了三年爬虫经验,所以会收到很多公司的面试邀请。 大概各种类型的爬虫需求都接触了一遍,总结一下,看看目前爬虫岗位的需求状况。 为什么选择爬虫岗位 1.待遇高 2.兴趣 3.做大数据过渡 爬虫岗位是一...

空空如也

1 2 3 4 5 ... 20
收藏数 199,260
精华内容 79,704
关键字:

爬虫